Files
lazarus-ccr/components/virtualtreeview-unstable/demos/advanced/Main.pas
blikblum 0143490fd7 * Implemented draw ghosted images
* fix compilation of Advanced demo
* remove some lrs files

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@290 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2007-12-16 11:42:45 +00:00

205 lines
5.2 KiB
ObjectPascal

unit Main;
{$MODE Delphi}
{$H+}
// Advanced demo for Virtual Treeview showing various effects and features in several forms.
// This is the main form which serves as container window for the demo forms.
// Written by Mike Lischke.
interface
{$ifdef COMPILER_7_UP}
// For some things to work we need code, which is classified as being unsafe for .NET.
{$warn UNSAFE_TYPE off}
{$warn UNSAFE_CAST off}
{$warn UNSAFE_CODE off}
{$endif COMPILER_7_UP}
uses
LCLIntf, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Buttons, ExtCtrls, StdCtrls, ActnList, LResources;
type
TMainForm = class(TForm)
PageScroller1: TPanel;
SpeedDemoButton: TSpeedButton;
AbilitiesDemoButton: TSpeedButton;
PropertiesDemoButton: TSpeedButton;
VisibilityDemoButton: TSpeedButton;
GridDemoButton: TSpeedButton;
AlignDemoButton: TSpeedButton;
QuitButton: TSpeedButton;
PaintTreeDemoButton: TSpeedButton;
Bevel1: TBevel;
MainPanel: TPanel;
Bevel2: TBevel;
Bevel3: TBevel;
StatusBar: TStatusBar;
ContainerPanel: TPanel;
Label1: TLabel;
Label2: TLabel;
XPDemoButton: TSpeedButton;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
procedure QuitButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DemoButtonClick(Sender: TObject);
procedure FormShow(Sender: TObject);
end;
var
MainForm: TMainForm;
procedure LoadUnicodeStrings(Name: string; var Strings: array of WideString);
procedure SetStatusbarText(const S: string);
//----------------------------------------------------------------------------------------------------------------------
implementation
uses
SpeedDemo, GeneralAbilitiesDemo, DrawTreeDemo, PropertiesDemo,
GridDemo, VisibilityDemo, AlignDemo, WindowsXPStyleDemo, MultilineDemo, HeaderCustomDrawDemo,
States;
//----------------------------------------------------------------------------------------------------------------------
procedure LoadUnicodeStrings(Name: string; var Strings: array of WideString);
// Loads the Unicode strings from the resource.
var
Res: TLResource;
Head, Tail: PWideChar;
I: Integer;
begin
//Stream := TResourceStream.Create(0, Name, 'Unicode');
Res := LazarusResources.Find(Name);
if (Res <> nil) and (Res.Value <> '') then
begin
//Head := Stream.Memory;
Head := PWideChar(Res.Value);
// Skip byte order mark.
Inc(Head);
Tail := Head;
for I := 0 to High(Strings) do
begin
Head := Tail;
while not (Tail^ in [WideChar(#0), WideChar(#13)]) do
Inc(Tail);
SetString(Strings[I], Head, Tail - Head);
// Skip carriage return and linefeed.
Inc(Tail, 2);
end;
end;
end;
//----------------------------------------------------------------------------------------------------------------------
procedure SetStatusbarText(const S: string);
begin
MainForm.StatusBar.SimpleText := S;
end;
//----------------------------------------------------------------------------------------------------------------------
procedure TMainForm.QuitButtonClick(Sender: TObject);
begin
Close;
end;
//----------------------------------------------------------------------------------------------------------------------
procedure TMainForm.FormCreate(Sender: TObject);
begin
// Show hints 10 seconds.
Application.HintHidePause := 10000;
end;
//----------------------------------------------------------------------------------------------------------------------
procedure TMainForm.DemoButtonClick(Sender: TObject);
// This method is a kind of scheduler. Here we switch between the demo forms.
var
NewDemoClass: TFormClass;
NewDemo: TForm;
begin
case (Sender as TSpeedButton).Tag of
0:
NewDemoClass := TSpeedForm;
1:
NewDemoClass := TGeneralForm;
2:
NewDemoClass := TPropertiesForm;
3:
NewDemoClass := TVisibilityForm;
5:
NewDemoClass := TGridForm;
6:
NewDemoClass := TDrawTreeForm;
7:
NewDemoClass := TAlignForm;
8:
NewDemoClass := TWindowsXPForm;
9:
NewDemoClass := TNodeForm;
10:
NewDemoClass := THeaderOwnerDrawForm;
else
NewDemoClass := nil;
end;
if (ContainerPanel.ControlCount = 0) or not (ContainerPanel.Controls[0] is NewDemoClass) then
begin
if ContainerPanel.ControlCount > 0 then
ContainerPanel.Controls[0].Free;
if Assigned(NewDemoClass) then
begin
//original code:
{
NewDemo := NewDemoClass.Create(Self);
NewDemo.Hide;
NewDemo.BorderStyle := bsNone;
NewDemo.Parent := ContainerPanel;
NewDemo.Align := alClient;
NewDemo.Show;
}
//workaround
NewDemo := NewDemoClass.Create(Self);
NewDemo.Hide;
//NewDemo.BorderStyle := bsNone;
NewDemo.Align := alClient;
NewDemo.Show;
NewDemo.Parent := ContainerPanel;
end;
end;
end;
//----------------------------------------------------------------------------------------------------------------------
procedure TMainForm.FormShow(Sender: TObject);
begin
StateForm.Show;
end;
//----------------------------------------------------------------------------------------------------------------------
initialization
{$i Main.lrs}
{$i unicode.lrs}
end.