From 76d430baad35be5a319abf69e2021f446c4229bb Mon Sep 17 00:00:00 2001 From: wp_xyz Date: Fri, 4 Oct 2024 11:54:54 +0200 Subject: [PATCH] VirtualTreeView: Improve Advanced sample project --- .../virtualtreeview/vst_advanced/Advanced.lpi | 1 + .../virtualtreeview/vst_advanced/Advanced.lpr | 3 +- .../vst_advanced/GeneralAbilitiesDemo.lfm | 149 +++++++++++------- .../vst_advanced/GeneralAbilitiesDemo.pas | 41 +++-- 4 files changed, 118 insertions(+), 76 deletions(-) diff --git a/examples/virtualtreeview/vst_advanced/Advanced.lpi b/examples/virtualtreeview/vst_advanced/Advanced.lpi index 5d3e6bc045..1915f36346 100644 --- a/examples/virtualtreeview/vst_advanced/Advanced.lpi +++ b/examples/virtualtreeview/vst_advanced/Advanced.lpi @@ -9,6 +9,7 @@ + diff --git a/examples/virtualtreeview/vst_advanced/Advanced.lpr b/examples/virtualtreeview/vst_advanced/Advanced.lpr index 880fef5616..453d8430f3 100644 --- a/examples/virtualtreeview/vst_advanced/Advanced.lpr +++ b/examples/virtualtreeview/vst_advanced/Advanced.lpr @@ -25,7 +25,8 @@ uses {$R extraresources.res} begin - Application.Title:=''; + Application.Scaled := True; + Application.Title := ''; Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.CreateForm(TStateForm, StateForm); diff --git a/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.lfm b/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.lfm index 42399a59af..83e358fd15 100644 --- a/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.lfm +++ b/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.lfm @@ -3,43 +3,41 @@ object GeneralForm: TGeneralForm Height = 536 Top = 185 Width = 804 - ActiveControl = BitBtn1 + ActiveControl = TreeFontButton Caption = 'GeneralForm' ClientHeight = 536 ClientWidth = 804 KeyPreview = True - OnCreate = FormCreate ShowHint = True - LCLVersion = '2.1.0.0' - object Label18: TLabel - AnchorSideLeft.Control = RadioGroup2 - AnchorSideTop.Control = RadioGroup2 + LCLVersion = '3.99.0.0' + OnCreate = FormCreate + object SwitchCheckImagesLabel: TLabel + AnchorSideLeft.Control = DrawSelectionModeRadioGroup + AnchorSideTop.Control = DrawSelectionModeRadioGroup AnchorSideTop.Side = asrBottom - Left = 576 + Left = 575 Height = 15 - Top = 374 + Top = 387 Width = 113 - Anchors = [akTop, akRight] - BorderSpacing.Top = 20 + BorderSpacing.Top = 10 Caption = 'Switch check images:' ParentColor = False end - object Label19: TLabel + object SwitchMainColumnLabel: TLabel AnchorSideLeft.Control = CheckMarkCombo AnchorSideTop.Control = CheckMarkCombo AnchorSideTop.Side = asrBottom - Left = 572 + Left = 575 Height = 15 - Top = 434 + Top = 437 Width = 112 - Anchors = [akTop, akRight] - BorderSpacing.Top = 20 + BorderSpacing.Top = 10 Caption = 'Switch main column:' ParentColor = False end object Label8: TLabel - AnchorSideLeft.Control = BitBtn1 - AnchorSideTop.Control = BitBtn1 + AnchorSideLeft.Control = TreeFontButton + AnchorSideTop.Control = TreeFontButton AnchorSideTop.Side = asrBottom AnchorSideRight.Control = SaveButton AnchorSideRight.Side = asrBottom @@ -54,13 +52,15 @@ object GeneralForm: TGeneralForm WordWrap = True end object VST2: TLazVirtualStringTree + AnchorSideRight.Control = Label8 Left = 5 Height = 523 Top = 8 - Width = 556 + Width = 562 Anchors = [akTop, akLeft, akRight, akBottom] AutoExpandDelay = 300 - ButtonFillMode = fmWindowColor + BorderSpacing.Right = 8 + ButtonFillMode = fmTransparent CheckImageKind = ckDarkTick ClipboardFormats.Strings = ( 'HTML Format' @@ -72,7 +72,7 @@ object GeneralForm: TGeneralForm Colors.DropTargetBorderColor = clActiveCaption Colors.HotColor = clBlack Colors.UnfocusedSelectionBorderColor = clBtnShadow - DefaultNodeHeight = 24 + DefaultNodeHeight = 25 DefaultText = 'Node' DragCursor = crHelp DrawSelectionMode = smBlendedRectangle @@ -93,7 +93,7 @@ object GeneralForm: TGeneralForm Options = [coEnabled, coParentBidiMode, coVisible] Position = 0 Spacing = 0 - Width = 22 + Width = 15 end item BiDiMode = bdLeftToRight @@ -104,14 +104,13 @@ object GeneralForm: TGeneralForm Text = 'Language column' Width = 300 end> - Header.DefaultHeight = 17 - Header.Height = 45 Header.Options = [hoColumnResize, hoDblClickResize, hoDrag, hoHotTrack, hoShowHint, hoVisible] Header.ParentFont = True Header.Style = hsFlatButtons HintMode = hmTooltip HotCursor = crHandPoint Images = TreeImages + ParentBiDiMode = False ParentFont = False RootNodeCount = 5 ScrollBarOptions.VerticalIncrement = 19 @@ -136,12 +135,12 @@ object GeneralForm: TGeneralForm OnStateChange = VST2StateChange end object CheckMarkCombo: TComboBox - AnchorSideLeft.Control = RadioGroup2 - AnchorSideTop.Control = Label18 + AnchorSideLeft.Control = DrawSelectionModeRadioGroup + AnchorSideTop.Control = SwitchCheckImagesLabel AnchorSideTop.Side = asrBottom Left = 575 Height = 23 - Top = 391 + Top = 404 Width = 211 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 @@ -157,31 +156,30 @@ object GeneralForm: TGeneralForm 'System flat check images' 'System default check images' ) - OnChange = CheckMarkComboChange PopupMenu = PopupMenu1 Style = csDropDownList TabOrder = 1 + OnChange = CheckMarkComboChange end object MainColumnUpDown: TUpDown - AnchorSideLeft.Control = Label19 - AnchorSideTop.Control = Label19 + AnchorSideLeft.Control = SwitchMainColumnLabel + AnchorSideTop.Control = SwitchMainColumnLabel AnchorSideTop.Side = asrBottom - Left = 572 - Height = 16 - Top = 451 - Width = 35 - Anchors = [akTop, akLeft, akRight] + Left = 575 + Height = 21 + Top = 454 + Width = 41 BorderSpacing.Top = 2 Increment = 2 Max = 2 Min = 0 - OnChanging = MainColumnUpDownChanging Orientation = udHorizontal Position = 2 TabOrder = 2 Wrap = True + OnChanging = MainColumnUpDownChanging end - object BitBtn1: TBitBtn + object TreeFontButton: TBitBtn AnchorSideTop.Control = Owner AnchorSideRight.Control = SaveButton Left = 575 @@ -209,17 +207,17 @@ object GeneralForm: TGeneralForm 33333300C000CC0333333333333330CCCCCCCC03333333333333300000000033 3333333333333333333333333333333333333333333333333333 } - OnClick = BitBtn1Click TabOrder = 3 + OnClick = TreeFontButtonClick end - object RadioGroup1: TRadioGroup + object TreeButtonLookRadioGroup: TRadioGroup AnchorSideLeft.Control = ThemeRadioGroup AnchorSideTop.Control = ThemeRadioGroup AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ThemeRadioGroup AnchorSideRight.Side = asrBottom Left = 575 - Height = 70 + Height = 93 Top = 204 Width = 221 Anchors = [akTop, akLeft, akRight] @@ -235,25 +233,44 @@ object GeneralForm: TGeneralForm ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 - ClientHeight = 50 + ClientHeight = 73 ClientWidth = 217 ItemIndex = 0 Items.Strings = ( 'Usual +/- buttons and lines' 'Little triangles without lines' ) - OnClick = RadioGroup1Click TabOrder = 4 + OnClick = TreeButtonLookRadioGroupClick + object ButtonFillModeCombo: TComboBox + Left = 6 + Height = 23 + Hint = 'Applies only to +/- buttons' + Top = 44 + Width = 205 + ItemHeight = 15 + ItemIndex = 0 + Items.Strings = ( + 'tree''s background color' + 'clWindow' + 'color gradient, Windows XP style (legacy code, use toThemeAware on Windows XP instead)' + 'transparent color' + ) + Style = csDropDownList + TabOrder = 3 + Text = 'tree''s background color' + OnChange = ButtonFillModeComboChange + end end - object RadioGroup2: TRadioGroup - AnchorSideLeft.Control = RadioGroup1 - AnchorSideTop.Control = RadioGroup1 + object DrawSelectionModeRadioGroup: TRadioGroup + AnchorSideLeft.Control = TreeButtonLookRadioGroup + AnchorSideTop.Control = TreeButtonLookRadioGroup AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = RadioGroup1 + AnchorSideRight.Control = TreeButtonLookRadioGroup AnchorSideRight.Side = asrBottom Left = 575 Height = 70 - Top = 284 + Top = 307 Width = 221 Anchors = [akTop, akLeft, akRight] AutoFill = True @@ -275,11 +292,11 @@ object GeneralForm: TGeneralForm 'Dotted rectangle' 'Alpha blended rectangle' ) - OnClick = RadioGroup2Click TabOrder = 5 + OnClick = DrawSelectionModeRadioGroupClick end object ThemeRadioGroup: TRadioGroup - AnchorSideLeft.Control = BitBtn1 + AnchorSideLeft.Control = TreeFontButton AnchorSideTop.Control = Label8 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = SaveButton @@ -307,14 +324,14 @@ object GeneralForm: TGeneralForm 'Theme aware' 'Not theme aware' ) - OnClick = ThemeRadioGroupClick TabOrder = 6 + OnClick = ThemeRadioGroupClick end object SaveButton: TBitBtn - AnchorSideTop.Control = BitBtn1 + AnchorSideTop.Control = TreeFontButton AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = BitBtn1 + AnchorSideBottom.Control = TreeFontButton AnchorSideBottom.Side = asrBottom Left = 700 Height = 34 @@ -324,12 +341,24 @@ object GeneralForm: TGeneralForm AutoSize = True BorderSpacing.Right = 8 Caption = 'Save as text...' - OnClick = SaveButtonClick TabOrder = 7 + OnClick = SaveButtonClick + end + object MainColumnLabel: TLabel + AnchorSideLeft.Control = MainColumnUpDown + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = MainColumnUpDown + AnchorSideTop.Side = asrCenter + Left = 624 + Height = 15 + Top = 457 + Width = 98 + BorderSpacing.Left = 8 + Caption = 'MainColumnLabel' end object TreeImages: TImageList - Left = 22 - Top = 148 + Left = 168 + Top = 232 Bitmap = { 4C7A120000001000000010000000200400000000000078DAED9A8B9283200C45 F3F17CDBFE16BB6E4B1B631E37C1BA75AD338C7D7812406E0828D13B1CAD2F65 @@ -372,11 +401,11 @@ object GeneralForm: TGeneralForm Font.Name = 'MS Sans Serif' MinFontSize = 0 MaxFontSize = 0 - Left = 84 - Top = 148 + Left = 240 + Top = 88 end object PopupMenu1: TPopupMenu - Left = 116 + Left = 168 Top = 148 object Onemenuitem1: TMenuItem Caption = 'Menu items' @@ -391,14 +420,14 @@ object GeneralForm: TGeneralForm object SaveDialog: TSaveDialog Filter = 'HTML file in UTF-8 (*.htm; *.html)|*.htm;*.html|Unicode UTF-16 text file (*.uni)|*.uni|Rich text UTF-16 file (*.rtf)|*.rtf|Comma separated values ANSI text file (*.csv)|*.csv|Unicode UTF-8 text file (*.txt)|*.txt|Plain ANSI text file (*.txt)|*.txt' Options = [ofOverwritePrompt, ofHideReadOnly, ofExtensionDifferent, ofEnableSizing] - Left = 148 + Left = 240 Top = 148 end object ImageList1: TImageList Height = 24 Width = 24 - Left = 32 - Top = 200 + Left = 168 + Top = 296 Bitmap = { 4C7A510000001800000018000000B5DD00000000000078DAEC9D075814D7D7FF 2355EC3DD19898C4C49698A8D1A8A996148D89D1C498C4184D31F6167B8935C6 diff --git a/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.pas b/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.pas index 7ef78bb52f..48325999a6 100644 --- a/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.pas +++ b/examples/virtualtreeview/vst_advanced/GeneralAbilitiesDemo.pas @@ -25,12 +25,14 @@ uses type TGeneralForm = class(TForm) + ButtonFillModeCombo: TComboBox; + MainColumnLabel: TLabel; VST2: TLazVirtualStringTree; CheckMarkCombo: TComboBox; - Label18: TLabel; + SwitchCheckImagesLabel: TLabel; MainColumnUpDown: TUpDown; - Label19: TLabel; - BitBtn1: TBitBtn; + SwitchMainColumnLabel: TLabel; + TreeFontButton: TBitBtn; Label8: TLabel; TreeImages: TImageList; FontDialog1: TFontDialog; @@ -38,14 +40,15 @@ type Onemenuitem1: TMenuItem; forrightclickselection1: TMenuItem; withpopupmenu1: TMenuItem; - RadioGroup1: TRadioGroup; - RadioGroup2: TRadioGroup; + TreeButtonLookRadioGroup: TRadioGroup; + DrawSelectionModeRadioGroup: TRadioGroup; VTHPopup: TLazVTHeaderPopupMenu; ThemeRadioGroup: TRadioGroup; SaveButton: TBitBtn; SaveDialog: TSaveDialog; ImageList1: TImageList; - procedure BitBtn1Click(Sender: TObject); + procedure TreeFontButtonClick(Sender: TObject); + procedure ButtonFillModeComboChange(Sender: TObject); procedure VST2InitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); procedure VST2InitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal); @@ -62,10 +65,10 @@ type var AskParent: Boolean; var PopupMenu: TPopupMenu); procedure VST2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); - procedure RadioGroup1Click(Sender: TObject); + procedure TreeButtonLookRadioGroupClick(Sender: TObject); procedure VST2FocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean); - procedure RadioGroup2Click(Sender: TObject); + procedure DrawSelectionModeRadioGroupClick(Sender: TObject); procedure ThemeRadioGroupClick(Sender: TObject); procedure SaveButtonClick(Sender: TObject); procedure VST2StateChange(Sender: TBaseVirtualTree; Enter, @@ -116,7 +119,7 @@ var begin // Determine if we are running on Windows XP. {$ifdef LCLWin32} - ThemeRadioGroup.Enabled := (Win32MajorVersion >= 5) and (Win32MinorVersion >= 1); + ThemeRadioGroup.Enabled := CheckWin32Version(5, 1); {$else} ThemeRadioGroup.Enabled := False; {$endif} @@ -124,6 +127,8 @@ begin ThemeRadioGroup.ItemIndex := 0; CheckMarkCombo.ItemIndex := 3; + ButtonFillModeCombo.ItemIndex := ord(VST2.ButtonFillMode); + MainColumnLabel.Caption := IntToStr(VST2.Header.MainColumn); // Add a second line of hint text for column headers (not possible in the object inspector). with VST2.Header do @@ -341,7 +346,7 @@ end; //---------------------------------------------------------------------------------------------------------------------- -procedure TGeneralForm.BitBtn1Click(Sender: TObject); +procedure TGeneralForm.TreeFontButtonClick(Sender: TObject); begin with FontDialog1 do @@ -352,6 +357,11 @@ begin end; end; +procedure TGeneralForm.ButtonFillModeComboChange(Sender: TObject); +begin + VST2.ButtonFillMode := TVTButtonFillMode(ButtonFillModeCombo.ItemIndex); +end; + //---------------------------------------------------------------------------------------------------------------------- procedure TGeneralForm.CheckMarkComboChange(Sender: TObject); @@ -366,6 +376,7 @@ procedure TGeneralForm.MainColumnUpDownChanging(Sender: TObject; var AllowChange begin VST2.Header.MainColumn := MainColumnUpDown.Position; + MainColumnLabel.Caption := IntToStr(VST2.Header.MainColumn); end; //---------------------------------------------------------------------------------------------------------------------- @@ -407,7 +418,7 @@ end; //---------------------------------------------------------------------------------------------------------------------- -procedure TGeneralForm.RadioGroup1Click(Sender: TObject); +procedure TGeneralForm.TreeButtonLookRadioGroupClick(Sender: TObject); begin with Sender as TRadioGroup do @@ -434,7 +445,7 @@ end; //---------------------------------------------------------------------------------------------------------------------- -procedure TGeneralForm.RadioGroup2Click(Sender: TObject); +procedure TGeneralForm.DrawSelectionModeRadioGroupClick(Sender: TObject); begin with Sender as TRadioGroup do @@ -459,9 +470,9 @@ begin else PaintOptions := PaintOptions - [toThemeAware]; - RadioGroup1.Enabled := ThemeRadioGroup.ItemIndex = 1; - RadioGroup2.Enabled := ThemeRadioGroup.ItemIndex = 1; - Label18.Enabled := ThemeRadioGroup.ItemIndex = 1; + TreeButtonLookRadioGroup.Enabled := ThemeRadioGroup.ItemIndex = 1; + DrawSelectionModeRadioGroup.Enabled := ThemeRadioGroup.ItemIndex = 1; + SwitchCheckImagesLabel.Enabled := ThemeRadioGroup.ItemIndex = 1; CheckMarkCombo.Enabled := ThemeRadioGroup.ItemIndex = 1; end;