Examples: Extend Treeview customdraw sample project by HideSelection option.

This commit is contained in:
wp_xyz 2025-02-16 16:30:44 +01:00
parent 5adcd2c308
commit ad7e912a49
3 changed files with 72 additions and 42 deletions

View File

@ -51,7 +51,7 @@ object MainForm: TMainForm
end
object lbTask: TListBox
Left = 0
Height = 400
Height = 377
Top = 53
Width = 288
Align = alClient
@ -65,6 +65,7 @@ object MainForm: TMainForm
'Bold top-level nodes'
'Top-level node gradient'
'Rounded rectangles'
'RowSelect + hot-track (themed)'
'RowSelect + hot-track (full line)'
'RowSelect + hot-track (at icon)'
'RowSelect + hot-track (at text)'
@ -85,79 +86,80 @@ object MainForm: TMainForm
end
object Panel2: TPanel
Left = 0
Height = 77
Top = 461
Height = 100
Top = 438
Width = 288
Align = alBottom
AutoSize = True
BevelOuter = bvNone
ClientHeight = 77
ClientHeight = 100
ClientWidth = 288
TabOrder = 1
object btnToggleEnabledDisabled: TButton
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = cmbExpandSign
AnchorSideTop.Control = cbShowLines
AnchorSideTop.Side = asrBottom
Left = 0
Height = 25
Top = 52
Top = 75
Width = 205
AutoSize = True
BorderSpacing.Top = 6
Caption = 'Toggle 1st node enabled/disabled'
TabOrder = 0
TabOrder = 5
OnClick = btnToggleEnabledDisabledClick
end
object cbShowLines: TCheckBox
AnchorSideLeft.Control = cbShowButtons
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel2
Left = 111
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = cbShowButtons
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 0
Top = 50
Width = 74
BorderSpacing.Left = 20
BorderSpacing.Top = 6
Caption = 'Show lines'
Checked = True
State = cbChecked
TabOrder = 1
TabOrder = 4
OnChange = cbShowLinesChange
end
object cbMultiSelect: TCheckBox
AnchorSideLeft.Control = cbShowLines
AnchorSideLeft.Control = cbHideSelection
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel2
Left = 205
Left = 124
Height = 19
Top = 0
Width = 81
BorderSpacing.Left = 20
Caption = 'Multi-select'
TabOrder = 2
TabOrder = 1
OnChange = cbMultiSelectChange
end
object cbShowButtons: TCheckBox
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = Panel2
AnchorSideTop.Control = cbHideSelection
AnchorSideTop.Side = asrBottom
Left = 0
Height = 19
Top = 0
Top = 25
Width = 91
Caption = 'Show buttons'
Checked = True
State = cbChecked
TabOrder = 3
TabOrder = 2
OnChange = cbShowButtonsChange
end
object cmbExpandSign: TComboBox
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = cbShowLines
AnchorSideTop.Side = asrBottom
Left = 0
AnchorSideLeft.Control = cbMultiSelect
AnchorSideTop.Control = cbShowButtons
AnchorSideTop.Side = asrCenter
Left = 124
Height = 23
Top = 23
Width = 104
BorderSpacing.Top = 4
BorderSpacing.Top = 6
ItemHeight = 15
ItemIndex = 0
Items.Strings = (
@ -168,10 +170,24 @@ object MainForm: TMainForm
'> symbol'
)
Style = csDropDownList
TabOrder = 4
TabOrder = 3
Text = 'themed sign'
OnChange = cmbExpandSignChange
end
object cbHideSelection: TCheckBox
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = Panel2
Left = 0
Height = 19
Top = 0
Width = 104
BorderSpacing.Bottom = 6
Caption = 'cbHideSelection'
Checked = True
State = cbChecked
TabOrder = 0
OnChange = cbHideSelectionChange
end
end
end
object Splitter1: TSplitter

View File

@ -17,6 +17,7 @@ type
cbShowLines: TCheckBox;
cbMultiSelect: TCheckBox;
cbShowButtons: TCheckBox;
cbHideSelection: TCheckBox;
cmbExpandSign: TComboBox;
ImageList1: TImageList;
Label1: TLabel;
@ -26,6 +27,7 @@ type
Splitter1: TSplitter;
TreeView: TTreeView;
procedure btnToggleEnabledDisabledClick(Sender: TObject);
procedure cbHideSelectionChange(Sender: TObject);
procedure cbMultiSelectChange(Sender: TObject);
procedure cbShowButtonsChange(Sender: TObject);
procedure cbShowLinesChange(Sender: TObject);
@ -101,19 +103,20 @@ const
tTopLevelBold = 4;
tTopLevelGradient = 5;
tRoundRectNodes = 6;
tRowSelect_HotTrack_Full = 7;
tRowSelect_HotTrack_Icon = 8;
tRowSelect_HotTrack_Text = 9;
tRowSelect_HotTrack_Gradient_Full = 10;
tRowSelect_HotTrack_Gradient_Icon = 11;
tRowSelect_HotTrack_Gradient_Text = 12;
tRowSelect_HotTrack_Gradient_TextOnly = 13;
tSelectHotTrack_Image = 14;
tBackgroundImage_Themed = 15;
tBackgroundImage_NotThemed = 16;
tBackgroundImage_Themed_NoHotTrackIcons = 17;
tBackgroundGradient_Themed = 18;
tBackgroundGradient_NotThemed = 19;
tRowSelect_HotTrack_Themed = 7;
tRowSelect_HotTrack_Full = 8;
tRowSelect_HotTrack_Icon = 9;
tRowSelect_HotTrack_Text = 10;
tRowSelect_HotTrack_Gradient_Full = 11;
tRowSelect_HotTrack_Gradient_Icon = 12;
tRowSelect_HotTrack_Gradient_Text = 13;
tRowSelect_HotTrack_Gradient_TextOnly = 14;
tSelectHotTrack_Image = 15;
tBackgroundImage_Themed = 16;
tBackgroundImage_NotThemed = 17;
tBackgroundImage_Themed_NoHotTrackIcons = 18;
tBackgroundGradient_Themed = 19;
tBackgroundGradient_NotThemed = 20;
procedure TMainForm.FormCreate(Sender: TObject);
begin
@ -147,6 +150,11 @@ begin
node.Enabled := not node.Enabled;
end;
procedure TMainForm.cbHideSelectionChange(Sender: TObject);
begin
TreeView.HideSelection := cbHideSelection.Checked;
end;
procedure TMainForm.cbMultiSelectChange(Sender: TObject);
begin
if cbMultiSelect.Checked then
@ -247,6 +255,9 @@ begin
TreeView.OnAdvancedCustomDrawItem := @RoundedRectNodes_AdvancedCustomDrawItem;
end;
tRowSelect_HotTrack_Themed:
TreeView.Options := TreeView.Options + [tvoRowSelect, tvoHotTrack, tvoThemedDraw];
tRowSelect_HotTrack_Full,
tRowSelect_HotTrack_Icon,
tRowSelect_HotTrack_Text:
@ -339,7 +350,8 @@ begin
Sender.Canvas.Brush.Color := clGray;
Sender.Canvas.Font.Color := clHighlightText;
Sender.Canvas.Font.Style := [];
end;
end else
Sender.Canvas.Brush.Color := clNone;
end;
end;
@ -387,7 +399,10 @@ begin
Sender.Canvas.Brush.Color := clNone;
if lbTask.ItemIndex = tBackgroundImage_Themed_NoHotTrackIcons then
PaintImages := false;
end;
end
else
// Prevent drawing of node text background over the image
Sender.Canvas.Brush.Color := clNone;
end;
end;

View File

@ -12,7 +12,6 @@
<XPManifest>
<DpiAware Value="True"/>
</XPManifest>
<Icon Value="0"/>
</General>
<BuildModes>
<Item Name="Default" Default="True"/>