You've already forked lazarus-ccr
applications
components
acs
orpheus
rgbgraphics
richview
rtfview
svn
tparadoxdataset
virtualtreeview
virtualtreeview-unstable
demos
advanced
dataarray
images
mininal
objects
ole
vtbasic
Main.lfm
Main.lrs
Main.pas
VTCheckList.lfm
VTCheckList.lrs
VTCheckList.pas
VTDBExample.lfm
VTDBExample.lrs
VTDBExample.pas
VTEditors.pas
VTNoData.lfm
VTNoData.lrs
VTNoData.pas
VTPropEdit.lfm
VTPropEdit.lrs
VTPropEdit.pas
VTreeData.pas
ViewCode.lfm
ViewCode.lrs
ViewCode.pas
customers.db
fmain.lrs
vtbasic.lpi
vtbasic.lpr
resources
units
VTAccessibility.pas
VTAccessibilityFactory.pas
VTConfig.inc
VTHeaderPopup.pas
VirtualTrees.pas
ideicons.lrs
lclconstants.inc
lclfunctions.inc
port.log
registervirtualtreeview.lfm
registervirtualtreeview.pas
virtualtrees.lrs
virtualtreeview_package.lpk
virtualtreeview_package.pas
vtlogger.pas
xdev_toolkit
examples
wst
Fixed some resource files git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@140 8e941d3f-bd1b-0410-a28a-d453659cc2b4
201 lines
7.6 KiB
ObjectPascal
201 lines
7.6 KiB
ObjectPascal
{*********************************************************************** }
|
|
{ File: Main.pas }
|
|
{ }
|
|
{ Purpose: }
|
|
{ main source file to demonstrate how to get started with VT (1) }
|
|
{ <-- Basic VT as a Listbox (no node data used) --> }
|
|
{ }
|
|
{ Module Record: }
|
|
{ }
|
|
{ Date AP Details }
|
|
{ -------- -- -------------------------------------- }
|
|
{ 05-Nov-2002 TC Created (tomc@gripsystems.com) }
|
|
{**********************************************************************}
|
|
unit Main;
|
|
|
|
{$mode delphi}
|
|
{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
LCLIntf, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, VirtualTrees, ImgList, ExtCtrls, StdCtrls, Buttons, LResources;
|
|
|
|
type
|
|
TfrmMain =
|
|
class(TForm)
|
|
imgMaster: TImageList;
|
|
panMain: TPanel;
|
|
VT: TVirtualStringTree;
|
|
panBase: TPanel;
|
|
chkRadioButtons: TCheckBox;
|
|
chkChangeHeight: TCheckBox;
|
|
chkHotTrack: TCheckBox;
|
|
Label1: TLabel;
|
|
btnViewCode: TSpeedButton;
|
|
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
|
|
procedure VTGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
|
|
procedure VTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
|
|
procedure VTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
|
var CellText: WideString);
|
|
procedure VTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
|
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
|
|
procedure VTDblClick(Sender: TObject);
|
|
procedure chkRadioButtonsClick(Sender: TObject);
|
|
procedure VTFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex;
|
|
var Allowed: Boolean);
|
|
procedure chkChangeHeightClick(Sender: TObject);
|
|
procedure chkHotTrackClick(Sender: TObject);
|
|
procedure btnViewCodeClick(Sender: TObject);
|
|
|
|
private
|
|
FCaptions : TStringList;
|
|
end;
|
|
|
|
var
|
|
frmMain: TfrmMain;
|
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
VTNoData, VTCheckList, VTPropEdit, VTDBExample, VTEditors, ViewCode;
|
|
|
|
procedure TfrmMain.FormCreate(Sender: TObject);
|
|
begin
|
|
Top := 0;
|
|
Left:= 0;
|
|
|
|
|
|
{let's make some data to display - it's going to come from somewhere}
|
|
FCaptions := TStringList.Create;
|
|
|
|
FCaptions.Add( 'Basic VT as a Listbox (no node data used)' );
|
|
FCaptions.Add( 'Basic VT as a Tree (no node data used)' );
|
|
FCaptions.Add( 'Generic CheckListbox selection Form (no node data used)');
|
|
FCaptions.Add( 'Dynamic Property Editor example 1.' );
|
|
FCaptions.Add( 'Database example 1.' );
|
|
|
|
{this is first important value to set, 0 is ok if you want to use AddChild later}
|
|
VT .RootNodeCount := FCaptions.Count;
|
|
end;
|
|
|
|
procedure TfrmMain.FormDestroy(Sender: TObject);
|
|
begin
|
|
FCaptions.Free;
|
|
end;
|
|
|
|
procedure TfrmMain.VTGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
|
|
{--------------------------------------------------------------------------------------------
|
|
note zero node data size - you don't *have* to store data in the node. Maybe this is very likely
|
|
if you are dealing with a list with no children that can be directly indexed into via Node.Index
|
|
---------------------------------------------------------------------------------------------}
|
|
begin
|
|
NodeDataSize := 0;
|
|
end;
|
|
|
|
procedure TfrmMain.VTInitNode(Sender: TBaseVirtualTree; ParentNode,
|
|
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
|
|
begin
|
|
Node.CheckType := ctRadioButton; {must enable toCheckSupport in TreeOptions.MiscOptions}
|
|
end;
|
|
|
|
procedure TfrmMain.VTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
|
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
|
|
begin
|
|
Celltext := FCaptions[Node.Index]; {this is where we say what the text to display}
|
|
end;
|
|
|
|
procedure TfrmMain.VTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
|
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
|
|
begin
|
|
ImageIndex := Node.Index; {this is where we say what image to display}
|
|
end;
|
|
|
|
procedure TfrmMain.VTDblClick(Sender: TObject);
|
|
begin
|
|
//showform is a utility routine for this app - in vteditors.pas
|
|
case VT.FocusedNode.Index of
|
|
0: ShowMessage( 'This is it...!' ); // Main.pas
|
|
1: ShowForm( TfrmVTNoData, Left, Height ); // VTNoData.pas
|
|
2: DoVTCheckListExample; // VTCheckList.pas
|
|
3: ShowForm( TfrmVTPropEdit, Left + Width, Top ); // VTPropEdit.pas
|
|
4: ShowForm( TfrmVTDBExample, Left + Width, Top ); // VTDBExample.pas
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.chkHotTrackClick(Sender: TObject);
|
|
begin
|
|
with VT.TreeOptions do
|
|
begin
|
|
if chkHotTrack.checked then
|
|
PaintOptions := PaintOptions + [toHotTrack]
|
|
else
|
|
PaintOptions := PaintOptions - [toHotTrack];
|
|
|
|
VT.Refresh;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.chkRadioButtonsClick(Sender: TObject);
|
|
begin
|
|
with VT.TreeOptions do
|
|
begin
|
|
if chkRadioButtons.checked then
|
|
MiscOptions := MiscOptions + [toCheckSupport]
|
|
else
|
|
MiscOptions := MiscOptions - [toCheckSupport];
|
|
|
|
VT.Refresh;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.VTFocusChanging(Sender: TBaseVirtualTree; OldNode,
|
|
NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex;
|
|
var Allowed: Boolean);
|
|
begin
|
|
{example of dynamically changing height of node}
|
|
if chkChangeHeight.checked then
|
|
begin
|
|
Sender.NodeHeight[OldNode] := 20;
|
|
Sender.NodeHeight[NewNode] := 40;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmMain.chkChangeHeightClick(Sender: TObject);
|
|
begin
|
|
{example of resetting dynamically changing node heights}
|
|
if not chkChangeHeight.checked then with VT do
|
|
begin
|
|
NodeHeight[FocusedNode] := 20;
|
|
InvalidateNode(FocusedNode);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TfrmMain.btnViewCodeClick(Sender: TObject);
|
|
var
|
|
sFile : string;
|
|
f : TForm;
|
|
begin
|
|
case VT.FocusedNode.Index of
|
|
0: sFile := 'Main' ;
|
|
1: sFile := 'VTNoData' ;
|
|
2: sFile := 'VTCheckList' ;
|
|
3: sFile := 'VTPropEdit' ;
|
|
4: sFile := 'VTDBExample' ;
|
|
end;
|
|
f := ShowForm( TfrmViewCode, Left, Height ); // ViewCode.pas
|
|
TfrmViewCode(f).SynEdit1.Lines.LoadFromFile( ExtractFilePath(ParamStr(0)) + sFile + '.pas' );
|
|
end;
|
|
|
|
initialization
|
|
{$I Main.lrs}
|
|
|
|
end.
|
|
|