Repository too old to merge - renaming branch to trunk
This commit is contained in:
commit
c4efc9ca49
@ -31,9 +31,9 @@
|
|||||||
-M
|
-M
|
||||||
-$M16384,1048576
|
-$M16384,1048576
|
||||||
-K$00400000
|
-K$00400000
|
||||||
-N"..\..\Lib\D7"
|
-N"P:\algemeen\lib"
|
||||||
-LE"..\..\Lib\D7"
|
-LE"P:\algemeen\bin"
|
||||||
-LN"..\..\Lib\D7"
|
-LN"P:\algemeen\lib"
|
||||||
-Z
|
-Z
|
||||||
-w-UNSAFE_TYPE
|
-w-UNSAFE_TYPE
|
||||||
-w-UNSAFE_CODE
|
-w-UNSAFE_CODE
|
||||||
|
@ -91,9 +91,9 @@ ImageBase=4194304
|
|||||||
ExeDescription=X²CL MenuBar
|
ExeDescription=X²CL MenuBar
|
||||||
[Directories]
|
[Directories]
|
||||||
OutputDir=
|
OutputDir=
|
||||||
UnitOutputDir=..\..\Lib\D7
|
UnitOutputDir=$(DELPHILIB)
|
||||||
PackageDLLOutputDir=..\..\Lib\D7
|
PackageDLLOutputDir=$(DELPHIBIN)
|
||||||
PackageDCPOutputDir=..\..\Lib\D7
|
PackageDCPOutputDir=$(DELPHILIB)
|
||||||
SearchPath=
|
SearchPath=
|
||||||
Packages=vcl;rtl;vclx;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;CLXIB;ibxpress;VCLIB;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;dclOfficeXP;Indy70;cxLibraryVCLD7;dxBarD7;dxComnD7;dxBarDBNavD7;dxBarExtDBItemsD7;dxBarExtItemsD7;dxDockingD7;dxsbD7;cxEditorsVCLD7;dxThemeD7;cxDataD7;cxExtEditorsVCLD7;cxPageControlVCLD7;cxGridVCLD7;cxSchedulerVCLD7;dxMasterViewD7;dxmdsD7;dxPSCoreD7;dxPSTeeChartD7;dxPsPrVwAdvD7;dxPSLnksD7;dxPSdxMVLnkD7;dxPSDBTeeChartD7;dxPScxCommonD7;dxPScxPCProdD7;dxPScxGridLnkD7;dxPScxExtCommonD7;dxPScxScheduler2LnkD7;wpViewPDF_D7;Rave50CLX;Rave50VCL;xtx_d7;IBSQLProperty;SamPackage;rbTCUI107;rbTC107;rbRCL107;rbIDE107;rbBDE107;rbUSERDesign107;rbUSER107;madBasic_;madDisAsm_;madExcept_;unageneral_d7
|
Packages=vcl;rtl;vclx;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;CLXIB;ibxpress;VCLIB;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;dclOfficeXP;Indy70;cxLibraryVCLD7;dxBarD7;dxComnD7;dxBarDBNavD7;dxBarExtDBItemsD7;dxBarExtItemsD7;dxDockingD7;dxsbD7;cxEditorsVCLD7;dxThemeD7;cxDataD7;cxExtEditorsVCLD7;cxPageControlVCLD7;cxGridVCLD7;cxSchedulerVCLD7;dxMasterViewD7;dxmdsD7;dxPSCoreD7;dxPSTeeChartD7;dxPsPrVwAdvD7;dxPSLnksD7;dxPSdxMVLnkD7;dxPSDBTeeChartD7;dxPScxCommonD7;dxPScxPCProdD7;dxPScxGridLnkD7;dxPScxExtCommonD7;dxPScxScheduler2LnkD7;wpViewPDF_D7;Rave50CLX;Rave50VCL;xtx_d7;IBSQLProperty;SamPackage;rbTCUI107;rbTC107;rbRCL107;rbIDE107;rbBDE107;rbUSERDesign107;rbUSER107;madBasic_;madDisAsm_;madExcept_;unageneral_d7
|
||||||
Conditionals=
|
Conditionals=
|
||||||
@ -143,14 +143,17 @@ Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
|||||||
Count=1
|
Count=1
|
||||||
Item0=P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System
|
Item0=P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System
|
||||||
[HistoryLists\hlUnitOutputDirectory]
|
[HistoryLists\hlUnitOutputDirectory]
|
||||||
Count=3
|
Count=4
|
||||||
Item0=..\..\Lib\D7
|
Item0=$(DELPHILIB)
|
||||||
Item1=..\Lib\D7
|
Item1=..\..\Lib\D7
|
||||||
Item2=Lib\D7
|
Item2=..\Lib\D7
|
||||||
|
Item3=Lib\D7
|
||||||
[HistoryLists\hlBPLOutput]
|
[HistoryLists\hlBPLOutput]
|
||||||
Count=2
|
Count=3
|
||||||
Item0=..\..\Lib\D7
|
Item0=$(DELPHIBIN)
|
||||||
Item1=Lib\D7
|
Item1=..\..\Lib\D7
|
||||||
|
Item2=Lib\D7
|
||||||
[HistoryLists\hlDCPOutput]
|
[HistoryLists\hlDCPOutput]
|
||||||
Count=1
|
Count=2
|
||||||
Item0=..\..\Lib\D7
|
Item0=$(DELPHILIB)
|
||||||
|
Item1=..\..\Lib\D7
|
||||||
|
@ -38,7 +38,8 @@ contains
|
|||||||
X2CLGraphics in '..\..\Source\X2CLGraphics.pas',
|
X2CLGraphics in '..\..\Source\X2CLGraphics.pas',
|
||||||
X2CLMenuBarAnimators in '..\..\Source\X2CLMenuBarAnimators.pas',
|
X2CLMenuBarAnimators in '..\..\Source\X2CLMenuBarAnimators.pas',
|
||||||
X2CLMenuBar in '..\..\Source\X2CLMenuBar.pas',
|
X2CLMenuBar in '..\..\Source\X2CLMenuBar.pas',
|
||||||
X2CLmusikCubeMenuBarPainter in '..\..\Source\X2CLmusikCubeMenuBarPainter.pas';
|
X2CLmusikCubeMenuBarPainter in '..\..\Source\X2CLmusikCubeMenuBarPainter.pas',
|
||||||
|
X2CLMenuBarActions in '..\..\Source\X2CLMenuBarActions.pas';
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -119,10 +119,14 @@ object GraphicsEditorForm: TGraphicsEditorForm
|
|||||||
Top = 26
|
Top = 26
|
||||||
Width = 189
|
Width = 189
|
||||||
Height = 398
|
Height = 398
|
||||||
|
Style = lbVirtual
|
||||||
Align = alClient
|
Align = alClient
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
OnClick = lstGraphicsClick
|
OnClick = lstGraphicsClick
|
||||||
|
OnData = lstGraphicsData
|
||||||
|
OnDataFind = lstGraphicsDataFind
|
||||||
|
OnKeyPress = lstGraphicsKeyPress
|
||||||
end
|
end
|
||||||
object tbGraphics: TToolBar
|
object tbGraphics: TToolBar
|
||||||
Left = 0
|
Left = 0
|
||||||
|
@ -67,6 +67,11 @@ type
|
|||||||
procedure actOpenExecute(Sender: TObject);
|
procedure actOpenExecute(Sender: TObject);
|
||||||
procedure actSaveExecute(Sender: TObject);
|
procedure actSaveExecute(Sender: TObject);
|
||||||
procedure actClearExecute(Sender: TObject);
|
procedure actClearExecute(Sender: TObject);
|
||||||
|
procedure lstGraphicsData(Control: TWinControl; Index: Integer;
|
||||||
|
var Data: String);
|
||||||
|
function lstGraphicsDataFind(Control: TWinControl;
|
||||||
|
FindString: String): Integer;
|
||||||
|
procedure lstGraphicsKeyPress(Sender: TObject; var Key: Char);
|
||||||
private
|
private
|
||||||
FComponent: TX2GraphicContainer;
|
FComponent: TX2GraphicContainer;
|
||||||
FComponentDesigner: IDesigner;
|
FComponentDesigner: IDesigner;
|
||||||
@ -74,7 +79,7 @@ type
|
|||||||
|
|
||||||
procedure InternalExecute(const AComponent: TComponent; const ADesigner: IDesigner);
|
procedure InternalExecute(const AComponent: TComponent; const ADesigner: IDesigner);
|
||||||
|
|
||||||
procedure LoadGraphic(AIndex: Integer; AGraphic: TX2GraphicContainerItem; const AFileName: string);
|
procedure LoadGraphic(AGraphic: TX2GraphicContainerItem; const AFileName: string);
|
||||||
|
|
||||||
procedure ItemChanged(AUpdatePreview: Boolean = True);
|
procedure ItemChanged(AUpdatePreview: Boolean = True);
|
||||||
procedure UpdateUI();
|
procedure UpdateUI();
|
||||||
@ -90,7 +95,8 @@ type
|
|||||||
implementation
|
implementation
|
||||||
uses
|
uses
|
||||||
Graphics,
|
Graphics,
|
||||||
SysUtils;
|
SysUtils,
|
||||||
|
Windows;
|
||||||
|
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -110,9 +116,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TGraphicsEditorForm.InternalExecute(const AComponent: TComponent; const ADesigner: IDesigner);
|
procedure TGraphicsEditorForm.InternalExecute(const AComponent: TComponent; const ADesigner: IDesigner);
|
||||||
var
|
|
||||||
graphicIndex: Integer;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
FComponent := TX2GraphicContainer(AComponent);
|
FComponent := TX2GraphicContainer(AComponent);
|
||||||
FComponent.FreeNotification(Self);
|
FComponent.FreeNotification(Self);
|
||||||
@ -120,22 +123,8 @@ begin
|
|||||||
FComponentDesigner := ADesigner;
|
FComponentDesigner := ADesigner;
|
||||||
Caption := Format('%s Graphics', [FComponent.Name]);
|
Caption := Format('%s Graphics', [FComponent.Name]);
|
||||||
|
|
||||||
// Fill graphics list
|
lstGraphics.Count := FComponent.GraphicCount;
|
||||||
with lstGraphics.Items do
|
lstGraphics.ItemIndex := 0;
|
||||||
begin
|
|
||||||
BeginUpdate();
|
|
||||||
try
|
|
||||||
Clear();
|
|
||||||
|
|
||||||
for graphicIndex := 0 to FComponent.GraphicCount - 1 do
|
|
||||||
AddObject(FComponent.Graphics[graphicIndex].PictureName,
|
|
||||||
FComponent.Graphics[graphicIndex]);
|
|
||||||
finally
|
|
||||||
EndUpdate();
|
|
||||||
end;
|
|
||||||
|
|
||||||
lstGraphics.ItemIndex := 0;
|
|
||||||
end;
|
|
||||||
|
|
||||||
UpdateUI();
|
UpdateUI();
|
||||||
UpdatePreview();
|
UpdatePreview();
|
||||||
@ -155,13 +144,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TGraphicsEditorForm.LoadGraphic(AIndex: Integer; AGraphic: TX2GraphicContainerItem; const AFileName: string);
|
procedure TGraphicsEditorForm.LoadGraphic(AGraphic: TX2GraphicContainerItem; const AFileName: string);
|
||||||
begin
|
begin
|
||||||
AGraphic.Picture.LoadFromFile(AFileName);
|
AGraphic.Picture.LoadFromFile(AFileName);
|
||||||
if Length(AGraphic.PictureName) = 0 then
|
if Length(AGraphic.PictureName) = 0 then
|
||||||
begin
|
begin
|
||||||
AGraphic.PictureName := ChangeFileExt(ExtractFileName(AFileName), '');
|
AGraphic.PictureName := ChangeFileExt(ExtractFileName(AFileName), '');
|
||||||
lstGraphics.Items[AIndex] := AGraphic.PictureName;
|
lstGraphics.Invalidate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -169,12 +158,12 @@ end;
|
|||||||
procedure TGraphicsEditorForm.ItemChanged(AUpdatePreview: Boolean);
|
procedure TGraphicsEditorForm.ItemChanged(AUpdatePreview: Boolean);
|
||||||
begin
|
begin
|
||||||
if Assigned(FComponentDesigner) then
|
if Assigned(FComponentDesigner) then
|
||||||
FComponentDesigner.Modified();
|
FComponentDesigner.Modified;
|
||||||
|
|
||||||
UpdateUI();
|
UpdateUI();
|
||||||
|
|
||||||
if AUpdatePreview then
|
if AUpdatePreview then
|
||||||
UpdatePreview();
|
UpdatePreview;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -198,7 +187,7 @@ begin
|
|||||||
actClear.Enabled := enabled;
|
actClear.Enabled := enabled;
|
||||||
|
|
||||||
actUp.Enabled := enabled and (index > 0);
|
actUp.Enabled := enabled and (index > 0);
|
||||||
actDown.Enabled := enabled and (index < Pred(lstGraphics.Items.Count));
|
actDown.Enabled := enabled and (index < Pred(FComponent.GraphicCount));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -213,8 +202,8 @@ begin
|
|||||||
if Active(index, graphic) then
|
if Active(index, graphic) then
|
||||||
begin
|
begin
|
||||||
imgPreview.Picture.Assign(graphic.Picture);
|
imgPreview.Picture.Assign(graphic.Picture);
|
||||||
txtName.Text := graphic.PictureName;
|
txtName.Text := graphic.PictureName;
|
||||||
lstGraphics.Items[index] := graphic.PictureName;
|
lstGraphics.Invalidate;
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
imgPreview.Picture.Assign(nil);
|
imgPreview.Picture.Assign(nil);
|
||||||
@ -234,7 +223,7 @@ begin
|
|||||||
if AIndex = -1 then
|
if AIndex = -1 then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
AGraphic := TX2GraphicContainerItem(lstGraphics.Items.Objects[AIndex]);
|
AGraphic := FComponent.Graphics[AIndex];
|
||||||
Result := Assigned(AGraphic);
|
Result := Assigned(AGraphic);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -257,8 +246,8 @@ begin
|
|||||||
|
|
||||||
if Active(index, graphic) then
|
if Active(index, graphic) then
|
||||||
begin
|
begin
|
||||||
graphic.PictureName := txtName.Text;
|
graphic.PictureName := txtName.Text;
|
||||||
lstGraphics.Items[index] := graphic.PictureName;
|
lstGraphics.Invalidate;
|
||||||
|
|
||||||
ItemChanged(False);
|
ItemChanged(False);
|
||||||
end;
|
end;
|
||||||
@ -267,7 +256,6 @@ end;
|
|||||||
|
|
||||||
procedure TGraphicsEditorForm.actAddExecute(Sender: TObject);
|
procedure TGraphicsEditorForm.actAddExecute(Sender: TObject);
|
||||||
var
|
var
|
||||||
index: Integer;
|
|
||||||
graphic: TX2GraphicContainerItem;
|
graphic: TX2GraphicContainerItem;
|
||||||
fileIndex: Integer;
|
fileIndex: Integer;
|
||||||
|
|
||||||
@ -285,11 +273,10 @@ begin
|
|||||||
|
|
||||||
if Assigned(graphic) then
|
if Assigned(graphic) then
|
||||||
begin
|
begin
|
||||||
graphic.Container := FComponent;
|
graphic.Container := FComponent;
|
||||||
index := lstGraphics.Items.AddObject('', graphic);
|
lstGraphics.Count := FComponent.GraphicCount;
|
||||||
lstGraphics.ItemIndex := index;
|
|
||||||
|
|
||||||
LoadGraphic(index, graphic, dlgOpen.Files[fileIndex]);
|
LoadGraphic(graphic, dlgOpen.Files[fileIndex]);
|
||||||
end else
|
end else
|
||||||
raise Exception.Create('Failed to create TX2GraphicContainerItem!');
|
raise Exception.Create('Failed to create TX2GraphicContainerItem!');
|
||||||
end;
|
end;
|
||||||
@ -313,10 +300,10 @@ begin
|
|||||||
if it's not allowed, for example due to it being introduced in
|
if it's not allowed, for example due to it being introduced in
|
||||||
an ancestor. }
|
an ancestor. }
|
||||||
graphic.Free();
|
graphic.Free();
|
||||||
lstGraphics.Items.Delete(index);
|
lstGraphics.Count := FComponent.GraphicCount;
|
||||||
|
|
||||||
if index > Pred(lstGraphics.Items.Count) then
|
if index > Pred(FComponent.GraphicCount) then
|
||||||
index := Pred(lstGraphics.Items.Count);
|
index := Pred(FComponent.GraphicCount);
|
||||||
|
|
||||||
lstGraphics.ItemIndex := index;
|
lstGraphics.ItemIndex := index;
|
||||||
|
|
||||||
@ -334,9 +321,9 @@ begin
|
|||||||
if Active(index, graphic) then
|
if Active(index, graphic) then
|
||||||
if index > 0 then
|
if index > 0 then
|
||||||
begin
|
begin
|
||||||
lstGraphics.Items.Move(index, Pred(index));
|
|
||||||
graphic.Index := Pred(index);
|
graphic.Index := Pred(index);
|
||||||
lstGraphics.ItemIndex := Pred(index);
|
lstGraphics.ItemIndex := Pred(index);
|
||||||
|
lstGraphics.Invalidate;
|
||||||
|
|
||||||
ItemChanged(False);
|
ItemChanged(False);
|
||||||
end;
|
end;
|
||||||
@ -350,11 +337,11 @@ var
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
if Active(index, graphic) then
|
if Active(index, graphic) then
|
||||||
if index < Pred(lstGraphics.Items.Count) then
|
if index < Pred(FComponent.GraphicCount) then
|
||||||
begin
|
begin
|
||||||
lstGraphics.Items.Move(index, index + 1);
|
|
||||||
graphic.Index := Succ(index);
|
graphic.Index := Succ(index);
|
||||||
lstGraphics.ItemIndex := Succ(index);
|
lstGraphics.ItemIndex := Succ(index);
|
||||||
|
lstGraphics.Invalidate;
|
||||||
|
|
||||||
ItemChanged(False);
|
ItemChanged(False);
|
||||||
end;
|
end;
|
||||||
@ -374,7 +361,7 @@ begin
|
|||||||
|
|
||||||
if dlgOpen.Execute() then
|
if dlgOpen.Execute() then
|
||||||
begin
|
begin
|
||||||
LoadGraphic(index, graphic, dlgOpen.FileName);
|
LoadGraphic(graphic, dlgOpen.FileName);
|
||||||
ItemChanged();
|
ItemChanged();
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -423,4 +410,34 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TGraphicsEditorForm.lstGraphicsData(Control: TWinControl; Index: Integer; var Data: String);
|
||||||
|
begin
|
||||||
|
Data := Format('%d - %s', [Index, FComponent.Graphics[Index].PictureName]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TGraphicsEditorForm.lstGraphicsDataFind(Control: TWinControl; FindString: String): Integer;
|
||||||
|
var
|
||||||
|
graphicIndex: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := -1;
|
||||||
|
|
||||||
|
for graphicIndex := 0 to Pred(FComponent.GraphicCount) do
|
||||||
|
if SameText(Copy(FComponent.Graphics[graphicIndex].PictureName, 1, Length(FindString)), FindString) then
|
||||||
|
begin
|
||||||
|
Result := graphicIndex;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TGraphicsEditorForm.lstGraphicsKeyPress(Sender: TObject; var Key: Char);
|
||||||
|
begin
|
||||||
|
{ Because the listbox is virtual, Return causes the ItemIndex to reset to 0 }
|
||||||
|
if Ord(Key) = VK_RETURN then
|
||||||
|
Key := #0;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -11,6 +11,7 @@ interface
|
|||||||
uses
|
uses
|
||||||
DesignEditors;
|
DesignEditors;
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TX2MenuBarComponentEditor = class(TComponentEditor)
|
TX2MenuBarComponentEditor = class(TComponentEditor)
|
||||||
public
|
public
|
||||||
@ -20,12 +21,14 @@ type
|
|||||||
function GetVerbCount(): Integer; override;
|
function GetVerbCount(): Integer; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses
|
uses
|
||||||
X2CLMenuBar,
|
X2CLMenuBar,
|
||||||
X2CLMenuBarEditor;
|
X2CLMenuBarEditor;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ TX2MenuBarComponentEditor }
|
{ TX2MenuBarComponentEditor }
|
||||||
procedure TX2MenuBarComponentEditor.Edit();
|
procedure TX2MenuBarComponentEditor.Edit();
|
||||||
begin
|
begin
|
||||||
@ -33,16 +36,19 @@ begin
|
|||||||
TfrmMenuBarEditor.Execute(TX2CustomMenuBar(Component), Designer);
|
TfrmMenuBarEditor.Execute(TX2CustomMenuBar(Component), Designer);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TX2MenuBarComponentEditor.ExecuteVerb(Index: Integer);
|
procedure TX2MenuBarComponentEditor.ExecuteVerb(Index: Integer);
|
||||||
begin
|
begin
|
||||||
Edit();
|
Edit();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TX2MenuBarComponentEditor.GetVerb(Index: Integer): string;
|
function TX2MenuBarComponentEditor.GetVerb(Index: Integer): string;
|
||||||
begin
|
begin
|
||||||
Result := 'Edit...';
|
Result := 'Edit...';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TX2MenuBarComponentEditor.GetVerbCount(): Integer;
|
function TX2MenuBarComponentEditor.GetVerbCount(): Integer;
|
||||||
begin
|
begin
|
||||||
Result := 1;
|
Result := 1;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
object frmMenuBarEditor: TfrmMenuBarEditor
|
object frmMenuBarEditor: TfrmMenuBarEditor
|
||||||
Left = 0
|
Left = 271
|
||||||
Top = 0
|
Top = 101
|
||||||
|
Width = 394
|
||||||
|
Height = 469
|
||||||
BorderIcons = [biSystemMenu]
|
BorderIcons = [biSystemMenu]
|
||||||
Caption = 'Editing'
|
Caption = 'Editing'
|
||||||
ClientHeight = 376
|
|
||||||
ClientWidth = 276
|
|
||||||
Color = clBtnFace
|
Color = clBtnFace
|
||||||
Font.Charset = DEFAULT_CHARSET
|
Font.Charset = DEFAULT_CHARSET
|
||||||
Font.Color = clWindowText
|
Font.Color = clWindowText
|
||||||
@ -22,20 +22,21 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
TextHeight = 13
|
TextHeight = 13
|
||||||
object tvMenu: TTreeView
|
object tvMenu: TTreeView
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 26
|
Top = 28
|
||||||
Width = 276
|
Width = 386
|
||||||
Height = 331
|
Height = 395
|
||||||
Align = alClient
|
Align = alClient
|
||||||
HideSelection = False
|
HideSelection = False
|
||||||
Indent = 19
|
Indent = 19
|
||||||
ReadOnly = True
|
ReadOnly = True
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
OnChange = tvMenuChange
|
OnChange = tvMenuChange
|
||||||
|
OnKeyPress = tvMenuKeyPress
|
||||||
end
|
end
|
||||||
object sbStatus: TStatusBar
|
object sbStatus: TStatusBar
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 357
|
Top = 423
|
||||||
Width = 276
|
Width = 386
|
||||||
Height = 19
|
Height = 19
|
||||||
Panels = <
|
Panels = <
|
||||||
item
|
item
|
||||||
@ -45,40 +46,307 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
object tbMenu: TToolBar
|
object tbMenu: TToolBar
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 276
|
Width = 386
|
||||||
Height = 26
|
Height = 28
|
||||||
AutoSize = True
|
AutoSize = True
|
||||||
ButtonWidth = 84
|
|
||||||
EdgeBorders = [ebTop, ebBottom]
|
EdgeBorders = [ebTop, ebBottom]
|
||||||
Images = ilsActions
|
Images = ilsActions
|
||||||
List = True
|
|
||||||
ShowCaptions = True
|
|
||||||
TabOrder = 2
|
TabOrder = 2
|
||||||
object tbAddGroup: TToolButton
|
object tbAddGroup: TToolButton
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 0
|
Top = 2
|
||||||
Action = actAddGroup
|
Action = actAddGroup
|
||||||
AutoSize = True
|
|
||||||
end
|
end
|
||||||
object tbAddItem: TToolButton
|
object tbAddItem: TToolButton
|
||||||
Left = 81
|
Left = 23
|
||||||
Top = 0
|
Top = 2
|
||||||
Action = actAddItem
|
Action = actAddItem
|
||||||
AutoSize = True
|
|
||||||
end
|
end
|
||||||
object tbDelete: TToolButton
|
object tbDelete: TToolButton
|
||||||
Left = 154
|
Left = 46
|
||||||
Top = 0
|
Top = 2
|
||||||
Action = actDelete
|
Action = actDelete
|
||||||
AutoSize = True
|
end
|
||||||
|
object tbSep1: TToolButton
|
||||||
|
Left = 69
|
||||||
|
Top = 2
|
||||||
|
Width = 8
|
||||||
|
ImageIndex = 3
|
||||||
|
Style = tbsSeparator
|
||||||
|
end
|
||||||
|
object tbMoveUp: TToolButton
|
||||||
|
Left = 77
|
||||||
|
Top = 2
|
||||||
|
Action = actMoveUp
|
||||||
|
end
|
||||||
|
object tbMoveDown: TToolButton
|
||||||
|
Left = 100
|
||||||
|
Top = 2
|
||||||
|
Action = actMoveDown
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
object ilsActions: TImageList
|
object ilsActions: TImageList
|
||||||
Left = 8
|
Left = 24
|
||||||
Top = 32
|
Top = 44
|
||||||
Bitmap = {
|
Bitmap = {
|
||||||
494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
|
494C010105000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
|
||||||
0000000000003600000028000000400000001000000001002000000000000010
|
0000000000003600000028000000400000003000000001002000000000000030
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000069AC69005EAB5E0000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000022AD350028B13E0071AF7100000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000020B7300069FFA30056D588001AA22700000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000001EAC240067FFA2005BF6900057F48D004CCB7E00169C1F000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00001DA1210063FF9C005AF5900055EF890052ED860051EC860045C576001795
|
||||||
|
1C00000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
00000000000000000000000000000000000000000000000000000000000028A0
|
||||||
|
2B0068FFA20079FFA9006AF39A0051EB850050EA83004CE781004EEA860043C4
|
||||||
|
7500219426000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000228D23001093
|
||||||
|
1A001C97260049CA63008BF8B1004BE87F004DE7800049DD7D0028A946000D87
|
||||||
|
18000B8714001C831D0000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000199B270086F8B00047E57C0049E47D004ADF7F00128A1F000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000001A9B290083F6AE0044E2790046E17A0047DE7C00138A21000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000001A9929007FF3A90041DF760043DD770044DC7B00138921000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000001996260076F0A3003CDC71003FDA730041D97600118720000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000001997280097FCC2006BEC9B005BE98F004BE28400128923000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000077B0B0010881D000D8318001081180014851F0009750D000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
@ -102,7 +370,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
770000750000BDA99D000000000000000000000000004E4EAB001844F600194D
|
770000750000BDA99D000000000000000000000000004E4EAB001844F600194D
|
||||||
F8001031D2002427AE000000000000000000000000004E4EAB000928D700092E
|
F8001031D2002427AE000000000000000000000000004E4EAB000928D700092E
|
||||||
D7000313B3004E4EAB0000000000000000000000000000000000000000000000
|
D7000313B3004E4EAB0000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000A7B0E00128A1E000F8018000E791600117919000E7510000000
|
||||||
0000000000000000000000000000000000000000000000000000689BAF001989
|
0000000000000000000000000000000000000000000000000000689BAF001989
|
||||||
B700007EB10090EFFF0030E0FF007AEEFF0000860000008600000086000048E1
|
B700007EB10090EFFF0030E0FF007AEEFF0000860000008600000086000048E1
|
||||||
7B00007500000075000000750000000000000000000000000000A27F6F00FFFF
|
7B00007500000075000000750000000000000000000000000000A27F6F00FFFF
|
||||||
@ -110,7 +378,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
7B0000750000007500000075000000000000000000002022B1002451F9001F51
|
7B0000750000007500000075000000000000000000002022B1002451F9001F51
|
||||||
FF00194DF8001744E8001017AF00000000004545AD00092ED7001142F9000D3D
|
FF00194DF8001744E8001017AF00000000004545AD00092ED7001142F9000D3D
|
||||||
F5000D3DF500041ABC006F6FAA00000000000000000000000000000000000000
|
F5000D3DF500041ABC006F6FAA00000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
00000000000025A93C0069F59E0044E47E0045E57F0045E17F00189230000000
|
||||||
00000000000000000000000000000000000000000000000000003B92B4003B9F
|
00000000000000000000000000000000000000000000000000003B92B4003B9F
|
||||||
C600007EB1009FF1FF0046E2FF0090EFFF00008D00005EF791005AF38D0053EC
|
C600007EB1009FF1FF0046E2FF0090EFFF00008D00005EF791005AF38D0053EC
|
||||||
860048E17B0045DE780000750000000000000000000000000000A3807000FFFF
|
860048E17B0045DE780000750000000000000000000000000000A3807000FFFF
|
||||||
@ -118,7 +386,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
860048E17B0045DE7800007500000000000000000000000000001832DB00285A
|
860048E17B0045DE7800007500000000000000000000000000001832DB00285A
|
||||||
FF002451F9002451F9001A4AF100060EAF000F30DD00164AFE001142F9001041
|
FF002451F9002451F9001A4AF100060EAF000F30DD00164AFE001142F9001041
|
||||||
F6000D3DF5000D3DF5002C2CA200000000000000000000000000000000000000
|
F6000D3DF5000D3DF5002C2CA200000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
00000000000022A7370077EFA40040DC750041DB740042DB7900188D2B000000
|
||||||
0000000000000000000000000000000000000000000074A0B1000E84B700B6F5
|
0000000000000000000000000000000000000000000074A0B1000E84B700B6F5
|
||||||
FB000081B400B6F5FB005EECFF00A3F3FF0000910000008D0000008D00005AF3
|
FB000081B400B6F5FB005EECFF00A3F3FF0000910000008D0000008D00005AF3
|
||||||
8D0000860000007D0000007D0000000000000000000000000000A9877800FFFF
|
8D0000860000007D0000007D0000000000000000000000000000A9877800FFFF
|
||||||
@ -126,7 +394,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
8D0000860000007D0000007D000000000000000000007777B3001832DB004170
|
8D0000860000007D0000007D000000000000000000007777B3001832DB004170
|
||||||
FF002D5DFF00285AFF00285AFF001F51FF00194DF800194DF8001142F9001142
|
FF002D5DFF00285AFF00285AFF001F51FF00194DF800194DF8001142F9001142
|
||||||
F9000F3DF200161CAC0000000000000000000000000000000000000000000000
|
F9000F3DF200161CAC0000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
00000000000025AC3A007DF3A90042DF770043DE770045DE7C0018902B000000
|
||||||
000000000000000000000000000000000000000000004596B40044A5C900DDFF
|
000000000000000000000000000000000000000000004596B40044A5C900DDFF
|
||||||
FF000084B700C0FBFF0077F4FF00B6F5FB00ADF6FF00ADF6FF00008D00005EF7
|
FF000084B700C0FBFF0077F4FF00B6F5FB00ADF6FF00ADF6FF00008D00005EF7
|
||||||
910000860000C3F1F80061A8C700000000000000000000000000AB897A00FFFF
|
910000860000C3F1F80061A8C700000000000000000000000000AB897A00FFFF
|
||||||
@ -134,7 +402,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
910000860000C8B7AE00000000000000000000000000000000006969B8001A25
|
910000860000C8B7AE00000000000000000000000000000000006969B8001A25
|
||||||
C5003A6DFF003668FF00285AFF00285AFF002451F900194DF8001F51FF00123D
|
C5003A6DFF003668FF00285AFF00285AFF002451F900194DF8001F51FF00123D
|
||||||
ED002427AE000000000000000000000000000000000000000000000000000000
|
ED002427AE000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
00000000000026AF3C0085F6AE0044E2790046E0790048E17E001B942E000000
|
||||||
000000000000000000000000000000000000000000002790B800ABDCEA00E6FE
|
000000000000000000000000000000000000000000002790B800ABDCEA00E6FE
|
||||||
FE000084B700D2FFFF008EFDFF0089FAFF0082F6FF00B0F7FF00009100000091
|
FE000084B700D2FFFF008EFDFF0089FAFF0082F6FF00B0F7FF00009100000091
|
||||||
0000008D0000C1FDFF000072A500000000000000000000000000AB897A00FFFF
|
0000008D0000C1FDFF000072A500000000000000000000000000AB897A00FFFF
|
||||||
@ -142,39 +410,39 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
0000008D0000BFABA10000000000000000000000000000000000000000000000
|
0000008D0000BFABA10000000000000000000000000000000000000000000000
|
||||||
00002F2FB3002E4EE7003668FF00285AFF00285AFF002451F900123DED002C2C
|
00002F2FB3002E4EE7003668FF00285AFF00285AFF002451F900123DED002C2C
|
||||||
A200000000000000000000000000000000000000000000000000000000000000
|
A200000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
00000000000028B03A008CF8B50048E57C0049E37D004AE2810019932B000000
|
||||||
000000000000000000000000000000000000000000000A8CBC00C9F6FA00F1FF
|
000000000000000000000000000000000000000000000A8CBC00C9F6FA00F1FF
|
||||||
FF000088BB00DDFFFF00A1FFFF00A1FFFF0094F8FF00C0FBFF00C0FBFF00B0F7
|
FF000088BB00DDFFFF00A1FFFF00A1FFFF0094F8FF00C0FBFF00C0FBFF00B0F7
|
||||||
FF00C3EDF500DDFFFF000072A500000000000000000000000000B1908000FFFF
|
FF00C3EDF500DDFFFF000072A500000000000000000000000000B1908000FFFF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FCF8F100FFFFFF00FCF8F100FFFFFF00FCF8
|
FF00FFFFFF00FFFFFF00FFFFFF00FCF8F100FFFFFF00FCF8F100FFFFFF00FCF8
|
||||||
F100FCF6ED009B7C6B0000000000000000000000000000000000000000000000
|
F100FCF6ED009B7C6B0000000000000000000000000000000000000000000000
|
||||||
000000000000253FDF003A6DFF003668FF002D5DFF00285AFF001B46EA002427
|
000000000000253FDF003A6DFF003668FF002D5DFF00285AFF001B46EA002427
|
||||||
AE00000000000000000000000000000000000000000000000000000000000000
|
AE000000000000000000000000000000000000000000000000003397330015A7
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
23001BB02E0035C9550063F3960050EA83004DE780004BE27F00249A3D001293
|
||||||
00000000000000000000000000000000000000000000018DC0000F92C1007EC4
|
210011981E002B8C2B00000000000000000000000000018DC0000F92C1007EC4
|
||||||
DD000088BB00C3EDF5007ADBEA0085E3EF0092F0F800A1FFFF0094F8FF0065D2
|
DD000088BB00C3EDF5007ADBEA0085E3EF0092F0F800A1FFFF0094F8FF0065D2
|
||||||
E700ADF6FF00DDFFFF000079AC00000000000000000000000000AF8F8000FFFF
|
E700ADF6FF00DDFFFF000079AC00000000000000000000000000AF8F8000FFFF
|
||||||
FF00DFCDCB00DFCDCB00DBC6C200DECAC600DDC1B400DDC1B400DEBEAD00DEBE
|
FF00DFCDCB00DFCDCB00DBC6C200DECAC600DDC1B400DDC1B400DEBEAD00DEBE
|
||||||
AD00FCF6ED009B7C6B0000000000000000000000000000000000000000000000
|
AD00FCF6ED009B7C6B0000000000000000000000000000000000000000000000
|
||||||
00002B2CC0004B7CFF004170FF003A6DFF003A6DFF00285AFF00285AFF001031
|
00002B2CC0004B7CFF004170FF003A6DFF003A6DFF00285AFF00285AFF001031
|
||||||
D2004A4AB2000000000000000000000000000000000000000000000000000000
|
D2004A4AB200000000000000000000000000000000000000000000000000279E
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
2A009EFFC7007DFFAD0053F1890052EB850050E983004CE580004DE583004FEC
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
8A00229628000000000000000000000000000000000000000000000000000000
|
||||||
0000018DC000F1FFFF00C3F1F800ABE7F10081D4E60065C6DF0065C6DF005FC2
|
0000018DC000F1FFFF00C3F1F800ABE7F10081D4E60065C6DF0065C6DF005FC2
|
||||||
DB00D2FFFF00E6FEFE000079AC00000000000000000000000000B1908000FFFF
|
DB00D2FFFF00E6FEFE000079AC00000000000000000000000000B1908000FFFF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCF8F100FCF8F100F9F4
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCF8F100FCF8F100F9F4
|
||||||
EE00F0E8E0009C7D6D0000000000000000000000000000000000000000000000
|
EE00F0E8E0009C7D6D0000000000000000000000000000000000000000000000
|
||||||
0000253FDF00527CFA004170FF003668FF000C13C1003A6DFF00285AFF002451
|
0000253FDF00527CFA004170FF003668FF000C13C1003A6DFF00285AFF002451
|
||||||
F9000B1DC2000000000000000000000000000000000000000000000000000000
|
F9000B1DC2000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
00001AA11F00A0FFC50062F7960053EF880051EB840050EA860051ED8A001A99
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
2000000000000000000000000000000000000000000000000000000000000000
|
||||||
00001A96C50031A5CD004AB0D30083CDE200D0EFF600E6FEFE00F1FFFF00E6FE
|
00001A96C50031A5CD004AB0D30083CDE200D0EFF600E6FEFE00F1FFFF00E6FE
|
||||||
FE00DDFFFF00F1FFFF000079AC00000000000000000000000000B1908000FFFF
|
FE00DDFFFF00F1FFFF000079AC00000000000000000000000000B1908000FFFF
|
||||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A3807000A782
|
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A3807000A782
|
||||||
7000A7827000A380700000000000000000000000000000000000000000004F4F
|
7000A7827000A380700000000000000000000000000000000000000000004F4F
|
||||||
BD00527CFA005080FF004B7CFF00181FC500000000001B22C4003A6DFF00285A
|
BD00527CFA005080FF004B7CFF00181FC500000000001B22C4003A6DFF00285A
|
||||||
FF001A4AF1001419B10000000000000000000000000000000000000000000000
|
FF001A4AF1001419B10000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000001AA82200A4FFC9005CF3900053EF890059F5930019A624000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000589FBA003298BE002390BC00158FBF00FFFF
|
0000000000000000000000000000589FBA003298BE002390BC00158FBF00FFFF
|
||||||
FF00FFFFFF00FFFFFF00007EB100000000000000000000000000B8988800FFFF
|
FF00FFFFFF00FFFFFF00007EB100000000000000000000000000B8988800FFFF
|
||||||
@ -182,7 +450,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
D900B1908000AB9E98000000000000000000000000000000000000000000252D
|
D900B1908000AB9E98000000000000000000000000000000000000000000252D
|
||||||
D6006A9CFF005788FF002E4EE7007070B90000000000000000001621C7002D5D
|
D6006A9CFF005788FF002E4EE7007070B90000000000000000001621C7002D5D
|
||||||
FF002451F9001439DD004545AD00000000000000000000000000000000000000
|
FF002451F9001439DD004545AD00000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000021B42D00A4FFCC0072FEA9001DB32C00000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000000000000000000000000088BB00EDF6
|
00000000000000000000000000000000000000000000000000000088BB00EDF6
|
||||||
FA00FFFFFF00FFFFFF00007EB100000000000000000000000000B8988800FFFF
|
FA00FFFFFF00FFFFFF00007EB100000000000000000000000000B8988800FFFF
|
||||||
@ -190,7 +458,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
7D00AB9E98000000000000000000000000000000000000000000000000004B4B
|
7D00AB9E98000000000000000000000000000000000000000000000000004B4B
|
||||||
C8003951E2005080FF002929C600000000000000000000000000000000001628
|
C8003951E2005080FF002929C600000000000000000000000000000000001628
|
||||||
D300285AFF000F2EE3002123B500000000000000000000000000000000000000
|
D300285AFF000F2EE3002123B500000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
000000000000000000000000000035C84A0037CD500074AC7400000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000000000000000000000002F99C3000084
|
00000000000000000000000000000000000000000000000000002F99C3000084
|
||||||
B7000084B7000081B4004388A900000000000000000000000000B8988800B898
|
B7000084B7000081B4004388A900000000000000000000000000B8988800B898
|
||||||
@ -198,7 +466,7 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
9800000000000000000000000000000000000000000000000000000000000000
|
9800000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000003E3EB90000000000000000000000000000000000000000006B6B
|
0000000000003E3EB90000000000000000000000000000000000000000006B6B
|
||||||
B6002E2EB5000000000000000000000000000000000000000000000000000000
|
B6002E2EB5000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000006EAC6E0063AB630000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
@ -208,18 +476,26 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
0000000000000000000000000000000000000000000000000000000000000000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
000000000000000000000000000000000000424D3E000000000000003E000000
|
000000000000000000000000000000000000424D3E000000000000003E000000
|
||||||
2800000040000000100000000100010000000000800000000000000000000000
|
2800000040000000300000000100010000000000800100000000000000000000
|
||||||
000000000000000000000000FFFFFF00FFFFFFFFFFFF0000E1C7C003C7CF0000
|
000000000000000000000000FFFFFF0000000000000000000000000000000000
|
||||||
E007C00383830000C001C00181010000C001C001C00100008001C00180030000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
8001C003C00700008001C003F00F00008001C003F80F00008001C003F0070000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
F001C003F0070000F001C003E0830000FE01C003E0C10000FFC1C007E1E10000
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
FFC1C00FFBE70000FFFFFFFFFFFF000000000000000000000000000000000000
|
00000000000000000000000000000000FFFF000000000000FE7F000000000000
|
||||||
|
FE3F000000000000FC3F000000000000F81F000000000000F00F000000000000
|
||||||
|
E007000000000000C003000000000000F81F000000000000F81F000000000000
|
||||||
|
F81F000000000000F81F000000000000F81F000000000000F81F000000000000
|
||||||
|
FFFF000000000000FFFF000000000000FFFFFFFFFFFFFFFFE1C7C003C7CFFFFF
|
||||||
|
E007C0038383F81FC001C0018101F81FC001C001C001F81F8001C0018003F81F
|
||||||
|
8001C003C007F81F8001C003F00FF81F8001C003F80FC0038001C003F007E007
|
||||||
|
F001C003F007F00FF001C003E083F81FFE01C003E0C1FC3FFFC1C007E1E1FE3F
|
||||||
|
FFC1C00FFBE7FE7FFFFFFFFFFFFFFFFF00000000000000000000000000000000
|
||||||
000000000000}
|
000000000000}
|
||||||
end
|
end
|
||||||
object alMenu: TActionList
|
object alMenu: TActionList
|
||||||
Images = ilsActions
|
Images = ilsActions
|
||||||
Left = 36
|
Left = 80
|
||||||
Top = 32
|
Top = 44
|
||||||
object actAddGroup: TAction
|
object actAddGroup: TAction
|
||||||
Caption = '&Add group'
|
Caption = '&Add group'
|
||||||
ImageIndex = 0
|
ImageIndex = 0
|
||||||
@ -244,5 +520,17 @@ object frmMenuBarEditor: TfrmMenuBarEditor
|
|||||||
'Ctrl+Del')
|
'Ctrl+Del')
|
||||||
OnExecute = actDeleteExecute
|
OnExecute = actDeleteExecute
|
||||||
end
|
end
|
||||||
|
object actMoveUp: TAction
|
||||||
|
Caption = 'Move &Up'
|
||||||
|
ImageIndex = 3
|
||||||
|
ShortCut = 16422
|
||||||
|
OnExecute = actMoveUpExecute
|
||||||
|
end
|
||||||
|
object actMoveDown: TAction
|
||||||
|
Caption = 'Move &Down'
|
||||||
|
ImageIndex = 4
|
||||||
|
ShortCut = 16424
|
||||||
|
OnExecute = actMoveDownExecute
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -7,17 +7,21 @@ uses
|
|||||||
ComCtrls,
|
ComCtrls,
|
||||||
Controls,
|
Controls,
|
||||||
DesignIntf,
|
DesignIntf,
|
||||||
|
DesignWindows,
|
||||||
Forms,
|
Forms,
|
||||||
ImgList,
|
ImgList,
|
||||||
ToolWin,
|
ToolWin,
|
||||||
|
|
||||||
X2CLMenuBar;
|
X2CLMenuBar;
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TfrmMenuBarEditor = class(TForm, IX2MenuBarDesigner)
|
TfrmMenuBarEditor = class(TDesignWindow, IX2MenuBarDesigner)
|
||||||
actAddGroup: TAction;
|
actAddGroup: TAction;
|
||||||
actAddItem: TAction;
|
actAddItem: TAction;
|
||||||
actDelete: TAction;
|
actDelete: TAction;
|
||||||
|
actMoveDown: TAction;
|
||||||
|
actMoveUp: TAction;
|
||||||
alMenu: TActionList;
|
alMenu: TActionList;
|
||||||
ilsActions: TImageList;
|
ilsActions: TImageList;
|
||||||
sbStatus: TStatusBar;
|
sbStatus: TStatusBar;
|
||||||
@ -25,6 +29,9 @@ type
|
|||||||
tbAddItem: TToolButton;
|
tbAddItem: TToolButton;
|
||||||
tbDelete: TToolButton;
|
tbDelete: TToolButton;
|
||||||
tbMenu: TToolBar;
|
tbMenu: TToolBar;
|
||||||
|
tbMoveDown: TToolButton;
|
||||||
|
tbMoveUp: TToolButton;
|
||||||
|
tbSep1: TToolButton;
|
||||||
tvMenu: TTreeView;
|
tvMenu: TTreeView;
|
||||||
|
|
||||||
procedure actDeleteExecute(Sender: TObject);
|
procedure actDeleteExecute(Sender: TObject);
|
||||||
@ -36,10 +43,13 @@ type
|
|||||||
procedure FormDestroy(Sender: TObject);
|
procedure FormDestroy(Sender: TObject);
|
||||||
procedure tvMenuChange(Sender: TObject; Node: TTreeNode);
|
procedure tvMenuChange(Sender: TObject; Node: TTreeNode);
|
||||||
procedure FormActivate(Sender: TObject);
|
procedure FormActivate(Sender: TObject);
|
||||||
|
procedure actMoveUpExecute(Sender: TObject);
|
||||||
|
procedure actMoveDownExecute(Sender: TObject);
|
||||||
|
procedure tvMenuKeyPress(Sender: TObject; var Key: Char);
|
||||||
private
|
private
|
||||||
FDesigner: IDesigner;
|
|
||||||
FMenuBar: TX2CustomMenuBar;
|
FMenuBar: TX2CustomMenuBar;
|
||||||
FDesignerAttached: Boolean;
|
FDesignerAttached: Boolean;
|
||||||
|
FMoving: Boolean;
|
||||||
|
|
||||||
procedure SetMenuBar(const Value: TX2CustomMenuBar);
|
procedure SetMenuBar(const Value: TX2CustomMenuBar);
|
||||||
|
|
||||||
@ -48,6 +58,7 @@ type
|
|||||||
|
|
||||||
function GetSelectedItem(): TX2CustomMenuBarItem;
|
function GetSelectedItem(): TX2CustomMenuBarItem;
|
||||||
function GetItemNode(AItem: TX2CustomMenuBarItem): TTreeNode;
|
function GetItemNode(AItem: TX2CustomMenuBarItem): TTreeNode;
|
||||||
|
procedure MoveSelectedItem(ADown: Boolean);
|
||||||
protected
|
protected
|
||||||
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||||
procedure ItemAdded(AItem: TX2CustomMenuBarItem);
|
procedure ItemAdded(AItem: TX2CustomMenuBarItem);
|
||||||
@ -62,26 +73,29 @@ type
|
|||||||
procedure UpdateUI();
|
procedure UpdateUI();
|
||||||
procedure Modified();
|
procedure Modified();
|
||||||
|
|
||||||
property Designer: IDesigner read FDesigner write FDesigner;
|
|
||||||
property MenuBar: TX2CustomMenuBar read FMenuBar write SetMenuBar;
|
property MenuBar: TX2CustomMenuBar read FMenuBar write SetMenuBar;
|
||||||
public
|
public
|
||||||
class procedure Execute(AMenuBar: TX2CustomMenuBar; ADesigner: IDesigner);
|
class procedure Execute(AMenuBar: TX2CustomMenuBar; ADesigner: IDesigner);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses
|
uses
|
||||||
Contnrs,
|
Contnrs,
|
||||||
SysUtils;
|
SysUtils, Dialogs;
|
||||||
|
|
||||||
|
|
||||||
var
|
var
|
||||||
GEditors: TObjectBucketList;
|
GEditors: TObjectBucketList;
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
TProtectedX2CustomMenuBar = class(TX2CustomMenuBar);
|
TProtectedX2CustomMenuBar = class(TX2CustomMenuBar);
|
||||||
|
|
||||||
|
|
||||||
{$R *.dfm}
|
{$R *.dfm}
|
||||||
|
|
||||||
|
|
||||||
{ TfrmMenuBarEditor }
|
{ TfrmMenuBarEditor }
|
||||||
class procedure TfrmMenuBarEditor.Execute(AMenuBar: TX2CustomMenuBar; ADesigner: IDesigner);
|
class procedure TfrmMenuBarEditor.Execute(AMenuBar: TX2CustomMenuBar; ADesigner: IDesigner);
|
||||||
var
|
var
|
||||||
@ -106,6 +120,7 @@ begin
|
|||||||
editorForm.Show();
|
editorForm.Show();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.FormCreate(Sender: TObject);
|
procedure TfrmMenuBarEditor.FormCreate(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
{$IFDEF VER180}
|
{$IFDEF VER180}
|
||||||
@ -117,6 +132,7 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.FormActivate(Sender: TObject);
|
procedure TfrmMenuBarEditor.FormActivate(Sender: TObject);
|
||||||
var
|
var
|
||||||
item: TX2CustomMenuBarItem;
|
item: TX2CustomMenuBarItem;
|
||||||
@ -133,6 +149,7 @@ begin
|
|||||||
UpdateUI();
|
UpdateUI();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.FormClose(Sender: TObject; var Action: TCloseAction);
|
procedure TfrmMenuBarEditor.FormClose(Sender: TObject; var Action: TCloseAction);
|
||||||
begin
|
begin
|
||||||
if Assigned(Designer) and Assigned(MenuBar) then
|
if Assigned(Designer) and Assigned(MenuBar) then
|
||||||
@ -141,6 +158,7 @@ begin
|
|||||||
Action := caFree;
|
Action := caFree;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.FormDestroy(Sender: TObject);
|
procedure TfrmMenuBarEditor.FormDestroy(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if Assigned(MenuBar) then
|
if Assigned(MenuBar) then
|
||||||
@ -170,6 +188,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TfrmMenuBarEditor.tvMenuKeyPress(Sender: TObject; var Key: Char);
|
||||||
|
begin
|
||||||
|
ActivateInspector(Key);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.RefreshMenu();
|
procedure TfrmMenuBarEditor.RefreshMenu();
|
||||||
var
|
var
|
||||||
groupIndex: Integer;
|
groupIndex: Integer;
|
||||||
@ -195,6 +219,7 @@ begin
|
|||||||
Modified();
|
Modified();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.actAddItemExecute(Sender: TObject);
|
procedure TfrmMenuBarEditor.actAddItemExecute(Sender: TObject);
|
||||||
var
|
var
|
||||||
menuItem: TX2CustomMenuBarItem;
|
menuItem: TX2CustomMenuBarItem;
|
||||||
@ -222,6 +247,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.actDeleteExecute(Sender: TObject);
|
procedure TfrmMenuBarEditor.actDeleteExecute(Sender: TObject);
|
||||||
var
|
var
|
||||||
menuItem: TX2CustomMenuBarItem;
|
menuItem: TX2CustomMenuBarItem;
|
||||||
@ -236,6 +262,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TfrmMenuBarEditor.actMoveUpExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
MoveSelectedItem(False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TfrmMenuBarEditor.actMoveDownExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
MoveSelectedItem(True);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TfrmMenuBarEditor.AddGroup(AGroup: TX2MenuBarGroup): TTreeNode;
|
function TfrmMenuBarEditor.AddGroup(AGroup: TX2MenuBarGroup): TTreeNode;
|
||||||
var
|
var
|
||||||
itemIndex: Integer;
|
itemIndex: Integer;
|
||||||
@ -252,8 +290,8 @@ begin
|
|||||||
{ Make sure the group is inserted in the correct position by searching
|
{ Make sure the group is inserted in the correct position by searching
|
||||||
for it's sibling group. Note: do NOT use Items[x] in a loop; TTreeView
|
for it's sibling group. Note: do NOT use Items[x] in a loop; TTreeView
|
||||||
emulates this by using GetFirst/GetNext. }
|
emulates this by using GetFirst/GetNext. }
|
||||||
if AGroup.Index > 0 then
|
if AGroup.Index < Pred(AGroup.Collection.Count) then
|
||||||
siblingGroup := TX2MenuBarGroup(AGroup.Collection.Items[Pred(AGroup.Index)]);
|
siblingGroup := TX2MenuBarGroup(AGroup.Collection.Items[Succ(AGroup.Index)]);
|
||||||
|
|
||||||
if Assigned(siblingGroup) then
|
if Assigned(siblingGroup) then
|
||||||
begin
|
begin
|
||||||
@ -268,9 +306,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
if Assigned(siblingNode) then
|
if Assigned(siblingNode) then
|
||||||
groupNode := tvMenu.Items.Add(siblingNode, '')
|
groupNode := tvMenu.Items.AddNode(nil, siblingNode, '', nil, naInsert)
|
||||||
else
|
else
|
||||||
groupNode := tvMenu.Items.AddFirst(nil, '');
|
groupNode := tvMenu.Items.Add(nil, '');
|
||||||
|
|
||||||
groupNode.Data := AGroup;
|
groupNode.Data := AGroup;
|
||||||
UpdateNode(groupNode);
|
UpdateNode(groupNode);
|
||||||
@ -286,6 +324,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TfrmMenuBarEditor.AddItem(ANode: TTreeNode; AItem: TX2MenuBarItem): TTreeNode;
|
function TfrmMenuBarEditor.AddItem(ANode: TTreeNode; AItem: TX2MenuBarItem): TTreeNode;
|
||||||
var
|
var
|
||||||
siblingItem: TX2MenuBarItem;
|
siblingItem: TX2MenuBarItem;
|
||||||
@ -299,8 +338,8 @@ begin
|
|||||||
siblingNode := nil;
|
siblingNode := nil;
|
||||||
|
|
||||||
{ See AddGroup }
|
{ See AddGroup }
|
||||||
if AItem.Index > 0 then
|
if AItem.Index < Pred(AItem.Collection.Count) then
|
||||||
siblingItem := TX2MenuBarItem(AItem.Collection.Items[Pred(AItem.Index)]);
|
siblingItem := TX2MenuBarItem(AItem.Collection.Items[Succ(AItem.Index)]);
|
||||||
|
|
||||||
if Assigned(siblingItem) then
|
if Assigned(siblingItem) then
|
||||||
begin
|
begin
|
||||||
@ -315,9 +354,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
if Assigned(siblingNode) then
|
if Assigned(siblingNode) then
|
||||||
itemNode := tvMenu.Items.Add(siblingNode, '')
|
itemNode := tvMenu.Items.AddNode(nil, siblingNode, '', nil, naInsert)
|
||||||
else
|
else
|
||||||
itemNode := tvMenu.Items.AddChildFirst(ANode, '');
|
itemNode := tvMenu.Items.AddChild(ANode, '');
|
||||||
|
|
||||||
itemNode.Data := AItem;
|
itemNode.Data := AItem;
|
||||||
UpdateNode(itemNode);
|
UpdateNode(itemNode);
|
||||||
@ -328,6 +367,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.UpdateNode(ANode: TTreeNode);
|
procedure TfrmMenuBarEditor.UpdateNode(ANode: TTreeNode);
|
||||||
var
|
var
|
||||||
menuItem: TX2CustomMenuBarItem;
|
menuItem: TX2CustomMenuBarItem;
|
||||||
@ -339,17 +379,51 @@ begin
|
|||||||
ANode.SelectedIndex := ANode.ImageIndex;
|
ANode.SelectedIndex := ANode.ImageIndex;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.UpdateUI();
|
procedure TfrmMenuBarEditor.UpdateUI();
|
||||||
var
|
var
|
||||||
|
canMoveDown: Boolean;
|
||||||
|
canMoveUp: Boolean;
|
||||||
itemSelected: Boolean;
|
itemSelected: Boolean;
|
||||||
|
menuItem: TX2CustomMenuBarItem;
|
||||||
|
group: TX2MenuBarGroup;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
itemSelected := Assigned(tvMenu.Selected);
|
itemSelected := Assigned(tvMenu.Selected);
|
||||||
actAddGroup.Enabled := Assigned(MenuBar);
|
actAddGroup.Enabled := Assigned(MenuBar);
|
||||||
actAddItem.Enabled := itemSelected;
|
actAddItem.Enabled := itemSelected;
|
||||||
actDelete.Enabled := itemSelected;
|
actDelete.Enabled := itemSelected;
|
||||||
|
|
||||||
|
canMoveUp := False;
|
||||||
|
canMoveDown := False;
|
||||||
|
|
||||||
|
if itemSelected then
|
||||||
|
begin
|
||||||
|
menuItem := GetSelectedItem();
|
||||||
|
|
||||||
|
if Assigned(menuItem.Collection) then
|
||||||
|
begin
|
||||||
|
canMoveUp := (menuItem.Index > 0);
|
||||||
|
canMoveDown := (menuItem.Index < Pred(menuItem.Collection.Count));
|
||||||
|
|
||||||
|
if menuItem is TX2MenuBarItem then
|
||||||
|
begin
|
||||||
|
group := TX2MenuBarItem(menuItem).Group;
|
||||||
|
|
||||||
|
if Assigned(group) then
|
||||||
|
begin
|
||||||
|
canMoveUp := canMoveUp or (group.Index > 0);
|
||||||
|
canMoveDown := canMoveDown or (group.Index < Pred(MenuBar.Groups.Count));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
actMoveUp.Enabled := canMoveUp;
|
||||||
|
actMoveDown.Enabled := canMoveDown;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.Modified();
|
procedure TfrmMenuBarEditor.Modified();
|
||||||
begin
|
begin
|
||||||
if Assigned(Designer) then
|
if Assigned(Designer) then
|
||||||
@ -370,6 +444,7 @@ begin
|
|||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.ItemAdded(AItem: TX2CustomMenuBarItem);
|
procedure TfrmMenuBarEditor.ItemAdded(AItem: TX2CustomMenuBarItem);
|
||||||
var
|
var
|
||||||
group: TX2MenuBarGroup;
|
group: TX2MenuBarGroup;
|
||||||
@ -377,6 +452,9 @@ var
|
|||||||
treeNode: TTreeNode;
|
treeNode: TTreeNode;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
if FMoving then
|
||||||
|
Exit;
|
||||||
|
|
||||||
treeNode := nil;
|
treeNode := nil;
|
||||||
|
|
||||||
if AItem is TX2MenuBarGroup then
|
if AItem is TX2MenuBarGroup then
|
||||||
@ -397,11 +475,15 @@ begin
|
|||||||
tvMenu.Selected := treeNode;
|
tvMenu.Selected := treeNode;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.ItemModified(AItem: TX2CustomMenuBarItem);
|
procedure TfrmMenuBarEditor.ItemModified(AItem: TX2CustomMenuBarItem);
|
||||||
var
|
var
|
||||||
treeNode: TTreeNode;
|
treeNode: TTreeNode;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
if FMoving then
|
||||||
|
Exit;
|
||||||
|
|
||||||
tvMenu.Items.BeginUpdate();
|
tvMenu.Items.BeginUpdate();
|
||||||
try
|
try
|
||||||
treeNode := tvMenu.Items.GetFirstNode();
|
treeNode := tvMenu.Items.GetFirstNode();
|
||||||
@ -415,11 +497,15 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.ItemDeleting(AItem: TX2CustomMenuBarItem);
|
procedure TfrmMenuBarEditor.ItemDeleting(AItem: TX2CustomMenuBarItem);
|
||||||
var
|
var
|
||||||
treeNode: TTreeNode;
|
treeNode: TTreeNode;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
if FMoving then
|
||||||
|
Exit;
|
||||||
|
|
||||||
treeNode := GetItemNode(AItem);
|
treeNode := GetItemNode(AItem);
|
||||||
if Assigned(treeNode) then
|
if Assigned(treeNode) then
|
||||||
tvMenu.Items.Delete(treeNode);
|
tvMenu.Items.Delete(treeNode);
|
||||||
@ -435,6 +521,7 @@ begin
|
|||||||
FDesignerAttached := True;
|
FDesignerAttached := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TfrmMenuBarEditor.DetachDesigner();
|
procedure TfrmMenuBarEditor.DetachDesigner();
|
||||||
begin
|
begin
|
||||||
if not FDesignerAttached then
|
if not FDesignerAttached then
|
||||||
@ -446,6 +533,75 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
procedure TfrmMenuBarEditor.MoveSelectedItem(ADown: Boolean);
|
||||||
|
var
|
||||||
|
selectedItem: TX2CustomMenuBarItem;
|
||||||
|
group: TX2MenuBarGroup;
|
||||||
|
refresh: Boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if not Assigned(MenuBar) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
selectedItem := GetSelectedItem();
|
||||||
|
if not Assigned(selectedItem) then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
refresh := False;
|
||||||
|
group := nil;
|
||||||
|
|
||||||
|
if selectedItem is TX2MenuBarItem then
|
||||||
|
group := TX2MenuBarItem(selectedItem).Group;
|
||||||
|
|
||||||
|
FMoving := True;
|
||||||
|
try
|
||||||
|
if ADown then
|
||||||
|
begin
|
||||||
|
if selectedItem.Index < Pred(selectedItem.Collection.Count) then
|
||||||
|
begin
|
||||||
|
selectedItem.Index := Succ(selectedItem.Index);
|
||||||
|
refresh := True;
|
||||||
|
end else if Assigned(group) then
|
||||||
|
begin
|
||||||
|
{ Move down to another group
|
||||||
|
The AddItem is triggered by moving between groups, no need
|
||||||
|
to add here. }
|
||||||
|
if group.Index < Pred(MenuBar.Groups.Count) then
|
||||||
|
begin
|
||||||
|
selectedItem.Collection := MenuBar.Groups[Succ(group.Index)].Items;
|
||||||
|
selectedItem.Index := 0;
|
||||||
|
refresh := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
if selectedItem.Index > 0 then
|
||||||
|
begin
|
||||||
|
selectedItem.Index := Pred(selectedItem.Index);
|
||||||
|
refresh := True;
|
||||||
|
end else if Assigned(group) then
|
||||||
|
begin
|
||||||
|
{ Move up to another group }
|
||||||
|
if group.Index > 0 then
|
||||||
|
begin
|
||||||
|
selectedItem.Collection := MenuBar.Groups[Pred(group.Index)].Items;
|
||||||
|
refresh := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FMoving := False;
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
begin
|
||||||
|
ItemDeleting(selectedItem);
|
||||||
|
ItemAdded(selectedItem);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TfrmMenuBarEditor.GetSelectedItem(): TX2CustomMenuBarItem;
|
function TfrmMenuBarEditor.GetSelectedItem(): TX2CustomMenuBarItem;
|
||||||
begin
|
begin
|
||||||
Result := nil;
|
Result := nil;
|
||||||
@ -453,6 +609,7 @@ begin
|
|||||||
Result := TX2CustomMenuBarItem(tvMenu.Selected.Data);
|
Result := TX2CustomMenuBarItem(tvMenu.Selected.Data);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TfrmMenuBarEditor.GetItemNode(AItem: TX2CustomMenuBarItem): TTreeNode;
|
function TfrmMenuBarEditor.GetItemNode(AItem: TX2CustomMenuBarItem): TTreeNode;
|
||||||
var
|
var
|
||||||
treeNode: TTreeNode;
|
treeNode: TTreeNode;
|
||||||
@ -512,6 +669,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
finalization
|
finalization
|
||||||
if Assigned(GEditors) then
|
if Assigned(GEditors) then
|
||||||
|
BIN
Resources/Icons/MenuBar/Down.ico
Normal file
BIN
Resources/Icons/MenuBar/Down.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
BIN
Resources/Icons/MenuBar/Up.ico
Normal file
BIN
Resources/Icons/MenuBar/Up.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
@ -12,10 +12,21 @@ unit X2CLGraphics;
|
|||||||
|
|
||||||
interface
|
interface
|
||||||
uses
|
uses
|
||||||
Graphics;
|
Classes,
|
||||||
|
Graphics,
|
||||||
|
Windows;
|
||||||
|
|
||||||
type
|
type
|
||||||
TX2Color32 = type TColor;
|
TX2Color32 = type TColor;
|
||||||
|
TDrawTextClipStyle = (csNone, csEllipsis, csPathEllipsis);
|
||||||
|
|
||||||
|
{$IFNDEF VER180}
|
||||||
|
TVerticalAlignment = (taTop, taBottom, taVerticalCenter);
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
PRGBAArray = ^TRGBAArray;
|
||||||
|
TRGBAArray = array[Word] of TRGBQuad;
|
||||||
|
|
||||||
|
|
||||||
function Color32(AColor: TColor; AAlpha: Byte = 255): TX2Color32;
|
function Color32(AColor: TColor; AAlpha: Byte = 255): TX2Color32;
|
||||||
function DelphiColor(AColor: TX2Color32): TColor;
|
function DelphiColor(AColor: TX2Color32): TColor;
|
||||||
@ -27,9 +38,71 @@ type
|
|||||||
|
|
||||||
function Blend(ABackground: TColor; AForeground: TX2Color32): TColor;
|
function Blend(ABackground: TColor; AForeground: TX2Color32): TColor;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Provides a wrapper for the DrawText API.
|
||||||
|
}
|
||||||
|
procedure DrawText(ACanvas: TCanvas; const AText: String;
|
||||||
|
const ABounds: TRect;
|
||||||
|
AHorzAlignment: TAlignment = taLeftJustify;
|
||||||
|
AVertAlignment: TVerticalAlignment = taVerticalCenter;
|
||||||
|
AMultiLine: Boolean = False;
|
||||||
|
AClipStyle: TDrawTextClipStyle = csNone);
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Returns a pointer to the first physical scanline.
|
||||||
|
|
||||||
|
:: In bottom-up bitmaps, the most common kind, the Scanline property
|
||||||
|
:: compensates for this by returning the last physical row for Scanline[0];
|
||||||
|
:: the first visual row. For most effects, the order in which the rows are
|
||||||
|
:: processed is not important; speed is. This function returns the first
|
||||||
|
:: physical scanline, which can be used as a single big array for the whole
|
||||||
|
:: bitmap.
|
||||||
|
|
||||||
|
:! Note that every scanline is padded until it is a multiple of 4 bytes
|
||||||
|
:! (32 bits). For true lineair access, ensure the bitmap has a PixelFormat
|
||||||
|
:! of pf32bit.
|
||||||
|
}
|
||||||
|
function GetScanlinePointer(ABitmap: Graphics.TBitmap): Pointer;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Wrapper for DrawFocusRect.
|
||||||
|
|
||||||
|
:: Ensures the canvas is set up correctly for a standard focus rectangle.
|
||||||
|
}
|
||||||
|
procedure DrawFocusRect(ACanvas: TCanvas; const ABounds: TRect);
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Draws one bitmap over another with the specified Alpha transparency.
|
||||||
|
|
||||||
|
:: Both bitmaps must be the same size.
|
||||||
|
}
|
||||||
|
procedure DrawBlended(ABackground, AForeground: Graphics.TBitmap; AAlpha: Byte);
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Draws a rectangle with a vertical gradient.
|
||||||
|
}
|
||||||
|
procedure GradientFillRect(ACanvas: TCanvas; ARect: TRect; AStartColor, AEndColor: TColor);
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Darkens a color with the specified value
|
||||||
|
}
|
||||||
|
function DarkenColor(const AColor: TColor; const AValue: Byte): TColor;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Lightens a color with the specified value
|
||||||
|
}
|
||||||
|
function LightenColor(const AColor: TColor; const AValue: Byte): TColor;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses
|
|
||||||
Windows;
|
|
||||||
|
|
||||||
function Color32(AColor: TColor; AAlpha: Byte): TX2Color32;
|
function Color32(AColor: TColor; AAlpha: Byte): TX2Color32;
|
||||||
begin
|
begin
|
||||||
@ -90,4 +163,204 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure DrawText(ACanvas: TCanvas; const AText: String;
|
||||||
|
const ABounds: TRect; AHorzAlignment: TAlignment;
|
||||||
|
AVertAlignment: TVerticalAlignment;
|
||||||
|
AMultiLine: Boolean; AClipStyle: TDrawTextClipStyle);
|
||||||
|
const
|
||||||
|
HorzAlignmentFlags: array[TAlignment] of Cardinal =
|
||||||
|
(DT_LEFT, DT_RIGHT, DT_CENTER);
|
||||||
|
VertAlignmentFlags: array[TVerticalAlignment] of Cardinal =
|
||||||
|
(DT_TOP, DT_BOTTOM, DT_VCENTER);
|
||||||
|
MultiLineFlags: array[Boolean] of Cardinal =
|
||||||
|
(DT_SINGLELINE, 0);
|
||||||
|
ClipStyleFlags: array[TDrawTextClipStyle] of Cardinal =
|
||||||
|
(0, DT_END_ELLIPSIS, DT_PATH_ELLIPSIS);
|
||||||
|
|
||||||
|
var
|
||||||
|
flags: Cardinal;
|
||||||
|
bounds: TRect;
|
||||||
|
|
||||||
|
begin
|
||||||
|
flags := HorzAlignmentFlags[AHorzAlignment] or
|
||||||
|
VertAlignmentFlags[AVertAlignment] or
|
||||||
|
MultiLineFlags[AMultiLine] or
|
||||||
|
ClipStyleFlags[AClipStyle];
|
||||||
|
|
||||||
|
if AMultiLine and (AClipStyle <> csNone) then
|
||||||
|
flags := flags or DT_EDITCONTROL;
|
||||||
|
|
||||||
|
bounds := ABounds;
|
||||||
|
Windows.DrawText(ACanvas.Handle, PChar(AText), Length(AText), bounds, flags);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GetScanlinePointer(ABitmap: Graphics.TBitmap): Pointer;
|
||||||
|
var
|
||||||
|
firstScanline: Pointer;
|
||||||
|
lastScanline: Pointer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
firstScanline := ABitmap.ScanLine[0];
|
||||||
|
lastScanline := ABitmap.ScanLine[Pred(ABitmap.Height)];
|
||||||
|
|
||||||
|
if Cardinal(firstScanline) > Cardinal(lastScanline) then
|
||||||
|
Result := lastScanline
|
||||||
|
else
|
||||||
|
Result := firstScanline;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure DrawFocusRect(ACanvas: TCanvas; const ABounds: TRect);
|
||||||
|
begin
|
||||||
|
SetTextColor(ACanvas.Handle, ColorToRGB(clBlack));
|
||||||
|
Windows.DrawFocusRect(ACanvas.Handle, ABounds);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure DrawBlended(ABackground, AForeground: Graphics.TBitmap; AAlpha: Byte);
|
||||||
|
var
|
||||||
|
sourcePixels: PRGBAArray;
|
||||||
|
destPixels: PRGBAArray;
|
||||||
|
sourcePixel: PRGBQuad;
|
||||||
|
pixelCount: Integer;
|
||||||
|
pixelIndex: Integer;
|
||||||
|
backAlpha: Integer;
|
||||||
|
foreAlpha: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
backAlpha := AAlpha;
|
||||||
|
foreAlpha := 256 - AAlpha;
|
||||||
|
pixelCount := AForeground.Width * AForeground.Height;
|
||||||
|
sourcePixels := GetScanlinePointer(AForeground);
|
||||||
|
destPixels := GetScanlinePointer(ABackground);
|
||||||
|
|
||||||
|
for pixelIndex := Pred(pixelCount) downto 0 do
|
||||||
|
with destPixels^[pixelIndex] do
|
||||||
|
begin
|
||||||
|
sourcePixel := @sourcePixels^[pixelIndex];
|
||||||
|
rgbRed := ((rgbRed * backAlpha) +
|
||||||
|
(sourcePixel^.rgbRed * foreAlpha)) shr 8;
|
||||||
|
rgbGreen := ((rgbGreen * backAlpha) +
|
||||||
|
(sourcePixel^.rgbGreen * foreAlpha)) shr 8;
|
||||||
|
rgbBlue := ((rgbBlue * backAlpha) +
|
||||||
|
(sourcePixel^.rgbBlue * foreAlpha)) shr 8;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure GradientFillRect(ACanvas: TCanvas; ARect: TRect; AStartColor, AEndColor: TColor);
|
||||||
|
|
||||||
|
function FixValue(AValue: Single): Single;
|
||||||
|
begin
|
||||||
|
Result := AValue;
|
||||||
|
|
||||||
|
if Result < 0 then
|
||||||
|
Result := 0;
|
||||||
|
|
||||||
|
if Result > 255 then
|
||||||
|
Result := 255;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
startColor: Cardinal;
|
||||||
|
endColor: Cardinal;
|
||||||
|
stepCount: Integer;
|
||||||
|
redValue: Single;
|
||||||
|
greenValue: Single;
|
||||||
|
blueValue: Single;
|
||||||
|
redStep: Single;
|
||||||
|
greenStep: Single;
|
||||||
|
blueStep: Single;
|
||||||
|
line: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
startColor := ColorToRGB(AStartColor);
|
||||||
|
endColor := ColorToRGB(AEndColor);
|
||||||
|
|
||||||
|
if startColor = endColor then
|
||||||
|
begin
|
||||||
|
ACanvas.Brush.Style := bsSolid;
|
||||||
|
ACanvas.Brush.Color := startColor;
|
||||||
|
ACanvas.FillRect(ARect);
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
redValue := GetRValue(startColor);
|
||||||
|
greenValue := GetGValue(startColor);
|
||||||
|
blueValue := GetBValue(startColor);
|
||||||
|
|
||||||
|
stepCount := ARect.Bottom - ARect.Top;
|
||||||
|
redStep := (GetRValue(endColor) - redValue) / stepCount;
|
||||||
|
greenStep := (GetGValue(endColor) - greenValue) / stepCount;
|
||||||
|
blueStep := (GetBValue(endColor) - blueValue) / stepCount;
|
||||||
|
|
||||||
|
ACanvas.Pen.Style := psSolid;
|
||||||
|
|
||||||
|
for line := ARect.Top to ARect.Bottom do
|
||||||
|
begin
|
||||||
|
ACanvas.Pen.Color := RGB(Trunc(redValue), Trunc(greenValue), Trunc(blueValue));
|
||||||
|
ACanvas.MoveTo(ARect.Left, line);
|
||||||
|
ACanvas.LineTo(ARect.Right, line);
|
||||||
|
|
||||||
|
redValue := FixValue(redValue + redStep);
|
||||||
|
greenValue := FixValue(greenValue + greenStep);
|
||||||
|
blueValue := FixValue(blueValue + blueStep);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function DarkenColor(const AColor: TColor; const AValue: Byte): TColor;
|
||||||
|
var
|
||||||
|
cColor: Cardinal;
|
||||||
|
iRed: Integer;
|
||||||
|
iGreen: Integer;
|
||||||
|
iBlue: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
cColor := ColorToRGB(AColor);
|
||||||
|
iRed := (cColor and $FF0000) shr 16;;
|
||||||
|
iGreen := (cColor and $00FF00) shr 8;
|
||||||
|
iBlue := cColor and $0000FF;
|
||||||
|
|
||||||
|
Dec(iRed, AValue);
|
||||||
|
Dec(iGreen, AValue);
|
||||||
|
Dec(iBlue, AValue);
|
||||||
|
|
||||||
|
if iRed < 0 then iRed := 0;
|
||||||
|
if iGreen < 0 then iGreen := 0;
|
||||||
|
if iBlue < 0 then iBlue := 0;
|
||||||
|
|
||||||
|
Result := (iRed shl 16) + (iGreen shl 8) + iBlue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function LightenColor(const AColor: TColor; const AValue: Byte): TColor;
|
||||||
|
var
|
||||||
|
cColor: Cardinal;
|
||||||
|
iRed: Integer;
|
||||||
|
iGreen: Integer;
|
||||||
|
iBlue: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
cColor := ColorToRGB(AColor);
|
||||||
|
iRed := (cColor and $FF0000) shr 16;;
|
||||||
|
iGreen := (cColor and $00FF00) shr 8;
|
||||||
|
iBlue := cColor and $0000FF;
|
||||||
|
|
||||||
|
Inc(iRed, AValue);
|
||||||
|
Inc(iGreen, AValue);
|
||||||
|
Inc(iBlue, AValue);
|
||||||
|
|
||||||
|
if iRed > 255 then iRed := 255;
|
||||||
|
if iGreen > 255 then iGreen := 255;
|
||||||
|
if iBlue > 255 then iBlue := 255;
|
||||||
|
|
||||||
|
Result := (iRed shl 16) + (iGreen shl 8) + iBlue;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
375
Source/X2CLMenuBarActions.pas
Normal file
375
Source/X2CLMenuBarActions.pas
Normal file
@ -0,0 +1,375 @@
|
|||||||
|
unit X2CLMenuBarActions;
|
||||||
|
|
||||||
|
interface
|
||||||
|
uses
|
||||||
|
Contnrs,
|
||||||
|
Graphics,
|
||||||
|
Windows,
|
||||||
|
|
||||||
|
X2CLMenuBar;
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
{
|
||||||
|
:$ Animate group expand/collapse.
|
||||||
|
|
||||||
|
:: Handles the animating of a single group.
|
||||||
|
}
|
||||||
|
TX2MenuBarAnimateAction = class(TX2CustomMenuBarAction)
|
||||||
|
private
|
||||||
|
FAnimator: TX2CustomMenuBarAnimator;
|
||||||
|
FGroup: TX2MenuBarGroup;
|
||||||
|
protected
|
||||||
|
property Animator: TX2CustomMenuBarAnimator read FAnimator;
|
||||||
|
property Group: TX2MenuBarGroup read FGroup;
|
||||||
|
public
|
||||||
|
constructor Create(AMenuBar: TX2CustomMenuBar; AGroup: TX2MenuBarGroup;
|
||||||
|
AAnimator: TX2CustomMenuBarAnimator);
|
||||||
|
destructor Destroy(); override;
|
||||||
|
|
||||||
|
procedure Start(); override;
|
||||||
|
|
||||||
|
procedure BeforePaint(); override;
|
||||||
|
procedure GetItemHeight(AItem: TX2CustomMenuBarItem; var AHeight: Integer;
|
||||||
|
var AHandled: Boolean); override;
|
||||||
|
procedure DrawMenuItem(ACanvas: TCanvas; APainter: TX2CustomMenuBarPainter;
|
||||||
|
AItem: TX2CustomMenuBarItem; const AMenuBounds: TRect;
|
||||||
|
const AItemBounds: TRect; AState: TX2MenuBarDrawStates;
|
||||||
|
var AHandled: Boolean); override;
|
||||||
|
procedure AfterPaint(); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Animate multiple groups expanding/collapsing.
|
||||||
|
|
||||||
|
:: Manages multiple TX2MenuBarAnimateAction instances in one action.
|
||||||
|
}
|
||||||
|
TX2MenuBarAnimateMultipleAction = class(TX2CustomMenuBarAction)
|
||||||
|
private
|
||||||
|
FAnimateActions: TObjectList;
|
||||||
|
|
||||||
|
function GetCount(): Integer;
|
||||||
|
protected
|
||||||
|
function GetAnimateAction(AIndex: Integer): TX2MenuBarAnimateAction;
|
||||||
|
function GetTerminated(): Boolean; override;
|
||||||
|
|
||||||
|
property AnimateActions: TObjectList read FAnimateActions;
|
||||||
|
public
|
||||||
|
constructor Create(AMenuBar: TX2CustomMenuBar);
|
||||||
|
destructor Destroy(); override;
|
||||||
|
|
||||||
|
procedure Add(AAction: TX2MenuBarAnimateAction);
|
||||||
|
|
||||||
|
procedure BeforePaint(); override;
|
||||||
|
procedure GetItemHeight(AItem: TX2CustomMenuBarItem; var AHeight: Integer;
|
||||||
|
var AHandled: Boolean); override;
|
||||||
|
procedure DrawMenuItem(ACanvas: TCanvas; APainter: TX2CustomMenuBarPainter;
|
||||||
|
AItem: TX2CustomMenuBarItem; const AMenuBounds: TRect;
|
||||||
|
const AItemBounds: TRect; AState: TX2MenuBarDrawStates;
|
||||||
|
var AHandled: Boolean); override;
|
||||||
|
procedure AfterPaint(); override;
|
||||||
|
|
||||||
|
property Count: Integer read GetCount;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Sets the Expanded property of a group.
|
||||||
|
|
||||||
|
:: Provides a way to set the Expanded property of a group after it has
|
||||||
|
:: been animated.
|
||||||
|
}
|
||||||
|
TX2MenuBarExpandAction = class(TX2CustomMenuBarAction)
|
||||||
|
private
|
||||||
|
FExpanding: Boolean;
|
||||||
|
FGroup: TX2MenuBarGroup;
|
||||||
|
public
|
||||||
|
constructor Create(AMenuBar: TX2CustomMenuBar; AGroup: TX2MenuBarGroup;
|
||||||
|
AExpanding: Boolean);
|
||||||
|
|
||||||
|
procedure Start(); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
:$ Sets the Selected property.
|
||||||
|
|
||||||
|
:: Provides a way to set the Selected property of an item after
|
||||||
|
:: animating.
|
||||||
|
}
|
||||||
|
TX2MenuBarSelectAction = class(TX2CustomMenuBarAction)
|
||||||
|
private
|
||||||
|
FItem: TX2CustomMenuBarItem;
|
||||||
|
public
|
||||||
|
constructor Create(AMenuBar: TX2CustomMenuBar; AItem: TX2CustomMenuBarItem);
|
||||||
|
|
||||||
|
procedure Start(); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
uses
|
||||||
|
SysUtils;
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
TProtectedX2CustomMenuBarPainter = class(TX2CustomMenuBarPainter);
|
||||||
|
TProtectedX2CustomMenuBar = class(TX2CustomMenuBar);
|
||||||
|
TProtectedX2MenuBarGroup = class(TX2MenuBarGroup);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{ TX2MenuBarAnimateAction }
|
||||||
|
constructor TX2MenuBarAnimateAction.Create(AMenuBar: TX2CustomMenuBar; AGroup: TX2MenuBarGroup;
|
||||||
|
AAnimator: TX2CustomMenuBarAnimator);
|
||||||
|
begin
|
||||||
|
inherited Create(AMenuBar);
|
||||||
|
|
||||||
|
FAnimator := AAnimator;
|
||||||
|
FGroup := AGroup;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
destructor TX2MenuBarAnimateAction.Destroy();
|
||||||
|
begin
|
||||||
|
FreeAndNil(FAnimator);
|
||||||
|
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateAction.Start();
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
Animator.ResetStartTime();
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateAction.BeforePaint();
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
Animator.Update();
|
||||||
|
if Animator.Terminated then
|
||||||
|
Terminate();
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateAction.GetItemHeight(AItem: TX2CustomMenuBarItem;
|
||||||
|
var AHeight: Integer;
|
||||||
|
var AHandled: Boolean);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
if AItem = Group then
|
||||||
|
begin
|
||||||
|
AHeight := Animator.Height;
|
||||||
|
AHandled := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateAction.DrawMenuItem(ACanvas: TCanvas; APainter: TX2CustomMenuBarPainter;
|
||||||
|
AItem: TX2CustomMenuBarItem; const AMenuBounds,
|
||||||
|
AItemBounds: TRect; AState: TX2MenuBarDrawStates;
|
||||||
|
var AHandled: Boolean);
|
||||||
|
var
|
||||||
|
groupBounds: TRect;
|
||||||
|
painter: TProtectedX2CustomMenuBarPainter;
|
||||||
|
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
if Group = AItem then
|
||||||
|
begin
|
||||||
|
painter := TProtectedX2CustomMenuBarPainter(APainter);
|
||||||
|
groupBounds := AMenuBounds;
|
||||||
|
groupBounds.Top := AItemBounds.Bottom +
|
||||||
|
painter.GetSpacing(seAfterGroupHeader) +
|
||||||
|
painter.GetSpacing(seBeforeFirstItem);
|
||||||
|
groupBounds.Bottom := groupBounds.Top + Animator.Height;
|
||||||
|
Animator.Draw(ACanvas, groupBounds);
|
||||||
|
// AHandled := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateAction.AfterPaint();
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
if not Terminated then
|
||||||
|
begin
|
||||||
|
{ Prevent 100% CPU usage }
|
||||||
|
Sleep(5);
|
||||||
|
|
||||||
|
TProtectedX2CustomMenuBar(MenuBar).TestMousePos();
|
||||||
|
MenuBar.Invalidate();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TX2MenuBarAnimateMultipleAction }
|
||||||
|
constructor TX2MenuBarAnimateMultipleAction.Create(AMenuBar: TX2CustomMenuBar);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
FAnimateActions := TObjectList.Create(True);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
destructor TX2MenuBarAnimateMultipleAction.Destroy();
|
||||||
|
begin
|
||||||
|
FreeAndNil(FAnimateActions);
|
||||||
|
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateMultipleAction.Add(AAction: TX2MenuBarAnimateAction);
|
||||||
|
begin
|
||||||
|
AnimateActions.Add(AAction);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateMultipleAction.BeforePaint();
|
||||||
|
var
|
||||||
|
actionIndex: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
for actionIndex := 0 to Pred(AnimateActions.Count) do
|
||||||
|
GetAnimateAction(actionIndex).BeforePaint();
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateMultipleAction.GetItemHeight(AItem: TX2CustomMenuBarItem;
|
||||||
|
var AHeight: Integer;
|
||||||
|
var AHandled: Boolean);
|
||||||
|
var
|
||||||
|
actionIndex: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
for actionIndex := 0 to Pred(AnimateActions.Count) do
|
||||||
|
begin
|
||||||
|
GetAnimateAction(actionIndex).GetItemHeight(AItem, AHeight, AHandled);
|
||||||
|
|
||||||
|
if AHandled then
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateMultipleAction.DrawMenuItem(ACanvas: TCanvas;
|
||||||
|
APainter: TX2CustomMenuBarPainter;
|
||||||
|
AItem: TX2CustomMenuBarItem;
|
||||||
|
const AMenuBounds, AItemBounds: TRect;
|
||||||
|
AState: TX2MenuBarDrawStates;
|
||||||
|
var AHandled: Boolean);
|
||||||
|
var
|
||||||
|
actionIndex: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
for actionIndex := 0 to Pred(AnimateActions.Count) do
|
||||||
|
begin
|
||||||
|
GetAnimateAction(actionIndex).DrawMenuItem(ACanvas, APainter, AItem,
|
||||||
|
AMenuBounds, AItemBounds, AState,
|
||||||
|
AHandled);
|
||||||
|
|
||||||
|
if AHandled then
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarAnimateMultipleAction.AfterPaint();
|
||||||
|
var
|
||||||
|
actionIndex: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
for actionIndex := 0 to Pred(AnimateActions.Count) do
|
||||||
|
GetAnimateAction(actionIndex).AfterPaint();
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TX2MenuBarAnimateMultipleAction.GetAnimateAction(AIndex: Integer): TX2MenuBarAnimateAction;
|
||||||
|
begin
|
||||||
|
Result := TX2MenuBarAnimateAction(AnimateActions[AIndex]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TX2MenuBarAnimateMultipleAction.GetCount(): Integer;
|
||||||
|
begin
|
||||||
|
Result := FAnimateActions.Count;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TX2MenuBarAnimateMultipleAction.GetTerminated(): Boolean;
|
||||||
|
var
|
||||||
|
actionIndex: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := inherited GetTerminated();
|
||||||
|
|
||||||
|
if not Result then
|
||||||
|
begin
|
||||||
|
for actionIndex := 0 to Pred(AnimateActions.Count) do
|
||||||
|
if GetAnimateAction(actionIndex).Terminated then
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TX2MenuBarExpandAction }
|
||||||
|
constructor TX2MenuBarExpandAction.Create(AMenuBar: TX2CustomMenuBar;
|
||||||
|
AGroup: TX2MenuBarGroup;
|
||||||
|
AExpanding: Boolean);
|
||||||
|
begin
|
||||||
|
inherited Create(AMenuBar);
|
||||||
|
|
||||||
|
FExpanding := AExpanding;
|
||||||
|
FGroup := AGroup;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarExpandAction.Start();
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
TProtectedX2CustomMenuBar(MenuBar).InternalSetExpanded(FGroup, FExpanding);
|
||||||
|
Terminate();
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TX2MenuBarSelectAction }
|
||||||
|
constructor TX2MenuBarSelectAction.Create(AMenuBar: TX2CustomMenuBar;
|
||||||
|
AItem: TX2CustomMenuBarItem);
|
||||||
|
begin
|
||||||
|
inherited Create(AMenuBar);
|
||||||
|
|
||||||
|
FItem := AItem;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarSelectAction.Start();
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
|
||||||
|
TProtectedX2CustomMenuBar(MenuBar).InternalSetSelected(FItem);
|
||||||
|
Terminate();
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
@ -81,7 +81,9 @@ type
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses
|
uses
|
||||||
SysUtils;
|
SysUtils,
|
||||||
|
|
||||||
|
X2CLGraphics;
|
||||||
|
|
||||||
|
|
||||||
{ TX2MenuBarSlideAnimator }
|
{ TX2MenuBarSlideAnimator }
|
||||||
@ -346,7 +348,7 @@ begin
|
|||||||
destRect := Rect(0, 0, backBuffer.Width, backBuffer.Height);
|
destRect := Rect(0, 0, backBuffer.Width, backBuffer.Height);
|
||||||
backBuffer.Canvas.CopyRect(destRect, ACanvas, ABounds);
|
backBuffer.Canvas.CopyRect(destRect, ACanvas, ABounds);
|
||||||
|
|
||||||
X2CLMenuBar.DrawBlended(backBuffer, ItemsBuffer, FAlpha);
|
X2CLGraphics.DrawBlended(backBuffer, ItemsBuffer, FAlpha);
|
||||||
|
|
||||||
sourceRect := Rect(0, 0, ItemsBuffer.Width, Self.Height);
|
sourceRect := Rect(0, 0, ItemsBuffer.Width, Self.Height);
|
||||||
destRect := ABounds;
|
destRect := ABounds;
|
||||||
|
@ -216,7 +216,7 @@ begin
|
|||||||
iconBuffer.Assign(backBuffer);
|
iconBuffer.Assign(backBuffer);
|
||||||
AImageList.Draw(iconBuffer.Canvas, 0, 0, AImageIndex);
|
AImageList.Draw(iconBuffer.Canvas, 0, 0, AImageIndex);
|
||||||
|
|
||||||
X2CLMenuBar.DrawBlended(backBuffer, iconBuffer, AAlpha);
|
X2CLGraphics.DrawBlended(backBuffer, iconBuffer, AAlpha);
|
||||||
finally
|
finally
|
||||||
FreeAndNil(iconBuffer);
|
FreeAndNil(iconBuffer);
|
||||||
end;
|
end;
|
||||||
|
@ -14,6 +14,7 @@ interface
|
|||||||
uses
|
uses
|
||||||
Classes,
|
Classes,
|
||||||
Graphics,
|
Graphics,
|
||||||
|
ImgList,
|
||||||
Windows,
|
Windows,
|
||||||
|
|
||||||
X2CLMenuBar;
|
X2CLMenuBar;
|
||||||
@ -28,6 +29,7 @@ type
|
|||||||
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
TX2MenuBarunaColor = class(TX2MenuBarunaProperty)
|
TX2MenuBarunaColor = class(TX2MenuBarunaProperty)
|
||||||
private
|
private
|
||||||
FDefaultDisabled: TColor;
|
FDefaultDisabled: TColor;
|
||||||
@ -63,6 +65,7 @@ type
|
|||||||
property Selected: TColor read FSelected write SetSelected stored IsSelectedStored;
|
property Selected: TColor read FSelected write SetSelected stored IsSelectedStored;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
TX2MenuBarunaGroupColors = class(TX2MenuBarunaProperty)
|
TX2MenuBarunaGroupColors = class(TX2MenuBarunaProperty)
|
||||||
private
|
private
|
||||||
FFill: TX2MenuBarunaColor;
|
FFill: TX2MenuBarunaColor;
|
||||||
@ -85,6 +88,7 @@ type
|
|||||||
property Text: TX2MenuBarunaColor read FText write SetText;
|
property Text: TX2MenuBarunaColor read FText write SetText;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
TX2MenuBarunaMetrics = class(TX2MenuBarunaProperty)
|
TX2MenuBarunaMetrics = class(TX2MenuBarunaProperty)
|
||||||
private
|
private
|
||||||
FAfterGroupHeader: Integer;
|
FAfterGroupHeader: Integer;
|
||||||
@ -96,6 +100,8 @@ type
|
|||||||
FGroupHeight: Integer;
|
FGroupHeight: Integer;
|
||||||
FItemHeight: Integer;
|
FItemHeight: Integer;
|
||||||
FMargin: Integer;
|
FMargin: Integer;
|
||||||
|
FImageOffsetY: Integer;
|
||||||
|
FImageOffsetX: Integer;
|
||||||
|
|
||||||
procedure SetAfterGroupHeader(const Value: Integer);
|
procedure SetAfterGroupHeader(const Value: Integer);
|
||||||
procedure SetAfterItem(const Value: Integer);
|
procedure SetAfterItem(const Value: Integer);
|
||||||
@ -106,6 +112,8 @@ type
|
|||||||
procedure SetGroupHeight(const Value: Integer);
|
procedure SetGroupHeight(const Value: Integer);
|
||||||
procedure SetItemHeight(const Value: Integer);
|
procedure SetItemHeight(const Value: Integer);
|
||||||
procedure SetMargin(const Value: Integer);
|
procedure SetMargin(const Value: Integer);
|
||||||
|
procedure SetImageOffsetX(const Value: Integer);
|
||||||
|
procedure SetImageOffsetY(const Value: Integer);
|
||||||
public
|
public
|
||||||
constructor Create();
|
constructor Create();
|
||||||
|
|
||||||
@ -120,8 +128,11 @@ type
|
|||||||
property GroupHeight: Integer read FGroupHeight write SetGroupHeight default 22;
|
property GroupHeight: Integer read FGroupHeight write SetGroupHeight default 22;
|
||||||
property ItemHeight: Integer read FItemHeight write SetItemHeight default 21;
|
property ItemHeight: Integer read FItemHeight write SetItemHeight default 21;
|
||||||
property Margin: Integer read FMargin write SetMargin default 10;
|
property Margin: Integer read FMargin write SetMargin default 10;
|
||||||
|
property ImageOffsetX: Integer read FImageOffsetX write SetImageOffsetX default 0;
|
||||||
|
property ImageOffsetY: Integer read FImageOffsetY write SetImageOffsetY default 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
TX2MenuBarunaPainter = class(TX2CustomMenuBarPainter)
|
TX2MenuBarunaPainter = class(TX2CustomMenuBarPainter)
|
||||||
private
|
private
|
||||||
FArrowColor: TColor;
|
FArrowColor: TColor;
|
||||||
@ -132,6 +143,9 @@ type
|
|||||||
FMetrics: TX2MenuBarunaMetrics;
|
FMetrics: TX2MenuBarunaMetrics;
|
||||||
FShadowColor: TColor;
|
FShadowColor: TColor;
|
||||||
FShadowOffset: Integer;
|
FShadowOffset: Integer;
|
||||||
|
FGroupGradient: Integer;
|
||||||
|
FArrowImages: TCustomImageList;
|
||||||
|
FArrowImageIndex: TImageIndex;
|
||||||
|
|
||||||
procedure SetBlurShadow(const Value: Boolean);
|
procedure SetBlurShadow(const Value: Boolean);
|
||||||
procedure SetGroupColors(const Value: TX2MenuBarunaGroupColors);
|
procedure SetGroupColors(const Value: TX2MenuBarunaGroupColors);
|
||||||
@ -139,7 +153,14 @@ type
|
|||||||
procedure SetMetrics(const Value: TX2MenuBarunaMetrics);
|
procedure SetMetrics(const Value: TX2MenuBarunaMetrics);
|
||||||
procedure SetShadowColor(const Value: TColor);
|
procedure SetShadowColor(const Value: TColor);
|
||||||
procedure SetShadowOffset(const Value: Integer);
|
procedure SetShadowOffset(const Value: Integer);
|
||||||
|
procedure SetGroupGradient(const Value: Integer);
|
||||||
|
procedure SetArrowImageIndex(const Value: TImageIndex);
|
||||||
|
procedure SetArrowImages(const Value: TCustomImageList);
|
||||||
protected
|
protected
|
||||||
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||||
|
|
||||||
|
function HasArrowImage(): Boolean;
|
||||||
|
|
||||||
function ApplyMargins(const ABounds: TRect): TRect; override;
|
function ApplyMargins(const ABounds: TRect): TRect; override;
|
||||||
function GetSpacing(AElement: TX2MenuBarSpacingElement): Integer; override;
|
function GetSpacing(AElement: TX2MenuBarSpacingElement): Integer; override;
|
||||||
function GetGroupHeaderHeight(AGroup: TX2MenuBarGroup): Integer; override;
|
function GetGroupHeaderHeight(AGroup: TX2MenuBarGroup): Integer; override;
|
||||||
@ -148,6 +169,7 @@ type
|
|||||||
procedure DrawBackground(ACanvas: TCanvas; const ABounds: TRect); override;
|
procedure DrawBackground(ACanvas: TCanvas; const ABounds: TRect); override;
|
||||||
procedure DrawGroupHeader(ACanvas: TCanvas; AGroup: TX2MenuBarGroup; const ABounds: TRect; AState: TX2MenuBarDrawStates); override;
|
procedure DrawGroupHeader(ACanvas: TCanvas; AGroup: TX2MenuBarGroup; const ABounds: TRect; AState: TX2MenuBarDrawStates); override;
|
||||||
procedure DrawItem(ACanvas: TCanvas; AItem: TX2MenuBarItem; const ABounds: TRect; AState: TX2MenuBarDrawStates); override;
|
procedure DrawItem(ACanvas: TCanvas; AItem: TX2MenuBarItem; const ABounds: TRect; AState: TX2MenuBarDrawStates); override;
|
||||||
|
procedure DrawArrow(ACanvas: TCanvas; ABounds: TRect);
|
||||||
|
|
||||||
procedure ColorChange(Sender: TObject);
|
procedure ColorChange(Sender: TObject);
|
||||||
public
|
public
|
||||||
@ -156,24 +178,30 @@ type
|
|||||||
|
|
||||||
procedure ResetColors();
|
procedure ResetColors();
|
||||||
published
|
published
|
||||||
property ArrowColor: TColor read FArrowColor write FArrowColor default clBlue;
|
property ArrowImageIndex: TImageIndex read FArrowImageIndex write SetArrowImageIndex default -1;
|
||||||
property BlurShadow: Boolean read FBlurShadow write SetBlurShadow default True;
|
property ArrowImages: TCustomImageList read FArrowImages write SetArrowImages;
|
||||||
property Color: TColor read FColor write FColor default clWindow;
|
property ArrowColor: TColor read FArrowColor write FArrowColor default clBlue;
|
||||||
property GroupColors: TX2MenuBarunaGroupColors read FGroupColors write SetGroupColors;
|
property BlurShadow: Boolean read FBlurShadow write SetBlurShadow default True;
|
||||||
property ItemColors: TX2MenuBarunaColor read FItemColors write SetItemColors;
|
property Color: TColor read FColor write FColor default clWindow;
|
||||||
property Metrics: TX2MenuBarunaMetrics read FMetrics write SetMetrics;
|
property GroupColors: TX2MenuBarunaGroupColors read FGroupColors write SetGroupColors;
|
||||||
property ShadowColor: TColor read FShadowColor write SetShadowColor default clBtnShadow;
|
property ItemColors: TX2MenuBarunaColor read FItemColors write SetItemColors;
|
||||||
property ShadowOffset: Integer read FShadowOffset write SetShadowOffset default 2;
|
property Metrics: TX2MenuBarunaMetrics read FMetrics write SetMetrics;
|
||||||
|
property ShadowColor: TColor read FShadowColor write SetShadowColor default clBtnShadow;
|
||||||
|
property ShadowOffset: Integer read FShadowOffset write SetShadowOffset default 2;
|
||||||
|
property GroupGradient: Integer read FGroupGradient write SetGroupGradient default 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
uses
|
uses
|
||||||
ImgList,
|
|
||||||
SysUtils,
|
SysUtils,
|
||||||
|
|
||||||
X2CLGraphics;
|
X2CLGraphics;
|
||||||
|
|
||||||
|
|
||||||
|
const
|
||||||
|
ArrowMargin = 2;
|
||||||
|
ArrowWidth = 8;
|
||||||
|
|
||||||
|
|
||||||
procedure Blur(ASource: Graphics.TBitmap);
|
procedure Blur(ASource: Graphics.TBitmap);
|
||||||
var
|
var
|
||||||
@ -387,16 +415,37 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarunaMetrics.SetImageOffsetX(const Value: Integer);
|
||||||
|
begin
|
||||||
|
if Value <> FImageOffsetX then
|
||||||
|
begin
|
||||||
|
FImageOffsetX := Value;
|
||||||
|
Changed();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarunaMetrics.SetImageOffsetY(const Value: Integer);
|
||||||
|
begin
|
||||||
|
if Value <> FImageOffsetY then
|
||||||
|
begin
|
||||||
|
FImageOffsetY := Value;
|
||||||
|
Changed();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TX2MenuBarunaPainter }
|
{ TX2MenuBarunaPainter }
|
||||||
constructor TX2MenuBarunaPainter.Create(AOwner: TComponent);
|
constructor TX2MenuBarunaPainter.Create(AOwner: TComponent);
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
|
|
||||||
FBlurShadow := True;
|
FArrowImageIndex := -1;
|
||||||
FGroupColors := TX2MenuBarunaGroupColors.Create();
|
FBlurShadow := True;
|
||||||
FItemColors := TX2MenuBarunaColor.Create();
|
FGroupColors := TX2MenuBarunaGroupColors.Create();
|
||||||
FMetrics := TX2MenuBarunaMetrics.Create();
|
FItemColors := TX2MenuBarunaColor.Create();
|
||||||
FShadowOffset := 2;
|
FMetrics := TX2MenuBarunaMetrics.Create();
|
||||||
|
FShadowOffset := 2;
|
||||||
|
|
||||||
FGroupColors.OnChange := ColorChange;
|
FGroupColors.OnChange := ColorChange;
|
||||||
FItemColors.OnChange := ColorChange;
|
FItemColors.OnChange := ColorChange;
|
||||||
@ -407,6 +456,7 @@ end;
|
|||||||
|
|
||||||
destructor TX2MenuBarunaPainter.Destroy();
|
destructor TX2MenuBarunaPainter.Destroy();
|
||||||
begin
|
begin
|
||||||
|
SetArrowImages(nil);
|
||||||
FreeAndNil(FMetrics);
|
FreeAndNil(FMetrics);
|
||||||
FreeAndNil(FItemColors);
|
FreeAndNil(FItemColors);
|
||||||
FreeAndNil(FGroupColors);
|
FreeAndNil(FGroupColors);
|
||||||
@ -526,6 +576,9 @@ var
|
|||||||
shadowBitmap: Graphics.TBitmap;
|
shadowBitmap: Graphics.TBitmap;
|
||||||
shadowBounds: TRect;
|
shadowBounds: TRect;
|
||||||
textRect: TRect;
|
textRect: TRect;
|
||||||
|
clipRegion: HRGN;
|
||||||
|
startColor: TColor;
|
||||||
|
endColor: TColor;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if not ((mdsSelected in AState) or (mdsGroupSelected in AState)) then
|
if not ((mdsSelected in AState) or (mdsGroupSelected in AState)) then
|
||||||
@ -558,12 +611,32 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
{ Rounded rectangle }
|
{ Rounded rectangle }
|
||||||
ACanvas.Brush.Color := GetColor(GroupColors.Fill);
|
startColor := GetColor(GroupColors.Fill);
|
||||||
ACanvas.Pen.Color := GetColor(GroupColors.Border);
|
endColor := startColor;
|
||||||
ACanvas.Font.Color := GetColor(GroupColors.Text);
|
|
||||||
|
|
||||||
|
if GroupGradient > 0 then
|
||||||
|
endColor := LightenColor(startColor, GroupGradient)
|
||||||
|
|
||||||
|
else if GroupGradient < 0 then
|
||||||
|
endColor := DarkenColor(startColor, -GroupGradient);
|
||||||
|
|
||||||
|
|
||||||
|
clipRegion := CreateRoundRectRgn(ABounds.Left, ABounds.Top, ABounds.Right, ABounds.Bottom, 5, 5);
|
||||||
|
SelectClipRgn(ACanvas.Handle, clipRegion);
|
||||||
|
|
||||||
|
GradientFillRect(ACanvas, ABounds, startColor, endColor);
|
||||||
|
|
||||||
|
SelectClipRgn(ACanvas.Handle, 0);
|
||||||
|
DeleteObject(clipRegion);
|
||||||
|
|
||||||
|
ACanvas.Brush.Style := bsClear;
|
||||||
|
ACanvas.Pen.Color := GetColor(GroupColors.Border);
|
||||||
|
ACanvas.Pen.Style := psSolid;
|
||||||
ACanvas.RoundRect(ABounds.Left, ABounds.Top, ABounds.Right, ABounds.Bottom, 5, 5);
|
ACanvas.RoundRect(ABounds.Left, ABounds.Top, ABounds.Right, ABounds.Bottom, 5, 5);
|
||||||
|
|
||||||
|
ACanvas.Brush.Style := bsSolid;
|
||||||
|
ACanvas.Font.Color := GetColor(GroupColors.Text);
|
||||||
|
|
||||||
textRect := ABounds;
|
textRect := ABounds;
|
||||||
Inc(textRect.Left, 4);
|
Inc(textRect.Left, 4);
|
||||||
Dec(textRect.Right, 4);
|
Dec(textRect.Right, 4);
|
||||||
@ -576,6 +649,10 @@ begin
|
|||||||
begin
|
begin
|
||||||
imagePos.X := textRect.Left;
|
imagePos.X := textRect.Left;
|
||||||
imagePos.Y := ABounds.Top + ((ABounds.Bottom - ABounds.Top - imageList.Height) div 2);
|
imagePos.Y := ABounds.Top + ((ABounds.Bottom - ABounds.Top - imageList.Height) div 2);
|
||||||
|
|
||||||
|
Inc(imagePos.X, Metrics.ImageOffsetX);
|
||||||
|
Inc(imagePos.Y, Metrics.ImageOffsetY);
|
||||||
|
|
||||||
imageList.Draw(ACanvas, imagePos.X, imagePos.Y, AGroup.ImageIndex);
|
imageList.Draw(ACanvas, imagePos.X, imagePos.Y, AGroup.ImageIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -584,6 +661,7 @@ begin
|
|||||||
|
|
||||||
{ Text }
|
{ Text }
|
||||||
ACanvas.Font.Style := [fsBold];
|
ACanvas.Font.Style := [fsBold];
|
||||||
|
SetBkMode(ACanvas.Handle, TRANSPARENT);
|
||||||
DrawText(ACanvas, AGroup.Caption, textRect, taLeftJustify, taVerticalCenter,
|
DrawText(ACanvas, AGroup.Caption, textRect, taLeftJustify, taVerticalCenter,
|
||||||
False, csEllipsis);
|
False, csEllipsis);
|
||||||
end;
|
end;
|
||||||
@ -604,21 +682,58 @@ procedure TX2MenuBarunaPainter.DrawItem(ACanvas: TCanvas; AItem: TX2MenuBarItem;
|
|||||||
Result := AColor.Disabled;
|
Result := AColor.Disabled;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
var
|
var
|
||||||
focusBounds: TRect;
|
focusBounds: TRect;
|
||||||
textBounds: TRect;
|
textBounds: TRect;
|
||||||
arrowPoints: array[0..2] of TPoint;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
focusBounds := ABounds;
|
focusBounds := ABounds;
|
||||||
Dec(focusBounds.Right, Metrics.Margin);
|
|
||||||
|
if HasArrowImage() then
|
||||||
|
Dec(focusBounds.Right, ArrowImages.Width + ArrowMargin)
|
||||||
|
else
|
||||||
|
Dec(focusBounds.Right, ArrowWidth + ArrowMargin);
|
||||||
|
|
||||||
if (mdsSelected in AState) then
|
if (mdsSelected in AState) then
|
||||||
begin
|
begin
|
||||||
{ Focus rectangle }
|
{ Focus rectangle and arrow }
|
||||||
DrawFocusRect(ACanvas, focusBounds);
|
DrawFocusRect(ACanvas, focusBounds);
|
||||||
|
DrawArrow(ACanvas, ABounds);
|
||||||
|
end;
|
||||||
|
|
||||||
{ Arrow }
|
{ Text }
|
||||||
|
ACanvas.Font.Color := GetColor(ItemColors);
|
||||||
|
textBounds := focusBounds;
|
||||||
|
Inc(textBounds.Left, 4);
|
||||||
|
Dec(textBounds.Right, 4);
|
||||||
|
|
||||||
|
if not AItem.Visible then
|
||||||
|
{ Design-time }
|
||||||
|
ACanvas.Font.Style := [fsItalic]
|
||||||
|
else
|
||||||
|
ACanvas.Font.Style := [];
|
||||||
|
|
||||||
|
SetBkMode(ACanvas.Handle, TRANSPARENT);
|
||||||
|
DrawText(ACanvas, AItem.Caption, textBounds, taRightJustify, taVerticalCenter,
|
||||||
|
False, csEllipsis);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarunaPainter.DrawArrow(ACanvas: TCanvas; ABounds: TRect);
|
||||||
|
var
|
||||||
|
arrowX: Integer;
|
||||||
|
arrowY: Integer;
|
||||||
|
arrowPoints: array[0..2] of TPoint;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if HasArrowImage() then
|
||||||
|
begin
|
||||||
|
arrowX := ABounds.Right - ArrowImages.Width;
|
||||||
|
arrowY := ABounds.Top + ((ABounds.Bottom - ABounds.Top - ArrowImages.Height) div 2);
|
||||||
|
ArrowImages.Draw(ACanvas, arrowX, arrowY, ArrowImageIndex);
|
||||||
|
end else
|
||||||
|
begin
|
||||||
ACanvas.Brush.Color := ArrowColor;
|
ACanvas.Brush.Color := ArrowColor;
|
||||||
ACanvas.Pen.Color := ArrowColor;
|
ACanvas.Pen.Color := ArrowColor;
|
||||||
|
|
||||||
@ -630,23 +745,6 @@ begin
|
|||||||
arrowPoints[2].Y := arrowPoints[0].Y + 7;
|
arrowPoints[2].Y := arrowPoints[0].Y + 7;
|
||||||
ACanvas.Polygon(arrowPoints);
|
ACanvas.Polygon(arrowPoints);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Text }
|
|
||||||
ACanvas.Font.Color := GetColor(ItemColors);
|
|
||||||
textBounds := focusBounds;
|
|
||||||
Inc(textBounds.Left, 4);
|
|
||||||
Dec(textBounds.Right, 4);
|
|
||||||
|
|
||||||
SetBkMode(ACanvas.Handle, TRANSPARENT);
|
|
||||||
|
|
||||||
if not AItem.Visible then
|
|
||||||
{ Design-time }
|
|
||||||
ACanvas.Font.Style := [fsItalic]
|
|
||||||
else
|
|
||||||
ACanvas.Font.Style := [];
|
|
||||||
|
|
||||||
DrawText(ACanvas, AItem.Caption, textBounds, taRightJustify, taVerticalCenter,
|
|
||||||
False, csEllipsis);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -656,6 +754,21 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TX2MenuBarunaPainter.HasArrowImage(): Boolean;
|
||||||
|
begin
|
||||||
|
Result := Assigned(ArrowImages) and (ArrowImageIndex > -1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarunaPainter.Notification(AComponent: TComponent; Operation: TOperation);
|
||||||
|
begin
|
||||||
|
if (Operation = opRemove) and (AComponent = FArrowImages) then
|
||||||
|
SetArrowImages(nil);
|
||||||
|
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TX2MenuBarunaPainter.SetGroupColors(const Value: TX2MenuBarunaGroupColors);
|
procedure TX2MenuBarunaPainter.SetGroupColors(const Value: TX2MenuBarunaGroupColors);
|
||||||
begin
|
begin
|
||||||
if Value <> FGroupColors then
|
if Value <> FGroupColors then
|
||||||
@ -702,6 +815,43 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarunaPainter.SetGroupGradient(const Value: Integer);
|
||||||
|
begin
|
||||||
|
if Value <> FGroupGradient then
|
||||||
|
begin
|
||||||
|
FGroupGradient := Value;
|
||||||
|
NotifyObservers();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarunaPainter.SetArrowImageIndex(const Value: TImageIndex);
|
||||||
|
begin
|
||||||
|
if Value <> FArrowImageIndex then
|
||||||
|
begin
|
||||||
|
FArrowImageIndex := Value;
|
||||||
|
NotifyObservers();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TX2MenuBarunaPainter.SetArrowImages(const Value: TCustomImageList);
|
||||||
|
begin
|
||||||
|
if Value <> FArrowImages then
|
||||||
|
begin
|
||||||
|
if Assigned(FArrowImages) then
|
||||||
|
FArrowImages.RemoveFreeNotification(Self);
|
||||||
|
|
||||||
|
FArrowImages := Value;
|
||||||
|
|
||||||
|
if Assigned(FArrowImages) then
|
||||||
|
FArrowImages.FreeNotification(Self);
|
||||||
|
|
||||||
|
NotifyObservers();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ TX2MenuBarunaProperty }
|
{ TX2MenuBarunaProperty }
|
||||||
procedure TX2MenuBarunaProperty.Changed();
|
procedure TX2MenuBarunaProperty.Changed();
|
||||||
begin
|
begin
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
object frmMain: TfrmMain
|
object frmMain: TfrmMain
|
||||||
Left = 300
|
Left = 300
|
||||||
Top = 219
|
Top = 219
|
||||||
|
Width = 613
|
||||||
|
Height = 406
|
||||||
Caption = 'X2MenuBar Test'
|
Caption = 'X2MenuBar Test'
|
||||||
ClientHeight = 379
|
|
||||||
ClientWidth = 589
|
|
||||||
Color = clBtnFace
|
Color = clBtnFace
|
||||||
Font.Charset = DEFAULT_CHARSET
|
Font.Charset = DEFAULT_CHARSET
|
||||||
Font.Color = clWindowText
|
Font.Color = clWindowText
|
||||||
@ -23,8 +23,6 @@ object frmMain: TfrmMain
|
|||||||
Height = 379
|
Height = 379
|
||||||
Align = alLeft
|
Align = alLeft
|
||||||
Shape = bsLeftLine
|
Shape = bsLeftLine
|
||||||
ExplicitLeft = 148
|
|
||||||
ExplicitTop = -4
|
|
||||||
end
|
end
|
||||||
object lblAnimationTime: TLabel
|
object lblAnimationTime: TLabel
|
||||||
Left = 424
|
Left = 424
|
||||||
@ -33,24 +31,13 @@ object frmMain: TfrmMain
|
|||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Animation time (ms):'
|
Caption = 'Animation time (ms):'
|
||||||
end
|
end
|
||||||
object seAnimationTime: TJvSpinEdit
|
|
||||||
Left = 424
|
|
||||||
Top = 36
|
|
||||||
Width = 81
|
|
||||||
Height = 21
|
|
||||||
CheckMinValue = True
|
|
||||||
ButtonKind = bkStandard
|
|
||||||
Value = 250.000000000000000000
|
|
||||||
TabOrder = 0
|
|
||||||
OnChange = seAnimationTimeChange
|
|
||||||
end
|
|
||||||
object Panel1: TPanel
|
object Panel1: TPanel
|
||||||
Left = 280
|
Left = 280
|
||||||
Top = 68
|
Top = 68
|
||||||
Width = 133
|
Width = 133
|
||||||
Height = 77
|
Height = 77
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
TabOrder = 1
|
TabOrder = 0
|
||||||
object rbmusikCube: TRadioButton
|
object rbmusikCube: TRadioButton
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 0
|
Top = 0
|
||||||
@ -87,7 +74,7 @@ object frmMain: TfrmMain
|
|||||||
Width = 153
|
Width = 153
|
||||||
Height = 101
|
Height = 101
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
TabOrder = 2
|
TabOrder = 1
|
||||||
object rbSliding: TRadioButton
|
object rbSliding: TRadioButton
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 20
|
Top = 20
|
||||||
@ -142,7 +129,7 @@ object frmMain: TfrmMain
|
|||||||
Width = 89
|
Width = 89
|
||||||
Height = 17
|
Height = 17
|
||||||
Caption = 'Auto collapse'
|
Caption = 'Auto collapse'
|
||||||
TabOrder = 3
|
TabOrder = 2
|
||||||
OnClick = chkAutoCollapseClick
|
OnClick = chkAutoCollapseClick
|
||||||
end
|
end
|
||||||
object chkAllowCollapseAll: TCheckBox
|
object chkAllowCollapseAll: TCheckBox
|
||||||
@ -151,7 +138,7 @@ object frmMain: TfrmMain
|
|||||||
Width = 101
|
Width = 101
|
||||||
Height = 17
|
Height = 17
|
||||||
Caption = 'Allow collapse all'
|
Caption = 'Allow collapse all'
|
||||||
TabOrder = 5
|
TabOrder = 4
|
||||||
OnClick = chkAllowCollapseAllClick
|
OnClick = chkAllowCollapseAllClick
|
||||||
end
|
end
|
||||||
object chkAutoSelectItem: TCheckBox
|
object chkAutoSelectItem: TCheckBox
|
||||||
@ -160,7 +147,7 @@ object frmMain: TfrmMain
|
|||||||
Width = 101
|
Width = 101
|
||||||
Height = 17
|
Height = 17
|
||||||
Caption = 'Auto select item'
|
Caption = 'Auto select item'
|
||||||
TabOrder = 4
|
TabOrder = 3
|
||||||
OnClick = chkAutoSelectItemClick
|
OnClick = chkAutoSelectItemClick
|
||||||
end
|
end
|
||||||
object chkScrollbar: TCheckBox
|
object chkScrollbar: TCheckBox
|
||||||
@ -171,7 +158,7 @@ object frmMain: TfrmMain
|
|||||||
Caption = 'Scrollbar'
|
Caption = 'Scrollbar'
|
||||||
Checked = True
|
Checked = True
|
||||||
State = cbChecked
|
State = cbChecked
|
||||||
TabOrder = 6
|
TabOrder = 5
|
||||||
OnClick = chkScrollbarClick
|
OnClick = chkScrollbarClick
|
||||||
end
|
end
|
||||||
object chkHideScrollbar: TCheckBox
|
object chkHideScrollbar: TCheckBox
|
||||||
@ -182,7 +169,7 @@ object frmMain: TfrmMain
|
|||||||
Caption = 'Hide Scrollbar'
|
Caption = 'Hide Scrollbar'
|
||||||
Checked = True
|
Checked = True
|
||||||
State = cbChecked
|
State = cbChecked
|
||||||
TabOrder = 7
|
TabOrder = 6
|
||||||
OnClick = chkHideScrollbarClick
|
OnClick = chkHideScrollbarClick
|
||||||
end
|
end
|
||||||
object lbEvents: TListBox
|
object lbEvents: TListBox
|
||||||
@ -191,7 +178,7 @@ object frmMain: TfrmMain
|
|||||||
Width = 421
|
Width = 421
|
||||||
Height = 93
|
Height = 93
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
TabOrder = 8
|
TabOrder = 7
|
||||||
end
|
end
|
||||||
object Button1: TButton
|
object Button1: TButton
|
||||||
Left = 152
|
Left = 152
|
||||||
@ -200,7 +187,7 @@ object frmMain: TfrmMain
|
|||||||
Height = 25
|
Height = 25
|
||||||
Caption = 'SelectFirst'
|
Caption = 'SelectFirst'
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 9
|
TabOrder = 8
|
||||||
end
|
end
|
||||||
object Button2: TButton
|
object Button2: TButton
|
||||||
Left = 152
|
Left = 152
|
||||||
@ -209,7 +196,7 @@ object frmMain: TfrmMain
|
|||||||
Height = 25
|
Height = 25
|
||||||
Caption = 'SelectPrior'
|
Caption = 'SelectPrior'
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 10
|
TabOrder = 9
|
||||||
end
|
end
|
||||||
object Button3: TButton
|
object Button3: TButton
|
||||||
Left = 152
|
Left = 152
|
||||||
@ -218,7 +205,7 @@ object frmMain: TfrmMain
|
|||||||
Height = 25
|
Height = 25
|
||||||
Caption = 'SelectNext'
|
Caption = 'SelectNext'
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 11
|
TabOrder = 10
|
||||||
end
|
end
|
||||||
object Button4: TButton
|
object Button4: TButton
|
||||||
Left = 152
|
Left = 152
|
||||||
@ -227,7 +214,7 @@ object frmMain: TfrmMain
|
|||||||
Height = 25
|
Height = 25
|
||||||
Caption = 'SelectLast'
|
Caption = 'SelectLast'
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 12
|
TabOrder = 11
|
||||||
end
|
end
|
||||||
object Button5: TButton
|
object Button5: TButton
|
||||||
Left = 152
|
Left = 152
|
||||||
@ -236,7 +223,7 @@ object frmMain: TfrmMain
|
|||||||
Height = 25
|
Height = 25
|
||||||
Caption = 'SelectGroupByIndex'
|
Caption = 'SelectGroupByIndex'
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 13
|
TabOrder = 12
|
||||||
end
|
end
|
||||||
object Button6: TButton
|
object Button6: TButton
|
||||||
Left = 152
|
Left = 152
|
||||||
@ -245,7 +232,7 @@ object frmMain: TfrmMain
|
|||||||
Height = 25
|
Height = 25
|
||||||
Caption = 'SelectItemByIndex'
|
Caption = 'SelectItemByIndex'
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 14
|
TabOrder = 13
|
||||||
end
|
end
|
||||||
object chkHotHand: TCheckBox
|
object chkHotHand: TCheckBox
|
||||||
Left = 424
|
Left = 424
|
||||||
@ -305,8 +292,9 @@ object frmMain: TfrmMain
|
|||||||
end>
|
end>
|
||||||
end
|
end
|
||||||
item
|
item
|
||||||
|
Action = actTest2
|
||||||
Caption = 'Group without items'
|
Caption = 'Group without items'
|
||||||
ImageIndex = 2
|
ImageIndex = 3
|
||||||
Expanded = False
|
Expanded = False
|
||||||
Items = <>
|
Items = <>
|
||||||
end
|
end
|
||||||
@ -378,115 +366,113 @@ object frmMain: TfrmMain
|
|||||||
OnSelectedChanged = mbTestSelectedChanged
|
OnSelectedChanged = mbTestSelectedChanged
|
||||||
OnSelectedChanging = mbTestSelectedChanging
|
OnSelectedChanging = mbTestSelectedChanging
|
||||||
Painter = mcPainter
|
Painter = mcPainter
|
||||||
ExplicitLeft = -6
|
|
||||||
end
|
end
|
||||||
object gcMenu: TX2GraphicContainer
|
object gcMenu: TX2GraphicContainer
|
||||||
Graphics = <
|
|
||||||
item
|
|
||||||
Name = 'ShareFile'
|
|
||||||
Picture.Data = {
|
|
||||||
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
|
||||||
00001008060000001FF3FF61000001844944415478DAA5D2CD4B02411400F0B7
|
|
||||||
DB2DA27FAB4EE22102A1A0C0FCA0837A4989683734C7A072A12C45502902FB00
|
|
||||||
E95487FEA20E1D24337777E635B33BBB389B5E6A60F6ED1EDE6FDE9BB71AFC73
|
|
||||||
69C14BADF98A223A8EEB7DDB41B4FD38B11D1112D661A23F1728A657E69E5428
|
|
||||||
F761796911869F5F0A32174044102551E6BF17C90364B76270F7F4A6202140AE
|
|
||||||
5FB09459554E1589942B8CF9C0F4E280A600A6F58C462E3613A01C70F9B61DCA
|
|
||||||
4F1F83D51CA0656EEB2A501FA0918FAB2D88646FA3D74A108D6A0F2E2A496D26
|
|
||||||
20127D80972E93998208A00B97951D1530CE076816E2E052FFF238E125B228C4
|
|
||||||
1F06E941230AEC9F3CE2F1DE1A7CBB2CAC00652B4CB6C2E49D1C912E07522A50
|
|
||||||
22F7484AEB30B2250018224C2607509974A0719C5681BC798B75630386131AA9
|
|
||||||
80274B2C68A5C22BB8AA46809C71C347B3091F631ACC414564152E8FD55A079A
|
|
||||||
24A302A9621B5BB524BC8F9CA951AA80F72FF07D76DA8516C9AAC0EE411B755D
|
|
||||||
0790339045841719DC8BA86241D37F4FE1AFEB07F8392D2050E7313500000000
|
|
||||||
49454E44AE426082}
|
|
||||||
end
|
|
||||||
item
|
|
||||||
Name = 'ShareFolder'
|
|
||||||
Picture.Data = {
|
|
||||||
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
|
||||||
00001008060000001FF3FF610000025B4944415478DAAD936D48535118C7FF77
|
|
||||||
775BEAD8ACA123CB2834EC9B2DB2B0328CCC284B461192146A48040505D36A05
|
|
||||||
154826A64D53A490303F6510C528421B6B2CC4C0E5170317ABA859099ACEBBF7
|
|
||||||
B6BBFBD2F172433F680875E0CF797BFE3FCE79CE7928FC63A3961B38D201BB3F
|
|
||||||
82524100E6140AA0A7D28ADA65039C2D88159DF3A7AA52F5D2FCF90D0AA60650
|
|
||||||
4B02BCBDD8C504512288284CB23088EA0C63F18569FACFFE92007727BCB47E4B
|
|
||||||
9E5A9385F4753B9091530EB5D6009AD690DD28519C2813B66B5A1CB9B908C075
|
|
||||||
0762B139042EEE412CF01D51BF0789F04F4064C1712C36EEAE275119787A350B
|
|
||||||
C79A64C0609B2209958E5E633C4FF9DE36A0B07610D1D97EA8523448D56AB122
|
|
||||||
2D8D642E8EC98FA3D0E79442AD31E289250F15CD32C0D942058ACE0EA7ABD236
|
|
||||||
C1D19C8E7D973F93D521804B4A4649624292CFF3151B0AEAF1F8E26654B6CA00
|
|
||||||
C76DA53BFF68DFB6CCDC9DB037ADC5FE2BA3C4F41AE009804BCC03F8047E787D
|
|
||||||
C8DE5E8547751538619501F62674AF5A5F525350D9AD1A68CCC5018B8BE4AA5F
|
|
||||||
324060E57EEE041CC4A40026A6C3CBAE07A8BA2B03061A5141F1F4BDBD752FF4
|
|
||||||
AF5ACB70E8928D24FC1931B20B00736312ACA010F42760EB79839ACE05AF3070
|
|
||||||
2BC5A6CBDA6A9AF10DA1DCFC1008F649999704228508669605331E86776C06D3
|
|
||||||
939189EA0E6453F31F0367D49AD55DF1F0246D32B713402F3125C04C45C8BD43
|
|
||||||
98188F89D15032405E72F8781B0E2E5A0BCEAE7C8E99784F97551FC627B70BDF
|
|
||||||
BEFCE2E3117E4AE031625809CB9EEBF8F0D7627A77BFE0D4D8D88855A9440022
|
|
||||||
1C27DB71FABF55E352ED373075032024CD24170000000049454E44AE426082}
|
|
||||||
end
|
|
||||||
item
|
|
||||||
Name = 'ShareWebcam'
|
|
||||||
Picture.Data = {
|
|
||||||
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
|
||||||
00001008060000001FF3FF61000002C14944415478DABD935D48935118C7FF9B
|
|
||||||
DB9CD38913155CB586D008C30F9A95A8217927A14157DE441FE88521A4828108
|
|
||||||
0A8992621745A80C477AB3A048D44A08A18589BA959AE0D4A09CBAE936F7E55E
|
|
||||||
759B7BDFB91EDF20E82E283A70381CCE797EFFE739E7FF08F09743F04F00D5D5
|
|
||||||
BA94C4C4E47A954AA171BB0F6452292B92CB25C24824088E63A32C1BE658F630
|
|
||||||
B2BFBF175E5B5B5B0F0643AF8DC6E79F7F011A1B87DE3435555C0D8582181F37
|
|
||||||
637BFB3BEAEA6ED28918BBBB3EC4C589F8AB1C071C1C846136CFC52626DE0D8D
|
|
||||||
8E0EDEE6011D1D2F772A2B0BD2392E0A936915878711C46231088502582C6FB1
|
|
||||||
B4B44CC0079899998048C48132A1A8D42D9DAEEB240F686919F017179F4D6118
|
|
||||||
8ED4BD9048E22016FF9C16CB14525353A056E7C26AB5109C4166A692A0566F6F
|
|
||||||
EFC3341ED0DDFDC25759A9552C2CAC8061F6715C7B2C968868D405AD36076EB7
|
|
||||||
874A0990BA020A453A8145181B1BF1F7F575A7F280F6F621574D4D4586DDEE81
|
|
||||||
D7CBC066B3D2EA446E6E16BABA9E906A0C39392AE4E79F874A758E32946078F8
|
|
||||||
95BBBFBF278307B4B50D6CD6D65E3FB5B9E982CFC7606BCB4EEA3EACAE2E2110
|
|
||||||
5042A3C9C6E4A40EA5A525042A444282140683C1A6D33D56F180E6E6A75F1B1A
|
|
||||||
6E683636B649790F3B3B0E04832EACAF7F83D13887B4B44CC8E52C0A0B8B9097
|
|
||||||
7701F1F1F1D0EBF52B7A7D6F360FA8AFEFFAD4DA7AB7C06ADD86C7B34BC10C1C
|
|
||||||
0E3BA4D2E35F311F7B014AE50994945C21F544242727D1BB3D9A32189E5DE601
|
|
||||||
55558D239D9DF7AE310C4BEA7EAA5100A7D3857098A1E010EDC5C8CA3A43CA32
|
|
||||||
BACD61717131363030747F76F6430F0F282FBF73A9ACACE47D51915666B3B9C8
|
|
||||||
386421B11432593C418294CD163DAC2DE2743AE697972DC66834326A327D34FD
|
|
||||||
D60BE5E5B72EAAD5A7079392E41AB2AE9BCC6275B91CCB3E5FE08B40C0CE1F1D
|
|
||||||
F917A6A767427FD24C429A47FFAD1B7F00ED1B51200D4AE2740000000049454E
|
|
||||||
44AE426082}
|
|
||||||
end
|
|
||||||
item
|
|
||||||
Name = 'ShareWebcamVideo'
|
|
||||||
Picture.Data = {
|
|
||||||
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
|
||||||
00001008060000001FF3FF61000002EA4944415478DAA5935D48935118C7FFF3
|
|
||||||
DDAB6BCEF9FDED44DC4CA15E8761412A1296A121285ED595DD7521298C125341
|
|
||||||
E9622B584CE6BCF122454891AE9424432B3FC8A4FC203F32D1E9FCAA95D36DCD
|
|
||||||
B5BDAF7BB78E2B040BA2E8DC9CAFE7FC9EE7FCCFF90BF09F4DF0EB82CFE713E8
|
|
||||||
F5FA149AA6198FC7C3884422262C2C8C118BC5A91CC7EDBBDDAE75ABD5BAC4B2
|
|
||||||
9C4EA5524D1E03747777574B2492A688888830D2432A952238580C9AA6C82E8F
|
|
||||||
830316DBDB7632077A7B7B5FD7D737E41C017A7A7A8A939393FB188611DA6C36
|
|
||||||
2426268265DDB05A2D9899716373D30BA39187CD7608FA86ADCD06D7E0D0A0D8
|
|
||||||
0F50ABD585342D7CEA703828A55289E8E818242424203C5C82AE2E0789909183
|
|
||||||
FB70BB59389D2E02F66274F4BA6361615CEA075455DD1C11894EE43FEC7C8C2B
|
|
||||||
C59791794A8EA2A26212ECC4F47436380EE430878D8D31D8ED6FC93A199BDEAC
|
|
||||||
4FCD0CA4F801776A6B9D731F56C553CB1C3EED72A82C4FC2A5C2622814C99898
|
|
||||||
9061656519F3F3F7B1B7B785A8A818040444212DEDCCAC56AB52FA013535B7ED
|
|
||||||
E65D56FA688405EF0DC5D59CAF60329290937B0E7373720C0CA840511C76763E
|
|
||||||
FB01F1F1371014343B6B3034FE005456560E9D4C935FACD6AF03541CCAB35791
|
|
||||||
9A1082D34C3A9697F33035A5267A444128CC464848162C163BD1A97FB2B5557D
|
|
||||||
F667053525F0F17D2C1527E81B36212B6E1D79F917E0724988FAB9100804F078
|
|
||||||
78A2C5A1802EA2831B1919CFFB753A6DC9D133D6D5D5DD22719AF434B9D0E9E2
|
|
||||||
488981E4B942313C1C47EECCC3EBF591B9070E871B4AA58FC09E7536371B2A8E
|
|
||||||
7DA4F6F6F677A5A5A59966B39964B1C164B2A0A34388C04090CC3C2223BD2828
|
|
||||||
A0C978D16B327D2CD56A1F3C3906D0E974E3656565E7799EF7976DB57E415BDB
|
|
||||||
26C46211C94A932A8CBEA5A5B5171415D8A8D1685EFDE605F2A1AE51146590C9
|
|
||||||
64110A8582F8C2EBBFF7E2E27B9FD1B8F6322040D8A4D1DC1BFBA39988418288
|
|
||||||
894A481515B1B1B185168BE51531D8DD969696D1BF72E3BFB6EF2C065120000A
|
|
||||||
A5C30000000049454E44AE426082}
|
|
||||||
end>
|
|
||||||
Left = 180
|
Left = 180
|
||||||
Top = 8
|
Top = 8
|
||||||
|
object gcMenuShareFile: TX2GraphicContainerItem
|
||||||
|
Picture.Data = {
|
||||||
|
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
||||||
|
00001008060000001FF3FF61000001844944415478DAA5D2CD4B02411400F0B7
|
||||||
|
DB2DA27FAB4EE22102A1A0C0FCA0837A4989683734C7A072A12C45502902FB00
|
||||||
|
E95487FEA20E1D24337777E635B33BBB389B5E6A60F6ED1EDE6FDE9BB71AFC73
|
||||||
|
69C14BADF98A223A8EEB7DDB41B4FD38B11D1112D661A23F1728A657E69E5428
|
||||||
|
F761796911869F5F0A32174044102551E6BF17C90364B76270F7F4A6202140AE
|
||||||
|
5FB09459554E1589942B8CF9C0F4E280A600A6F58C462E3613A01C70F9B61DCA
|
||||||
|
4F1F83D51CA0656EEB2A501FA0918FAB2D88646FA3D74A108D6A0F2E2A496D26
|
||||||
|
20127D80972E93998208A00B97951D1530CE076816E2E052FFF238E125B228C4
|
||||||
|
1F06E941230AEC9F3CE2F1DE1A7CBB2CAC00652B4CB6C2E49D1C912E07522A50
|
||||||
|
22F7484AEB30B2250018224C2607509974A0719C5681BC798B75630386131AA9
|
||||||
|
80274B2C68A5C22BB8AA46809C71C347B3091F631ACC414564152E8FD55A079A
|
||||||
|
24A302A9621B5BB524BC8F9CA951AA80F72FF07D76DA8516C9AAC0EE411B755D
|
||||||
|
0790339045841719DC8BA86241D37F4FE1AFEB07F8392D2050E7313500000000
|
||||||
|
49454E44AE426082}
|
||||||
|
PictureName = 'ShareFile'
|
||||||
|
end
|
||||||
|
object gcMenuShareFolder: TX2GraphicContainerItem
|
||||||
|
Picture.Data = {
|
||||||
|
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
||||||
|
00001008060000001FF3FF610000025B4944415478DAAD936D48535118C7FF77
|
||||||
|
775BEAD8ACA123CB2834EC9B2DB2B0328CCC284B461192146A48040505D36A05
|
||||||
|
154826A64D53A490303F6510C528421B6B2CC4C0E5170317ABA859099ACEBBF7
|
||||||
|
B6BBFBD2F172433F680875E0CF797BFE3FCE79CE7928FC63A3961B38D201BB3F
|
||||||
|
82524100E6140AA0A7D28ADA65039C2D88159DF3A7AA52F5D2FCF90D0AA60650
|
||||||
|
4B02BCBDD8C504512288284CB23088EA0C63F18569FACFFE92007727BCB47E4B
|
||||||
|
9E5A9385F4753B9091530EB5D6009AD690DD28519C2813B66B5A1CB9B908C075
|
||||||
|
0762B139042EEE412CF01D51BF0789F04F4064C1712C36EEAE275119787A350B
|
||||||
|
C79A64C0609B2209958E5E633C4FF9DE36A0B07610D1D97EA8523448D56AB122
|
||||||
|
2D8D642E8EC98FA3D0E79442AD31E289250F15CD32C0D942058ACE0EA7ABD236
|
||||||
|
C1D19C8E7D973F93D521804B4A4649624292CFF3151B0AEAF1F8E26654B6CA00
|
||||||
|
C76DA53BFF68DFB6CCDC9DB037ADC5FE2BA3C4F41AE009804BCC03F8047E787D
|
||||||
|
C8DE5E8547751538619501F62674AF5A5F525350D9AD1A68CCC5018B8BE4AA5F
|
||||||
|
324060E57EEE041CC4A40026A6C3CBAE07A8BA2B03061A5141F1F4BDBD752FF4
|
||||||
|
AF5ACB70E8928D24FC1931B20B00736312ACA010F42760EB79839ACE05AF3070
|
||||||
|
2BC5A6CBDA6A9AF10DA1DCFC1008F649999704228508669605331E86776C06D3
|
||||||
|
939189EA0E6453F31F0367D49AD55DF1F0246D32B713402F3125C04C45C8BD43
|
||||||
|
98188F89D15032405E72F8781B0E2E5A0BCEAE7C8E99784F97551FC627B70BDF
|
||||||
|
BEFCE2E3117E4AE031625809CB9EEBF8F0D7627A77BFE0D4D8D88855A9440022
|
||||||
|
1C27DB71FABF55E352ED373075032024CD24170000000049454E44AE426082}
|
||||||
|
PictureName = 'ShareFolder'
|
||||||
|
end
|
||||||
|
object gcMenuShareWebcam: TX2GraphicContainerItem
|
||||||
|
Picture.Data = {
|
||||||
|
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
||||||
|
00001008060000001FF3FF61000002C14944415478DABD935D48935118C7FF9B
|
||||||
|
DB9CD38913155CB586D008C30F9A95A8217927A14157DE441FE88521A4828108
|
||||||
|
0A8992621745A80C477AB3A048D44A08A18589BA959AE0D4A09CBAE936F7E55E
|
||||||
|
759B7BDFB91EDF20E82E283A70381CCE797EFFE739E7FF08F09743F04F00D5D5
|
||||||
|
BA94C4C4E47A954AA171BB0F6452292B92CB25C24824088E63A32C1BE658F630
|
||||||
|
B2BFBF175E5B5B5B0F0643AF8DC6E79F7F011A1B87DE3435555C0D8582181F37
|
||||||
|
637BFB3BEAEA6ED28918BBBB3EC4C589F8AB1C071C1C846136CFC52626DE0D8D
|
||||||
|
8E0EDEE6011D1D2F772A2B0BD2392E0A936915878711C46231088502582C6FB1
|
||||||
|
B4B44CC0079899998048C48132A1A8D42D9DAEEB240F686919F017179F4D6118
|
||||||
|
8ED4BD9048E22016FF9C16CB14525353A056E7C26AB5109C4166A692A0566F6F
|
||||||
|
EFC3341ED0DDFDC25759A9552C2CAC8061F6715C7B2C968868D405AD36076EB7
|
||||||
|
874A0990BA020A453A8145181B1BF1F7F575A7F280F6F621574D4D4586DDEE81
|
||||||
|
D7CBC066B3D2EA446E6E16BABA9E906A0C39392AE4E79F874A758E32946078F8
|
||||||
|
95BBBFBF278307B4B50D6CD6D65E3FB5B9E982CFC7606BCB4EEA3EACAE2E2110
|
||||||
|
5042A3C9C6E4A40EA5A525042A444282140683C1A6D33D56F180E6E6A75F1B1A
|
||||||
|
6E683636B649790F3B3B0E04832EACAF7F83D13887B4B44CC8E52C0A0B8B9097
|
||||||
|
7701F1F1F1D0EBF52B7A7D6F360FA8AFEFFAD4DA7AB7C06ADD86C7B34BC10C1C
|
||||||
|
0E3BA4D2E35F311F7B014AE50994945C21F544242727D1BB3D9A32189E5DE601
|
||||||
|
55558D239D9DF7AE310C4BEA7EAA5100A7D3857098A1E010EDC5C8CA3A43CA32
|
||||||
|
BACD61717131363030747F76F6430F0F282FBF73A9ACACE47D51915666B3B9C8
|
||||||
|
386421B11432593C418294CD163DAC2DE2743AE697972DC66834326A327D34FD
|
||||||
|
D60BE5E5B72EAAD5A7079392E41AB2AE9BCC6275B91CCB3E5FE08B40C0CE1F1D
|
||||||
|
F917A6A767427FD24C429A47FFAD1B7F00ED1B51200D4AE2740000000049454E
|
||||||
|
44AE426082}
|
||||||
|
PictureName = 'ShareWebcam'
|
||||||
|
end
|
||||||
|
object gcMenuShareWebcamVideo: TX2GraphicContainerItem
|
||||||
|
Picture.Data = {
|
||||||
|
0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001000
|
||||||
|
00001008060000001FF3FF61000002EA4944415478DAA5935D48935118C7FFF3
|
||||||
|
DDAB6BCEF9FDED44DC4CA15E8761412A1296A121285ED595DD7521298C125341
|
||||||
|
E9622B584CE6BCF122454891AE9424432B3FC8A4FC203F32D1E9FCAA95D36DCD
|
||||||
|
B5BDAF7BB78E2B040BA2E8DC9CAFE7FC9EE7FCCFF90BF09F4DF0EB82CFE713E8
|
||||||
|
F5FA149AA6198FC7C3884422262C2C8C118BC5A91CC7EDBBDDAE75ABD5BAC4B2
|
||||||
|
9C4EA5524D1E03747777574B2492A688888830D2432A952238580C9AA6C82E8F
|
||||||
|
830316DBDB7632077A7B7B5FD7D737E41C017A7A7A8A939393FB188611DA6C36
|
||||||
|
2426268265DDB05A2D9899716373D30BA39187CD7608FA86ADCD06D7E0D0A0D8
|
||||||
|
0F50ABD585342D7CEA703828A55289E8E818242424203C5C82AE2E0789909183
|
||||||
|
FB70BB59389D2E02F66274F4BA6361615CEA075455DD1C11894EE43FEC7C8C2B
|
||||||
|
C59791794A8EA2A26212ECC4F47436380EE430878D8D31D8ED6FC93A199BDEAC
|
||||||
|
4FCD0CA4F801776A6B9D731F56C553CB1C3EED72A82C4FC2A5C2622814C99898
|
||||||
|
9061656519F3F3F7B1B7B785A8A818040444212DEDCCAC56AB52FA013535B7ED
|
||||||
|
E65D56FA688405EF0DC5D59CAF60329290937B0E7373720C0CA840511C76763E
|
||||||
|
FB01F1F1371014343B6B3034FE005456560E9D4C935FACD6AF03541CCAB35791
|
||||||
|
9A1082D34C3A9697F33035A5267A444128CC464848162C163BD1A97FB2B5557D
|
||||||
|
F667053525F0F17D2C1527E81B36212B6E1D79F917E0724988FAB9100804F078
|
||||||
|
78A2C5A1802EA2831B1919CFFB753A6DC9D133D6D5D5DD22719AF434B9D0E9E2
|
||||||
|
488981E4B942313C1C47EECCC3EBF591B9070E871B4AA58FC09E7536371B2A8E
|
||||||
|
7DA4F6F6F677A5A5A59966B39964B1C164B2A0A34388C04090CC3C2223BD2828
|
||||||
|
A0C978D16B327D2CD56A1F3C3906D0E974E3656565E7799EF7976DB57E415BDB
|
||||||
|
26C46211C94A932A8CBEA5A5B5171415D8A8D1685EFDE605F2A1AE51146590C9
|
||||||
|
64110A8582F8C2EBBFF7E2E27B9FD1B8F6322040D8A4D1DC1BFBA39988418288
|
||||||
|
894A481515B1B1B185168BE51531D8DD969696D1BF72E3BFB6EF2C065120000A
|
||||||
|
A5C30000000049454E44AE426082}
|
||||||
|
PictureName = 'ShareWebcamVideo'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object glMenu: TX2GraphicList
|
object glMenu: TX2GraphicList
|
||||||
Container = gcMenu
|
Container = gcMenu
|
||||||
@ -511,5 +497,10 @@ object frmMain: TfrmMain
|
|||||||
ImageIndex = 1
|
ImageIndex = 1
|
||||||
OnExecute = actTestExecute
|
OnExecute = actTestExecute
|
||||||
end
|
end
|
||||||
|
object actTest2: TAction
|
||||||
|
Caption = 'Group without items'
|
||||||
|
ImageIndex = 3
|
||||||
|
OnExecute = actTest2Execute
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -11,8 +11,8 @@ uses
|
|||||||
StdCtrls,
|
StdCtrls,
|
||||||
XPMan,
|
XPMan,
|
||||||
|
|
||||||
JvExMask,
|
// JvExMask,
|
||||||
JvSpin,
|
// JvSpin,
|
||||||
PNGImage,
|
PNGImage,
|
||||||
X2CLGraphicList,
|
X2CLGraphicList,
|
||||||
X2CLMenuBar,
|
X2CLMenuBar,
|
||||||
@ -28,7 +28,6 @@ type
|
|||||||
rbmusikCube: TRadioButton;
|
rbmusikCube: TRadioButton;
|
||||||
rbSliding: TRadioButton;
|
rbSliding: TRadioButton;
|
||||||
lblAnimationTime: TLabel;
|
lblAnimationTime: TLabel;
|
||||||
seAnimationTime: TJvSpinEdit;
|
|
||||||
Panel1: TPanel;
|
Panel1: TPanel;
|
||||||
Panel2: TPanel;
|
Panel2: TPanel;
|
||||||
rbNoAnimation: TRadioButton;
|
rbNoAnimation: TRadioButton;
|
||||||
@ -53,6 +52,7 @@ type
|
|||||||
mbTest: TX2MenuBar;
|
mbTest: TX2MenuBar;
|
||||||
alMenu: TActionList;
|
alMenu: TActionList;
|
||||||
actTest: TAction;
|
actTest: TAction;
|
||||||
|
actTest2: TAction;
|
||||||
procedure mbTestSelectedChanging(Sender: TObject; Item,
|
procedure mbTestSelectedChanging(Sender: TObject; Item,
|
||||||
NewItem: TX2CustomMenuBarItem; var Allowed: Boolean);
|
NewItem: TX2CustomMenuBarItem; var Allowed: Boolean);
|
||||||
procedure mbTestSelectedChanged(Sender: TObject;
|
procedure mbTestSelectedChanged(Sender: TObject;
|
||||||
@ -73,6 +73,7 @@ type
|
|||||||
procedure AnimationClick(Sender: TObject);
|
procedure AnimationClick(Sender: TObject);
|
||||||
procedure seAnimationTimeChange(Sender: TObject);
|
procedure seAnimationTimeChange(Sender: TObject);
|
||||||
procedure actTestExecute(Sender: TObject);
|
procedure actTestExecute(Sender: TObject);
|
||||||
|
procedure actTest2Execute(Sender: TObject);
|
||||||
procedure FormClick(Sender: TObject);
|
procedure FormClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
procedure Event(const AMsg: String);
|
procedure Event(const AMsg: String);
|
||||||
@ -82,7 +83,7 @@ implementation
|
|||||||
uses
|
uses
|
||||||
Dialogs,
|
Dialogs,
|
||||||
|
|
||||||
X2UtHandCursor;
|
Windows;
|
||||||
|
|
||||||
{$R *.dfm}
|
{$R *.dfm}
|
||||||
|
|
||||||
@ -165,6 +166,8 @@ begin
|
|||||||
chkAllowCollapseAll.Checked := mbTest.AllowCollapseAll;
|
chkAllowCollapseAll.Checked := mbTest.AllowCollapseAll;
|
||||||
chkScrollbar.Checked := mbTest.Scrollbar;
|
chkScrollbar.Checked := mbTest.Scrollbar;
|
||||||
chkHideScrollbar.Checked := mbTest.HideScrollbar;
|
chkHideScrollbar.Checked := mbTest.HideScrollbar;
|
||||||
|
|
||||||
|
rbUnameIT.Checked := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.mbTestCollapsed(Sender: TObject; Group: TX2MenuBarGroup);
|
procedure TfrmMain.mbTestCollapsed(Sender: TObject; Group: TX2MenuBarGroup);
|
||||||
@ -229,7 +232,12 @@ end;
|
|||||||
|
|
||||||
procedure TfrmMain.seAnimationTimeChange(Sender: TObject);
|
procedure TfrmMain.seAnimationTimeChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
mbTest.AnimationTime := seAnimationTime.AsInteger;
|
// mbTest.AnimationTime := seAnimationTime.AsInteger;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TfrmMain.actTest2Execute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
Sleep(200);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.FormClick(Sender: TObject);
|
procedure TfrmMain.FormClick(Sender: TObject);
|
||||||
|
@ -31,12 +31,12 @@
|
|||||||
-M
|
-M
|
||||||
-$M16384,1048576
|
-$M16384,1048576
|
||||||
-K$00400000
|
-K$00400000
|
||||||
-LE"C:\Documents and Settings\PsychoMark\My Documents\Borland Studio Projects\Bpl"
|
-LE"c:\program files\borland\delphi7\Projects\Bpl"
|
||||||
-LN"C:\Documents and Settings\PsychoMark\My Documents\Borland Studio Projects\Bpl"
|
-LN"c:\program files\borland\delphi7\Projects\Bpl"
|
||||||
-U"..\..\Source"
|
-U"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System"
|
||||||
-O"..\..\Source"
|
-O"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System"
|
||||||
-I"..\..\Source"
|
-I"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System"
|
||||||
-R"..\..\Source"
|
-R"P:\Algemeen\Indy10;P:\Algemeen\Indy10\Core;P:\Algemeen\Indy10\Protocols;P:\Algemeen\Indy10\SuperCore;P:\Algemeen\Indy10\System"
|
||||||
-w-UNSAFE_TYPE
|
-w-UNSAFE_TYPE
|
||||||
-w-UNSAFE_CODE
|
-w-UNSAFE_CODE
|
||||||
-w-UNSAFE_CAST
|
-w-UNSAFE_CAST
|
||||||
|
@ -4,7 +4,11 @@ uses
|
|||||||
Forms,
|
Forms,
|
||||||
MainForm in 'MainForm.pas' {frmMain},
|
MainForm in 'MainForm.pas' {frmMain},
|
||||||
X2CLMenuBarAnimators in '..\..\Source\X2CLMenuBarAnimators.pas',
|
X2CLMenuBarAnimators in '..\..\Source\X2CLMenuBarAnimators.pas',
|
||||||
X2CLGraphics in '..\..\Source\X2CLGraphics.pas';
|
X2CLGraphics in '..\..\Source\X2CLGraphics.pas',
|
||||||
|
X2CLunaMenuBarPainter in '..\..\Source\X2CLunaMenuBarPainter.pas',
|
||||||
|
X2CLMenuBar in '..\..\Source\X2CLMenuBar.pas',
|
||||||
|
X2CLmusikCubeMenuBarPainter in '..\..\Source\X2CLmusikCubeMenuBarPainter.pas',
|
||||||
|
X2CLMenuBarActions in '..\..\Source\X2CLMenuBarActions.pas';
|
||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user