lazarus/examples/cooltoolbar/unit1.pas

385 lines
10 KiB
ObjectPascal

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, ComCtrls,
Menus, ActnList, ExtCtrls, StdCtrls, Spin, Toolwin, IniFiles;
type
{ TCoolBarDemo }
TCoolBarDemo = class(TForm)
AcTBLeft: TAction;
AcTBTop: TAction;
AcTBRight: TAction;
AcTB1Visi: TAction;
AcTB2Visi: TAction;
AcTB3Visi: TAction;
AcTB4Visi: TAction;
AcTB5Visi: TAction;
AcToolBarSmall: TAction;
AcToolBarMedium: TAction;
AcToolBarLarge: TAction;
ActionList1: TActionList;
Button1: TButton;
ComboBox1: TComboBox;
CoolBar1: TCoolBar;
Label1: TLabel;
Label2: TLabel;
MainMenu1: TMainMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MIShowTB1: TMenuItem;
MIShowTB2: TMenuItem;
MIShowTB3: TMenuItem;
MIShowTB4: TMenuItem;
MIShowTB5: TMenuItem;
MITBLeft: TMenuItem;
MITBTop: TMenuItem;
MITBRight: TMenuItem;
MITBMedium: TMenuItem;
MITBLarge: TMenuItem;
MITBSmall: TMenuItem;
PopupMenu1: TPopupMenu;
RadioGroup1: TRadioGroup;
SpinEdit1: TSpinEdit;
ToolBar1: TToolBar;
ToolBar2: TToolBar;
ToolBar3: TToolBar;
ToolBar4: TToolBar;
ToolBar5: TToolBar;
TBtn21: TToolButton;
TBtn22: TToolButton;
TBtn23: TToolButton;
TBtn24: TToolButton;
TBtn11: TToolButton;
TBtn12: TToolButton;
TBtn13: TToolButton;
TBtn41: TToolButton;
TBtn42: TToolButton;
TBtn43: TToolButton;
TBtn31: TToolButton;
TBtn32: TToolButton;
TBtn33: TToolButton;
TBtn34: TToolButton;
TBtn35: TToolButton;
TBtn51: TToolButton;
TBtn52: TToolButton;
TBtn53: TToolButton;
TBtn54: TToolButton;
TBtn55: TToolButton;
TBtn56: TToolButton;
procedure AcTB1VisiExecute(Sender: TObject);
procedure AcTB2VisiExecute(Sender: TObject);
procedure AcTB3VisiExecute(Sender: TObject);
procedure AcTB4VisiExecute(Sender: TObject);
procedure AcTB5VisiExecute(Sender: TObject);
procedure AcTBLeftExecute(Sender: TObject);
procedure AcTBRightExecute(Sender: TObject);
procedure AcTBTopExecute(Sender: TObject);
procedure AcToolBarLargeExecute(Sender: TObject);
procedure AcToolBarMediumExecute(Sender: TObject);
procedure AcToolBarSmallExecute(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
private
{ private declarations }
IniFileName: string;
const
cTBSmall = 0;
cTBMedium = 1;
cTBLarge = 2;
cTBTop = 0;
cTBLeft = 1;
cTBRight = 2;
cCoolBarSettings = 'CoolBarSettings';
cButtonSize = 'ButtonSize';
cCoolBarPos = 'CoolBarPos';
cBandBreak = 'CoolBandBreak';
cBandPos = 'CoolBandPos';
cBandVisi = 'CoolBandVisi';
procedure LoadFromIni;
procedure SaveToIni;
procedure SetButtonSize(ASize: Integer);
procedure SetCoolBarAlign(AAlign: TAlign; AVertical: Boolean);
public
{ public declarations }
end;
var
CoolBarDemo: TCoolBarDemo;
implementation
{$R *.lfm}
{ TCoolBarDemo }
procedure TCoolBarDemo.RadioGroup1Click(Sender: TObject);
begin
case TRadioGroup(Sender).ItemIndex of
0: CoolBar1.BiDiMode:=bdLeftToRight;
1: CoolBar1.BiDiMode:=bdRightToLeft;
end;
end;
procedure TCoolBarDemo.SpinEdit1Change(Sender: TObject);
begin
CoolBar1.GrabWidth:=TSpinEdit(Sender).Value;
end;
procedure TCoolBarDemo.LoadFromIni;
var INI:TINIFile;
i, j, aPos: Integer;
begin
INI:=TIniFile.Create(IniFileName);
try
i:=INI.ReadInteger(cCoolBarSettings, cButtonSize, cTBSmall);
if i=cTBSmall
then AcToolBarSmall.Execute
else if i=cTBMedium
then AcToolBarMedium.Execute
else AcToolBarLarge.Execute;
i:=INI.ReadInteger(cCoolBarSettings, cCoolBarPos, cTBTop);
if i=cTBTop
then AcTBTop.Execute
else if i=cTBLeft
then AcTBLeft.Execute
else AcTBRight.Execute;
CoolBar1.DisableAutoSizing;
for i:=0 to CoolBar1.Bands.Count-1 do
begin
aPos:=INI.ReadInteger(cCoolBarSettings, cBandPos+inttostr(i), i);
if aPos<>CoolBar1.Bands[i].ID then
for j:=i+1 to CoolBar1.Bands.Count-1 do
if CoolBar1.Bands[j].ID=aPos then
begin
CoolBar1.Bands[j].Index:=i;
break;
end;
end;
for i:=0 to CoolBar1.Bands.Count-1 do
begin
CoolBar1.Bands[i].Break:=INI.ReadBool(cCoolBarSettings, cBandBreak+inttostr(i), True);
CoolBar1.Bands[i].Visible:=INI.ReadBool(cCoolBarSettings, cBandVisi+inttostr(i), True);
end;
CoolBar1.EnableAutoSizing;
AcTB1Visi.Checked:=TCoolBand(CoolBar1.Bands.FindItemID(0)).Visible;
AcTB2Visi.Checked:=TCoolBand(CoolBar1.Bands.FindItemID(1)).Visible;
AcTB3Visi.Checked:=TCoolBand(CoolBar1.Bands.FindItemID(2)).Visible;
AcTB4Visi.Checked:=TCoolBand(CoolBar1.Bands.FindItemID(3)).Visible;
AcTB5Visi.Checked:=TCoolBand(CoolBar1.Bands.FindItemID(4)).Visible;
finally
INI.Free;
end;
end;
procedure TCoolBarDemo.SaveToIni;
var INI:TINIFile;
i: Integer;
begin
INI:=TIniFile.Create(IniFileName);
try
if AcToolBarLarge.Checked
then i:=cTBLarge
else if AcToolBarMedium.Checked
then i:=cTBMedium
else i:=cTBSmall;
INI.WriteInteger(cCoolBarSettings, cButtonSize, i);
if AcTBLeft.Checked
then i:=cTBLeft
else if AcTBRight.Checked
then i:=cTBRight
else i:=cTBTop;
INI.WriteInteger(cCoolBarSettings, cCoolBarPos, i);
for i:=0 to CoolBar1.Bands.Count-1 do
begin
INI.WriteInteger(cCoolBarSettings, cBandPos+inttostr(i), CoolBar1.Bands[i].ID);
INI.WriteBool(cCoolBarSettings, cBandBreak+inttostr(i), CoolBar1.Bands[i].Break);
INI.WriteBool(cCoolBarSettings, cBandVisi+inttostr(i), CoolBar1.Bands[i].Visible);
end;
finally
INI.Free;
end;
end;
procedure TCoolBarDemo.SetButtonSize(ASize: Integer);
begin
ToolBar1.ButtonWidth:=ASize;
ToolBar1.ButtonHeight:=ASize;
ToolBar2.ButtonWidth:=ASize;
ToolBar2.ButtonHeight:=ASize;
ToolBar3.ButtonWidth:=ASize;
ToolBar3.ButtonHeight:=ASize;
ToolBar4.ButtonWidth:=ASize;
ToolBar4.ButtonHeight:=ASize;
ToolBar5.ButtonWidth:=ASize;
ToolBar5.ButtonHeight:=ASize;
CoolBar1.AutosizeBands;
end;
procedure TCoolBarDemo.SetCoolBarAlign(AAlign: TAlign; AVertical: Boolean);
var w, h: Integer;
bTurn: Boolean;
begin
BeginFormUpdate;
bTurn:= (AVertical<>CoolBar1.Vertical);
CoolBar1.Vertical:=AVertical;
case AAlign of
alLeft:
begin
CoolBar1.Anchors:=[akLeft, akTop, akBottom];
CoolBar1.AnchorParallel(akLeft, 0, self);
CoolBar1.AnchorParallel(akTop, 0, self);
CoolBar1.AnchorParallel(akBottom, 0, self);
CoolBar1.EdgeBorders:=[ebRight];
end;
alTop:
begin
CoolBar1.Anchors:=[akLeft, akTop, akRight];
CoolBar1.AnchorParallel(akLeft, 0, self);
CoolBar1.AnchorParallel(akTop, 0, self);
CoolBar1.AnchorParallel(akRight, 0, self);
CoolBar1.EdgeBorders:=[ebBottom];
end;
alRight:
begin
CoolBar1.Anchors:=[akRight, akTop, akBottom];
CoolBar1.AnchorParallel(akRight, 0, self);
CoolBar1.AnchorParallel(akTop, 0, self);
CoolBar1.AnchorParallel(akBottom, 0, self);
CoolBar1.EdgeBorders:=[ebLeft];
end;
end;
EndFormUpdate;
if bTurn then
begin
if not AVertical then
begin
w:=100;
h:=25;
end else
begin
w:=25;
h:=100;
end;
ToolBar1.AutoSize:=False;
ToolBar2.AutoSize:=False;
ToolBar3.AutoSize:=False;
ToolBar4.AutoSize:=False;
ToolBar5.AutoSize:=False;
ToolBar1.Width:=w;
ToolBar1.Height:=h;
ToolBar2.Width:=w;
ToolBar2.Height:=h;
ToolBar3.Width:=w;
ToolBar3.Height:=h;
ToolBar4.Width:=w;
ToolBar4.Height:=h;
ToolBar5.Width:=w;
ToolBar5.Height:=h;
ToolBar1.AutoSize:=True;
ToolBar2.AutoSize:=True;
ToolBar3.AutoSize:=True;
ToolBar4.AutoSize:=True;
ToolBar5.AutoSize:=True;
end;
CoolBar1.AutosizeBands;
end;
procedure TCoolBarDemo.ComboBox1Change(Sender: TObject);
begin
CoolBar1.GrabStyle:=TGrabStyle(TComboBox(Sender).ItemIndex);
end;
procedure TCoolBarDemo.FormActivate(Sender: TObject);
begin
LoadFromIni;
CoolBarDemo.OnActivate:=nil;
end;
procedure TCoolBarDemo.FormCreate(Sender: TObject);
var
ConfDir: String;
begin
ConfDir:=GetAppConfigDir(False);
ForceDirectories(ConfDir);
IniFileName:=ConfDir+'cooltoolbar.ini';
writeln(IniFileName);
end;
procedure TCoolBarDemo.FormDestroy(Sender: TObject);
begin
SaveToIni;
end;
procedure TCoolBarDemo.AcToolBarLargeExecute(Sender: TObject);
begin
SetButtonSize(38);
end;
procedure TCoolBarDemo.AcTBLeftExecute(Sender: TObject);
begin
SetCoolBarAlign(alLeft, True);
end;
procedure TCoolBarDemo.AcTB1VisiExecute(Sender: TObject);
begin
TCoolBand(CoolBar1.Bands.FindItemID(0)).Visible:=TAction(Sender).Checked;
end;
procedure TCoolBarDemo.AcTB2VisiExecute(Sender: TObject);
begin
TCoolBand(CoolBar1.Bands.FindItemID(1)).Visible:=TAction(Sender).Checked;
end;
procedure TCoolBarDemo.AcTB3VisiExecute(Sender: TObject);
begin
TCoolBand(CoolBar1.Bands.FindItemID(2)).Visible:=TAction(Sender).Checked;
end;
procedure TCoolBarDemo.AcTB4VisiExecute(Sender: TObject);
begin
TCoolBand(CoolBar1.Bands.FindItemID(3)).Visible:=TAction(Sender).Checked;
end;
procedure TCoolBarDemo.AcTB5VisiExecute(Sender: TObject);
begin
TCoolBand(CoolBar1.Bands.FindItemID(4)).Visible:=TAction(Sender).Checked;
end;
procedure TCoolBarDemo.AcTBRightExecute(Sender: TObject);
begin
SetCoolBarAlign(alRight, True);
end;
procedure TCoolBarDemo.AcTBTopExecute(Sender: TObject);
begin
SetCoolBarAlign(alTop, False);
end;
procedure TCoolBarDemo.AcToolBarMediumExecute(Sender: TObject);
begin
SetButtonSize(30);
end;
procedure TCoolBarDemo.AcToolBarSmallExecute(Sender: TObject);
begin
SetButtonSize(22);
end;
procedure TCoolBarDemo.Button1Click(Sender: TObject);
begin
CoolBar1.AutosizeBands;
end;
end.