mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-18 08:22:37 +02:00
206 lines
5.9 KiB
ObjectPascal
206 lines
5.9 KiB
ObjectPascal
unit SpeedDemo;
|
|
|
|
{$MODE Delphi}
|
|
|
|
// Virtual Treeview sample form demonstrating following features:
|
|
// - Speed.
|
|
// - Background image.
|
|
// Written by Mike Lischke.
|
|
|
|
interface
|
|
|
|
uses
|
|
LCLIntf, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, Laz.VirtualTrees, ExtDlgs, Menus, LResources, Buttons, ExtCtrls;
|
|
|
|
type
|
|
|
|
{ TSpeedForm }
|
|
|
|
TSpeedForm = class(TForm)
|
|
Bevel1: TBevel;
|
|
Label1: TLabel;
|
|
VST1: TLazVirtualStringTree;
|
|
Label3: TLabel;
|
|
Label6: TLabel;
|
|
GroupBox2: TGroupBox;
|
|
SBCheckBox: TCheckBox;
|
|
LoadBackgroundButton: TButton;
|
|
GroupBox1: TGroupBox;
|
|
AddRootButton: TButton;
|
|
NodeCountEdit: TEdit;
|
|
AddChildButton: TButton;
|
|
DeleteSelectionButton: TButton;
|
|
Label4: TLabel;
|
|
OPD: TOpenPictureDialog;
|
|
Label2: TLabel;
|
|
Label5: TLabel;
|
|
Label7: TLabel;
|
|
ClearButton: TButton;
|
|
procedure SBCheckBoxClick(Sender: TObject);
|
|
procedure LoadBackgroundButtonClick(Sender: TObject);
|
|
procedure ClearButtonClick(Sender: TObject);
|
|
procedure AddButtonClick(Sender: TObject);
|
|
procedure VST1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
|
var CellText: String);
|
|
procedure VST1Change(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
|
procedure VST1StructureChange(Sender: TBaseVirtualTree; Node: PVirtualNode; Reason: TChangeReason);
|
|
procedure DeleteSelectionButtonClick(Sender: TObject);
|
|
procedure VST1StateChange(Sender: TBaseVirtualTree; Enter, Leave: TVirtualTreeStates);
|
|
end;
|
|
|
|
var
|
|
SpeedForm: TSpeedForm;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses
|
|
States;
|
|
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.AddButtonClick(Sender: TObject);
|
|
|
|
var
|
|
Count: Integer;
|
|
Start: Cardinal;
|
|
|
|
begin
|
|
Screen.Cursor := crHourGlass;
|
|
with VST1 do
|
|
try
|
|
Start := GetTickCount;
|
|
case (Sender as TButton).Tag of
|
|
0: // add to root
|
|
begin
|
|
Count := StrToInt(NodeCountEdit.Text);
|
|
RootNodeCount := Integer(RootNodeCount) + Count;
|
|
end;
|
|
1: // add as child
|
|
if Assigned(FocusedNode) then
|
|
begin
|
|
Count := StrToInt(NodeCountEdit.Text);
|
|
ChildCount[FocusedNode] := Integer(ChildCount[FocusedNode]) + Count;
|
|
Expanded[FocusedNode] := True;
|
|
InvalidateToBottom(FocusedNode);
|
|
end;
|
|
end;
|
|
Label1.Caption := Format('Last operation duration: %d ms', [GetTickCount - Start]);
|
|
Label3.Caption := Format('Nodes in tree: %d', [VST1.TotalCount]);
|
|
finally
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.ClearButtonClick(Sender: TObject);
|
|
|
|
var
|
|
Start: Cardinal;
|
|
|
|
begin
|
|
Screen.Cursor := crHourGlass;
|
|
try
|
|
Start := GetTickCount;
|
|
VST1.Clear;
|
|
Label1.Caption := Format('Clear operation duration: %d ms', [GetTickCount - Start]);
|
|
Label3.Caption := 'Nodes in tree: 0';
|
|
finally
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.LoadBackgroundButtonClick(Sender: TObject);
|
|
|
|
begin
|
|
with OPD do
|
|
begin
|
|
if Execute then
|
|
begin
|
|
VST1.Background.LoadFromFile(FileName);
|
|
if SBCheckBox.Checked then
|
|
VST1.Invalidate
|
|
else
|
|
SBCheckBox.Checked := True;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.SBCheckBoxClick(Sender: TObject);
|
|
|
|
begin
|
|
if SBCheckBox.Checked then
|
|
VST1.TreeOptions.PaintOptions := VST1.TreeOptions.PaintOptions + [toShowBackground]
|
|
else
|
|
VST1.TreeOptions.PaintOptions := VST1.TreeOptions.PaintOptions - [toShowBackground];
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.VST1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
|
var CellText: String);
|
|
|
|
begin
|
|
CellText := Format('Level %d, Index %d', [Sender.GetNodeLevel(Node), Node.Index]);
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.VST1Change(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
|
|
|
begin
|
|
Label6.Caption := Format('Selected: %d', [VST1.SelectedCount]);
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.VST1StructureChange(Sender: TBaseVirtualTree; Node: PVirtualNode; Reason: TChangeReason);
|
|
|
|
begin
|
|
Label6.Caption := Format('Selected: %d', [VST1.SelectedCount]);
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.DeleteSelectionButtonClick(Sender: TObject);
|
|
|
|
var
|
|
Start: Cardinal;
|
|
|
|
begin
|
|
Screen.Cursor := crHourGlass;
|
|
try
|
|
Start := GetTickCount;
|
|
VST1.DeleteSelectedNodes;
|
|
Label1.Caption := Format('Delete operation duration: %d ms', [GetTickCount - Start]);
|
|
Label3.Caption := 'Nodes in tree: ' + IntToStr(VST1.TotalCount);
|
|
finally
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
procedure TSpeedForm.VST1StateChange(Sender: TBaseVirtualTree; Enter, Leave: TVirtualTreeStates);
|
|
|
|
begin
|
|
if not (csDestroying in ComponentState) then
|
|
UpdateStateDisplay(Sender.TreeStates, Enter, Leave);
|
|
end;
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
end.
|
|
|