mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 05:07:53 +02:00
385 lines
10 KiB
ObjectPascal
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.
|
|
|