* initial import of spktoolbar

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1690 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
blikblum
2011-06-17 20:53:01 +00:00
parent 8be5dbf81c
commit 96e13b536b
32 changed files with 16151 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,555 @@
unit SpkGraphTools;
{$DEFINE SPKGRAPHTOOLS}
interface
uses Windows, Graphics, Classes, Math, Sysutils, Dialogs,
SpkMath;
const NUM_ZERO = 0.00000001;
(*******************************************************************************
* *
* Proste struktury *
* *
*******************************************************************************)
type // Wska�nik do tablicy TRGBTriple
PRGBTripleArray = ^TRGBTripleArray;
// Tablica TRGBTriple (u�ywana podczas operacji ze ScanLine)
TRGBTripleArray = array[word] of TRGBTriple;
type THSLTriple = record
H, S, L : extended;
end;
type // Typ u�ywany podczas rysowania gradient�w
TRIVERTEX = packed record
x,y : DWORD;
Red,
Green,
Blue,
Alpha : Word;
end;
type // Rodzaj gradientu
TGradientType = (gtVertical, gtHorizontal);
// Rodzaj linii gradientowej (miejsce rozmycia)
TGradientLineShade = (lsShadeStart, lsShadeEnds, lsShadeCenter, lsShadeEnd);
// Rodzaj linii gradientowej (wypuk�o��)
TGradient3dLine = (glRaised, glLowered);
(*******************************************************************************
* *
* Nag��wki dla zewn�trznych funkcji *
* *
*******************************************************************************)
function GradientFill(DC : hDC; pVertex : Pointer; dwNumVertex : DWORD; pMesh : Pointer; dwNumMesh, dwMode: DWORD) : DWord; stdcall; external 'msimg32.dll';
(*******************************************************************************
* *
* Klasy narz�dziowe *
* *
*******************************************************************************)
type TColorTools = class(TObject)
private
protected
public
class function Darken(kolor : TColor; percentage : byte) : TColor;
class function Brighten(kolor : TColor; percentage : byte) : TColor;
class function Shade(kol1,kol2 : TColor; percentage : byte) : TColor; overload;
class function Shade(kol1,kol2 : TColor; Step : extended) : TColor; overload;
class function AddColors(c1, c2 : TColor) : TColor;
class function MultiplyColors(c1, c2 : TColor) : TColor;
class function MultiplyColor(color : TColor; scalar : integer) : TColor; overload;
class function MultiplyColor(color : TColor; scalar : extended) : TColor; overload;
class function percent(min, pos, max : integer) : byte;
class function RGB2HSL(ARGB : TRGBTriple) : THSLTriple;
class function HSL2RGB(AHSL : THSLTriple) : TRGBTriple;
class function RgbTripleToColor(ARgbTriple : TRGBTriple) : TColor;
class function ColorToRgbTriple(AColor : TColor) : TRGBTriple;
class function ColorToGrayscale(AColor : TColor) : TColor;
end;
type TGradientTools = class(TObject)
private
protected
public
class procedure HGradient(canvas : TCanvas; cStart,cEnd : TColor; rect : T2DIntRect); overload;
class procedure HGradient(canvas : TCanvas; cStart,cEnd : TColor; p1, p2 : TPoint); overload;
class procedure HGradient(canvas : TCanvas; cStart,cEnd : TColor; x1,y1,x2,y2 : integer); overload;
class procedure VGradient(canvas : TCanvas; cStart,cEnd : TColor; rect : T2DIntRect); overload;
class procedure VGradient(canvas : TCanvas; cStart,cEnd : TColor; p1, p2 : TPoint); overload;
class procedure VGradient(canvas : TCanvas; cStart,cEnd : TColor; x1,y1,x2,y2 : integer); overload;
class procedure Gradient(canvas : TCanvas; cStart,cEnd : TColor; rect : T2DIntRect; GradientType : TGradientType); overload;
class procedure Gradient(canvas : TCanvas; cStart,cEnd : TColor; p1, p2 : TPoint; GradientType : TGradientType); overload;
class procedure Gradient(canvas : TCanvas; cStart,cEnd : TColor; x1,y1,x2,y2 : integer; GradientType : TGradientType); overload;
class procedure HGradientLine(canvas : TCanvas; cBase, cShade : TColor; x1, x2 , y : integer; ShadeMode : TGradientLineShade);
class procedure VGradientLine(canvas : TCanvas; cBase, cShade : TColor; x, y1 , y2 : integer; ShadeMode : TGradientLineShade);
class procedure HGradient3dLine(canvas : TCanvas; x1,x2,y : integer; ShadeMode : TGradientLineShade; A3dKind : TGradient3dLine = glLowered);
class procedure VGradient3dLine(canvas : TCanvas; x,y1,y2 : integer; ShadeMode : TGradientLineShade; A3dKind : TGradient3dLine = glLowered);
end;
type TTextTools = class
private
protected
public
class procedure OutlinedText(Canvas : TCanvas; x, y : integer; text : string);
end;
implementation
{ TColorTools }
class function TColorTools.Darken(kolor : TColor; percentage : byte) : TColor;
var r,g,b : byte;
begin
r:=round(GetRValue(ColorToRGB(kolor))*(100-percentage)/100);
g:=round(GetGValue(ColorToRGB(kolor))*(100-percentage)/100);
b:=round(GetBValue(ColorToRGB(kolor))*(100-percentage)/100);
result:=rgb(r,g,b);
end;
class function TColorTools.Brighten(kolor : TColor; percentage : byte) : TColor;
var r,g,b : byte;
begin
r:=round(GetRValue(ColorToRGB(kolor))+( (255-GetRValue(ColorToRGB(kolor)))*(percentage/100) ));
g:=round(GetGValue(ColorToRGB(kolor))+( (255-GetGValue(ColorToRGB(kolor)))*(percentage/100) ));
b:=round(GetBValue(ColorToRGB(kolor))+( (255-GetBValue(ColorToRGB(kolor)))*(percentage/100) ));
result:=rgb(r,g,b);
end;
class function TColorTools.Shade(kol1,kol2 : TColor; percentage : byte) : TColor;
var r,g,b : byte;
begin
r:=round(GetRValue(ColorToRGB(kol1))+( (GetRValue(ColorToRGB(kol2))-GetRValue(ColorToRGB(kol1)))*(percentage/100) ));
g:=round(GetGValue(ColorToRGB(kol1))+( (GetGValue(ColorToRGB(kol2))-GetGValue(ColorToRGB(kol1)))*(percentage/100) ));
b:=round(GetBValue(ColorToRGB(kol1))+( (GetBValue(ColorToRGB(kol2))-GetBValue(ColorToRGB(kol1)))*(percentage/100) ));
result:=rgb(r,g,b);
end;
class function TColorTools.Shade(kol1,kol2 : TColor; Step : extended) : TColor;
var r,g,b : byte;
begin
r:=round(GetRValue(ColorToRGB(kol1))+( (GetRValue(ColorToRGB(kol2))-GetRValue(ColorToRGB(kol1)))*(Step) ));
g:=round(GetGValue(ColorToRGB(kol1))+( (GetGValue(ColorToRGB(kol2))-GetGValue(ColorToRGB(kol1)))*(Step) ));
b:=round(GetBValue(ColorToRGB(kol1))+( (GetBValue(ColorToRGB(kol2))-GetBValue(ColorToRGB(kol1)))*(Step) ));
result:=rgb(r,g,b);
end;
class function TColorTools.AddColors(c1, c2 : TColor) : TColor;
begin
result:=rgb(max( 0,min( 255,GetRValue(c1)+GetRValue(c2) ) ),
max( 0,min( 255,GetGValue(c1)+GetGValue(c2) ) ),
max( 0,min( 255,GetBValue(c1)+GetBValue(c2) ) ));
end;
class function TColorTools.MultiplyColors(c1, c2 : TColor) : TColor;
begin
result:=rgb(max( 0,min( 255,GetRValue(c1)*GetRValue(c2) ) ),
max( 0,min( 255,GetGValue(c1)*GetGValue(c2) ) ),
max( 0,min( 255,GetBValue(c1)*GetBValue(c2) ) ));
end;
class function TColorTools.MultiplyColor(color : TColor; scalar : integer) : TColor;
begin
result:=rgb(max( 0,min( 255,GetRValue(color)*scalar ) ),
max( 0,min( 255,GetGValue(color)*scalar ) ),
max( 0,min( 255,GetBValue(color)*scalar ) ));
end;
class function TColorTools.MultiplyColor(color : TColor; scalar : extended) : TColor;
begin
result:=rgb(max( 0,min( 255,round(GetRValue(color)*scalar) ) ),
max( 0,min( 255,round(GetGValue(color)*scalar) ) ),
max( 0,min( 255,round(GetBValue(color)*scalar) ) ));
end;
class function TColorTools.Percent(min, pos, max : integer) : byte;
begin
if max=min then result:=max else
result:=round((pos-min)*100/(max-min));
end;
{.$MESSAGE WARN 'Por�wnywanie liczb rzeczywistych? Trzeba poprawi�'}
class function TColorTools.RGB2HSL(ARGB : TRGBTriple) : THSLTriple;
var RGBmin, RGBmax : extended;
R, G, B : extended;
H, S, L : extended;
begin
R:=ARGB.rgbtRed/255;
G:=ARGB.rgbtGreen/255;
B:=ARGB.rgbtBlue/255;
RGBmin:=min(R,min(G,B));
RGBmax:=max(R,min(G,B));
H:=0;
if RGBmax=RGBmin then
begin
// H jest nieoznaczone, ale przyjmijmy zero dla sensowno�ci oblicze�
H:=0;
end else
if (R=RGBmax) and (G>=B) then
begin
H:=(pi/3)*((G-B)/(RGBmax-RGBmin))+0;
end else
if (R=RGBmax) and (G<B) then
begin
H:=(pi/3)*((G-B)/(RGBmax-RGBmin))+(2*pi);
end else
if (G=RGBmax) then
begin
H:=(pi/3)*((B-R)/(RGBmax-RGBmin))+(2*pi/3);
end else
if (B=RGBmax) then
begin
H:=(pi/3)*((R-G)/(RGBmax-RGBmin))+(4*pi/3);
end;
L:=(RGBmax+RGBmin)/2;
S:=0;
if (L<NUM_ZERO) or (rgbMin=rgbMax) then
begin
S:=0;
end else
if (L<=0.5) then
begin
S:=((RGBmax-RGBmin)/(2*L));
end else
if (L>0.5) then
begin
S:=((RGBmax-RGBmin)/(2-2*L));
end;
result.H:=H/(2*pi);
result.S:=S;
result.L:=L;
end;
class function TColorTools.HSL2RGB(AHSL : THSLTriple) : TRGBTriple;
var R, G, B : extended;
TR, TG, TB : extended;
Q, P : extended;
function ProcessColor(Tc : extended) : extended;
begin
if (Tc<(1/6)) then
result:=P+((Q-P)*6.0*Tc) else
if (Tc<(1/2)) then
result:=Q else
if (Tc<(2/3)) then
result:=P+((Q-P)*((2/3)-Tc)*6.0) else
result:=P;
end;
begin
if AHSL.S<NUM_ZERO then
begin
R:=AHSL.L;
G:=AHSL.L;
B:=AHSL.L;
end else
begin
if (AHSL.L<0.5) then
Q:=AHSL.L*(AHSL.S+1.0) else
Q:=AHSL.L+AHSL.S-(AHSL.L*AHSL.S);
P:=2.0*AHSL.L-Q;
TR:=AHSL.H+(1/3);
TG:=AHSL.H;
TB:=AHSL.H-(1/3);
if (TR<0) then TR:=TR+1 else
if (TR>1) then TR:=TR-1;
if (TG<0) then TG:=TG+1 else
if (TG>1) then TG:=TG-1;
if (TB<0) then TB:=TB+1 else
if (TB>1) then TB:=TB-1;
R:=ProcessColor(TR);
G:=ProcessColor(TG);
B:=ProcessColor(TB);
end;
result.rgbtRed:=round(255*R);
result.rgbtGreen:=round(255*G);
result.rgbtBlue:=round(255*B);
end;
class function TColorTools.RgbTripleToColor(ARgbTriple : TRGBTriple) : TColor;
begin
result:=rgb(ARgbTriple.rgbtRed,ARgbTriple.rgbtGreen,ARgbTriple.rgbtBlue);
end;
class function TColorTools.ColorToGrayscale(AColor: TColor): TColor;
var avg : byte;
begin
avg:=(GetRValue(Acolor) + GetGValue(AColor) + GetBValue(AColor)) div 3;
result:=rgb(avg,avg,avg);
end;
class function TColorTools.ColorToRgbTriple(AColor : TColor) : TRGBTriple;
begin
result.rgbtRed:=GetRValue(AColor);
result.rgbtGreen:=GetGValue(AColor);
result.rgbtBlue:=GetBValue(AColor);
end;
{ TGradientTools }
class procedure TGradientTools.HGradient(canvas : TCanvas; cStart,cEnd : TColor; rect : T2DIntRect);
var vert : array[0..1] of TRIVERTEX;
gRect : _GRADIENT_RECT;
Col1,Col2 : TColor;
begin
Col1:=ColorToRGB(cStart);
Col2:=ColorToRGB(cEnd);
with vert[0] do
begin
x:=rect.left;
y:=rect.top;
Red:=GetRValue(Col1) shl 8;
Green:=GetGValue(Col1) shl 8;
Blue:=GetBValue(Col1) shl 8;
Alpha:=0;
end;
with vert[1] do
begin
x:=rect.right;
y:=rect.bottom;
Red:=GetRValue(Col2) shl 8;
Green:=GetGValue(Col2) shl 8;
Blue:=GetBValue(Col2) shl 8;
Alpha:=0;
end;
gRect.UpperLeft:=0;
gRect.LowerRight:=1;
GradientFill(canvas.Handle,@vert,2,@gRect,1,GRADIENT_FILL_RECT_H);
end;
class procedure TGradientTools.HGradient(canvas : TCanvas; cStart,cEnd : TColor; p1, p2 : TPoint);
begin
HGradient(canvas,cstart,cend,rect(p1.x,p1.y,p2.x,p2.y));
end;
class procedure TGradientTools.HGradient(canvas : TCanvas; cStart,cEnd : TColor; x1,y1,x2,y2 : integer);
begin
HGradient(canvas,cstart,cend,rect(x1,y1,x2,y2));
end;
class procedure TGradientTools.VGradient(canvas : TCanvas; cStart,cEnd : TColor; rect : T2DIntRect);
var vert : array[0..1] of TRIVERTEX;
gRect : _GRADIENT_RECT;
Col1,Col2 : TColor;
begin
Col1:=ColorToRGB(cStart);
Col2:=ColorToRGB(cEnd);
with vert[0] do
begin
x:=rect.left;
y:=rect.top;
Red:=GetRValue(Col1) shl 8;
Green:=GetGValue(Col1) shl 8;
Blue:=GetBValue(Col1) shl 8;
Alpha:=0;
end;
with vert[1] do
begin
x:=rect.right;
y:=rect.bottom;
Red:=GetRValue(Col2) shl 8;
Green:=GetGValue(Col2) shl 8;
Blue:=GetBValue(Col2) shl 8;
Alpha:=0;
end;
gRect.UpperLeft:=0;
gRect.LowerRight:=1;
GradientFill(canvas.Handle,@vert,2,@gRect,1,GRADIENT_FILL_RECT_V);
end;
class procedure TGradientTools.VGradient(canvas : TCanvas; cStart,cEnd : TColor; p1, p2 : TPoint);
begin
VGradient(canvas,cstart,cend,rect(p1.x,p1.y,p2.x,p2.y));
end;
class procedure TGradientTools.VGradient(canvas : TCanvas; cStart,cEnd : TColor; x1,y1,x2,y2 : integer);
begin
VGradient(canvas,cstart,cend,rect(x1,y1,x2,y2));
end;
class procedure TGradientTools.Gradient(canvas : TCanvas; cStart,cEnd : TColor; rect : T2DIntRect; GradientType : TGradientType);
begin
if GradientType=gtVertical then VGradient(canvas, cStart, cEnd, rect) else
HGradient(canvas, cStart, cEnd, rect);
end;
class procedure TGradientTools.Gradient(canvas : TCanvas; cStart,cEnd : TColor; p1, p2 : TPoint; GradientType : TGradientType);
begin
if GradientType=gtVertical then VGradient(canvas, cStart, cEnd, p1, p2) else
HGradient(canvas, cStart, cEnd, p1, p2);
end;
class procedure TGradientTools.Gradient(canvas : TCanvas; cStart,cEnd : TColor; x1,y1,x2,y2 : integer; GradientType : TGradientType);
begin
if GradientType=gtVertical then VGradient(canvas, cStart, cEnd, x1, y1, x2, y2) else
HGradient(canvas, cStart, cEnd, x1, y1, x2, y2);
end;
class procedure TGradientTools.HGradientLine(canvas : TCanvas; cBase, cShade : TColor; x1, x2 , y : integer; ShadeMode : TGradientLineShade);
var i : integer;
begin
if x1=x2 then exit;
if x1>x2 then
begin
i:=x1;
x1:=x2;
x2:=i;
end;
case ShadeMode of
lsShadeStart : HGradient(canvas,cShade,cBase,rect(x1,y,x2,y+1));
lsShadeEnds : begin
i:=(x1+x2) div 2;
HGradient(canvas,cShade,cBase,rect(x1,y,i,y+1));
HGradient(canvas,cBase,cShade,rect(i,y,x2,y+1));
end;
lsShadeCenter : begin
i:=(x1+x2) div 2;
HGradient(canvas,cBase,cShade,rect(x1,y,i,y+1));
HGradient(canvas,cShade,cBase,rect(i,y,x2,y+1));
end;
lsShadeEnd : HGradient(canvas,cBase,cShade,rect(x1,y,x2,y+1));
end;
end;
class procedure TGradientTools.VGradientLine(canvas : TCanvas; cBase, cShade : TColor; x, y1 , y2 : integer; ShadeMode : TGradientLineShade);
var i : integer;
begin
if y1=y2 then exit;
if y1>y2 then
begin
i:=y1;
y1:=y2;
y2:=i;
end;
case ShadeMode of
lsShadeStart : VGradient(canvas,cShade,cBase,rect(x,y1,x+1,y2));
lsShadeEnds : begin
i:=(y1+y2) div 2;
VGradient(canvas,cShade,cBase,rect(x,y1,x+1,i));
VGradient(canvas,cBase,cShade,rect(x,i,x+1,y2));
end;
lsShadeCenter : begin
i:=(y1+y2) div 2;
VGradient(canvas,cBase,cShade,rect(x,y1,x+1,i));
VGradient(canvas,cShade,cBase,rect(x,i,x+1,y2));
end;
lsShadeEnd : VGradient(canvas,cBase,cShade,rect(x,y1,x+1,y2));
end;
end;
class procedure TGradientTools.HGradient3dLine(canvas : TCanvas; x1,x2,y : integer; ShadeMode : TGradientLineShade; A3dKind : TGradient3dLine = glLowered);
begin
if A3dKind = glRaised then
begin
HGradientLine(canvas,clBtnHighlight,clBtnFace,x1,x2,y,ShadeMode);
HGradientLine(canvas,clBtnShadow,clBtnFace,x1,x2,y+1,ShadeMode);
end else
begin
HGradientLine(canvas,clBtnShadow,clBtnFace,x1,x2,y,ShadeMode);
HGradientLine(canvas,clBtnHighlight,clBtnFace,x1,x2,y+1,ShadeMode);
end;
end;
class procedure TGradientTools.VGradient3dLine(canvas : TCanvas; x,y1,y2 : integer; ShadeMode : TGradientLineShade; A3dKind : TGradient3dLine = glLowered);
begin
if A3dKind = glLowered then
begin
VGradientLine(canvas,clBtnFace,clBtnHighlight,x,y1,y2,ShadeMode);
VGradientLine(canvas,clBtnFace,clBtnShadow,x+1,y1,y2,ShadeMode);
end else
begin
VGradientLine(canvas,clBtnFace,clBtnShadow,x,y1,y2,ShadeMode);
VGradientLine(canvas,clBtnFace,clBtnHighlight,x+1,y1,y2,ShadeMode);
end;
end;
{ TTextTools }
class procedure TTextTools.OutlinedText(Canvas : TCanvas; x, y : integer; text : string);
var TmpColor : TColor;
TmpBrushStyle : TBrushStyle;
begin
TmpColor:=Canvas.Font.color;
TmpBrushStyle:=Canvas.Brush.style;
Canvas.brush.style:=bsClear;
Canvas.font.color:=clBlack;
Canvas.TextOut(x-1,y,text);
Canvas.TextOut(x+1,y,text);
Canvas.TextOut(x,y-1,text);
Canvas.TextOut(x,y+1,text);
Canvas.font.color:=TmpColor;
Canvas.TextOut(x,y,text);
Canvas.Brush.Style:=TmpBrushStyle;
end;
end.

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

View File

@ -0,0 +1,368 @@
unit SpkToolbarEditor;
interface
uses Windows, Controls, Classes, DesignEditors, DesignIntf, TypInfo, Dialogs,
SysUtils,
spkToolbar, spkt_Tab, spkt_Pane, spkt_Appearance,
spkte_EditWindow, spkte_AppearanceEditor;
const PROPERTY_CONTENTS_NAME = 'Contents';
PROPERTY_CONTENTS_VALUE = 'Open editor...';
type TAddContentsFilter = class(TSelectionEditor, ISelectionPropertyFilter)
public
procedure FilterProperties(const ASelection: IDesignerSelections; const ASelectionProperties: IInterfaceList);
end;
type TSpkToolbarContentsEditor = class(TBasePropertyEditor, IProperty, IPropertyKind)
private
protected
FPropList : PInstPropList;
FPropCount : integer;
FDesigner : IDesigner;
FToolbar : TSpkToolbar;
procedure SetPropEntry(Index: Integer; AInstance: TPersistent;
APropInfo: PPropInfo); override;
procedure Initialize; override;
public
constructor Create(const ADesigner: IDesigner; APropCount: Integer); override;
destructor Destroy; override;
procedure Activate;
function AllEqual: Boolean;
function AutoFill: Boolean;
procedure Edit;
function HasInstance(Instance: TPersistent): Boolean;
function GetAttributes: TPropertyAttributes;
function GetEditLimit: Integer;
function GetEditValue(out Value: string): Boolean;
function GetName: string;
procedure GetProperties(Proc: TGetPropProc);
function GetPropInfo: PPropInfo;
function GetPropType: PTypeInfo;
function GetValue: string;
procedure GetValues(Proc: TGetStrProc);
procedure Revert;
procedure SetValue(const Value: string);
function ValueAvailable: Boolean;
function GetKind: TTypeKind;
property PropCount : integer read FPropCount;
property Designer : IDesigner read FDesigner;
property Toolbar : TSpkToolbar read FToolbar write FToolbar;
end;
type TSpkToolbarCaptionEditor = class(TStringProperty)
private
protected
public
procedure SetValue(const Value: string); override;
end;
type TSpkToolbarAppearanceEditor = class(TClassProperty)
private
protected
public
function GetAttributes: TPropertyAttributes; override;
procedure Edit; override;
end;
type TSpkToolbarEditor = class(TComponentEditor)
protected
procedure DoOpenContentsEditor;
public
procedure Edit; override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
var EditWindow : TfrmEditWindow;
implementation
{ TSpkToolbarEditor }
procedure TSpkToolbarContentsEditor.Activate;
begin
//
end;
function TSpkToolbarContentsEditor.AllEqual: Boolean;
begin
result:=FPropCount = 1;
end;
function TSpkToolbarContentsEditor.AutoFill: Boolean;
begin
result:=false;
end;
constructor TSpkToolbarContentsEditor.Create(const ADesigner: IDesigner;
APropCount: Integer);
begin
inherited Create(ADesigner, APropCount);
FDesigner:=ADesigner;
FPropCount:=APropCount;
FToolbar:=nil;
GetMem(FPropList, APropCount * SizeOf(TInstProp));
FillChar(FPropList^, APropCount * SizeOf(TInstProp), 0);
end;
destructor TSpkToolbarContentsEditor.Destroy;
begin
if FPropList <> nil then
FreeMem(FPropList, FPropCount * SizeOf(TInstProp));
inherited;
end;
procedure TSpkToolbarContentsEditor.Edit;
begin
EditWindow.SetData(FToolbar,self.Designer);
EditWindow.Show;
end;
function TSpkToolbarContentsEditor.GetAttributes: TPropertyAttributes;
begin
result:=[paDialog, paReadOnly];
end;
function TSpkToolbarContentsEditor.GetEditLimit: Integer;
begin
result:=0;
end;
function TSpkToolbarContentsEditor.GetEditValue(out Value: string): Boolean;
begin
Value:=GetValue;
result:=true;
end;
function TSpkToolbarContentsEditor.GetKind: TTypeKind;
begin
result:=tkClass;
end;
function TSpkToolbarContentsEditor.GetName: string;
begin
result:=PROPERTY_CONTENTS_NAME;
end;
procedure TSpkToolbarContentsEditor.GetProperties(Proc: TGetPropProc);
begin
//
end;
function TSpkToolbarContentsEditor.GetPropInfo: PPropInfo;
begin
Result:=nil;
end;
function TSpkToolbarContentsEditor.GetPropType: PTypeInfo;
begin
Result:=nil;
end;
function TSpkToolbarContentsEditor.GetValue: string;
begin
result:=PROPERTY_CONTENTS_VALUE;
end;
procedure TSpkToolbarContentsEditor.GetValues(Proc: TGetStrProc);
begin
//
end;
function TSpkToolbarContentsEditor.HasInstance(Instance: TPersistent): Boolean;
begin
result:=EditWindow.Toolbar = Instance;
end;
procedure TSpkToolbarContentsEditor.Initialize;
begin
inherited;
end;
procedure TSpkToolbarContentsEditor.Revert;
begin
//
end;
procedure TSpkToolbarContentsEditor.SetPropEntry(Index: Integer; AInstance: TPersistent;
APropInfo: PPropInfo);
begin
with FPropList^[Index] do
begin
Instance := AInstance;
PropInfo := APropInfo;
end;
end;
procedure TSpkToolbarContentsEditor.SetValue(const Value: string);
begin
//
end;
function TSpkToolbarContentsEditor.ValueAvailable: Boolean;
begin
result:=true;
end;
{ TSelectionFilter }
procedure TAddContentsFilter.FilterProperties(
const ASelection: IDesignerSelections;
const ASelectionProperties: IInterfaceList);
var ContentsEditor : TSpkToolbarContentsEditor;
Prop : IProperty;
i : integer;
Added : boolean;
begin
if ASelection.Count<>1 then
exit;
if ASelection[0] is TSpkToolbar then
begin
ContentsEditor:=TSpkToolbarContentsEditor.Create(inherited Designer, 1);
ContentsEditor.Toolbar:=ASelection[0] as TSpkToolbar;
i:=0;
Added:=false;
while (i<ASelectionProperties.Count) and not Added do
begin
ASelectionProperties.Items[i].QueryInterface(IProperty, Prop);
if (assigned(Prop)) and (Prop.GetName>PROPERTY_CONTENTS_NAME) then
begin
ASelectionProperties.Insert(i, ContentsEditor);
Added:=true;
end;
inc(i);
end;
if not(Added) then
ASelectionProperties.Add(ContentsEditor as IProperty);
end;
end;
{ TSpkToolbarEditor }
procedure TSpkToolbarEditor.DoOpenContentsEditor;
var Component : TComponent;
Toolbar : TSpkToolbar;
Designer : IDesigner;
begin
Component:=self.GetComponent;
if not(assigned(Component)) then
exit;
if not(Component is TSpkToolbar) then
exit;
Toolbar:=Component as TSpkToolbar;
Designer:=self.GetDesigner;
EditWindow.SetData(Toolbar,Designer);
EditWindow.Show;
end;
procedure TSpkToolbarEditor.Edit;
begin
DoOpenContentsEditor;
end;
procedure TSpkToolbarEditor.ExecuteVerb(Index: Integer);
begin
case Index of
0 : DoOpenContentsEditor;
end;
end;
function TSpkToolbarEditor.GetVerb(Index: Integer): string;
begin
case Index of
0 : result:='Contents editor...';
end;
end;
function TSpkToolbarEditor.GetVerbCount: Integer;
begin
result:=1;
end;
{ TSpkToolbarCaptionEditor }
procedure TSpkToolbarCaptionEditor.SetValue(const Value: string);
begin
inherited;
EditWindow.RefreshNames;
end;
{ TSpkToolbarAppearanceEditor }
procedure TSpkToolbarAppearanceEditor.Edit;
var Obj : TObject;
Toolbar : TSpkToolbar;
Tab : TSpkTab;
AppearanceEditor : tfrmAppearanceEditWindow;
begin
Obj:=GetComponent(0);
if Obj is TSpkToolbar then
begin
Toolbar:=(Obj as TSpkToolbar);
AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil);
try
AppearanceEditor.Appearance.Assign(Toolbar.Appearance);
if AppearanceEditor.ShowModal = mrOK then
begin
Toolbar.Appearance.Assign(AppearanceEditor.Appearance);
Modified;
end;
finally
AppearanceEditor.Free;
end;
end else
if Obj is TSpkTab then
begin
Tab:=(Obj as TSpkTab);
AppearanceEditor:=TfrmAppearanceEditWindow.Create(nil);
try
AppearanceEditor.Appearance.Assign(Tab.CustomAppearance);
if AppearanceEditor.ShowModal = mrOK then
begin
Tab.CustomAppearance.Assign(AppearanceEditor.Appearance);
Modified;
end;
finally
AppearanceEditor.Free;
end;
end;
end;
function TSpkToolbarAppearanceEditor.GetAttributes: TPropertyAttributes;
begin
result:=inherited GetAttributes + [paDialog] - [paMultiSelect];
end;
initialization
EditWindow:=TfrmEditWindow.create(nil);
finalization
EditWindow.Free;
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,740 @@
unit spkte_AppearanceEditor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls,
SpkGUITools, SpkXMLParser,
spkt_Buttons, spkt_BaseItem, spkt_Pane, spkt_Types, spkt_Tab, SpkToolbar,
spkt_Appearance;
type
TfrmAppearanceEditWindow = class(TForm)
gbPreview: TGroupBox;
tbPreview: TSpkToolbar;
SpkTab1: TSpkTab;
SpkPane1: TSpkPane;
SpkLargeButton1: TSpkLargeButton;
SpkLargeButton3: TSpkLargeButton;
SpkLargeButton2: TSpkLargeButton;
SpkPane2: TSpkPane;
SpkSmallButton1: TSpkSmallButton;
SpkSmallButton2: TSpkSmallButton;
SpkSmallButton3: TSpkSmallButton;
SpkPane3: TSpkPane;
SpkSmallButton4: TSpkSmallButton;
SpkSmallButton5: TSpkSmallButton;
SpkSmallButton6: TSpkSmallButton;
SpkSmallButton7: TSpkSmallButton;
SpkSmallButton8: TSpkSmallButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
Label2: TLabel;
pTabFrame: TPanel;
pTabGradientFrom: TPanel;
Label3: TLabel;
Label4: TLabel;
pTabGradientTo: TPanel;
cbTabGradientKind: TComboBox;
Label5: TLabel;
Label6: TLabel;
pTabHeaderFont: TPanel;
Label8: TLabel;
pPaneBorderDark: TPanel;
pPaneBorderLight: TPanel;
Label21: TLabel;
Label9: TLabel;
pPaneGradientFrom: TPanel;
pPaneGradientTo: TPanel;
Label10: TLabel;
Label11: TLabel;
cbPaneGradientKind: TComboBox;
pPaneCaptionBackground: TPanel;
Label12: TLabel;
Label13: TLabel;
pPaneCaptionFont: TPanel;
Label1: TLabel;
Label7: TLabel;
Label14: TLabel;
Label25: TLabel;
Label26: TLabel;
pItemFont: TPanel;
cbItemIdleGradientKind: TComboBox;
pItemIdleGradientTo: TPanel;
pItemIdleGradientFrom: TPanel;
pItemIdleFrame: TPanel;
Label27: TLabel;
Label28: TLabel;
pItemIdleCaptionColor: TPanel;
Label29: TLabel;
pItemIdleInnerDark: TPanel;
Label30: TLabel;
pItemIdleInnerLight: TPanel;
cbItemHottrackGradientKind: TComboBox;
pItemHottrackGradientTo: TPanel;
pItemHottrackGradientFrom: TPanel;
pItemHottrackFrame: TPanel;
Label15: TLabel;
pItemHottrackCaptionColor: TPanel;
pItemHottrackInnerDark: TPanel;
pItemHottrackInnerLight: TPanel;
cbItemActiveGradientKind: TComboBox;
pItemActiveGradientTo: TPanel;
pItemActiveGradientFrom: TPanel;
pItemActiveFrame: TPanel;
Label16: TLabel;
pItemActiveCaptionColor: TPanel;
pItemActiveInnerDark: TPanel;
pItemActiveInnerLight: TPanel;
bOK: TButton;
bCancel: TButton;
cdColorDialog: TColorDialog;
fdFontDialog: TFontDialog;
pTabHeaderFontColor: TPanel;
pPaneCaptionFontColor: TPanel;
TabSheet4: TTabSheet;
bImport: TButton;
bExport: TButton;
mXML: TMemo;
sTabRectangle: TShape;
cbLinkTab: TCheckBox;
sPaneRectangle: TShape;
cbLinkPane: TCheckBox;
cbLinkItem: TCheckBox;
sItemRectangle: TShape;
TabSheet5: TTabSheet;
Label17: TLabel;
bReset: TButton;
procedure pTabFrameClick(Sender: TObject);
procedure pTabGradientFromClick(Sender: TObject);
procedure pTabGradientToClick(Sender: TObject);
procedure pPaneBorderDarkClick(Sender: TObject);
procedure pPaneBorderLightClick(Sender: TObject);
procedure pPaneGradientFromClick(Sender: TObject);
procedure pPaneGradientToClick(Sender: TObject);
procedure pPaneCaptionBackgroundClick(Sender: TObject);
procedure pItemIdleFrameClick(Sender: TObject);
procedure pItemIdleGradientFromClick(Sender: TObject);
procedure pItemIdleGradientToClick(Sender: TObject);
procedure pItemIdleCaptionColorClick(Sender: TObject);
procedure pItemIdleInnerDarkClick(Sender: TObject);
procedure pItemIdleInnerLightClick(Sender: TObject);
procedure pItemHottrackFrameClick(Sender: TObject);
procedure pItemHottrackGradientFromClick(Sender: TObject);
procedure pItemHottrackGradientToClick(Sender: TObject);
procedure pItemHottrackCaptionColorClick(Sender: TObject);
procedure pItemHottrackInnerDarkClick(Sender: TObject);
procedure pItemHottrackInnerLightClick(Sender: TObject);
procedure pItemActiveFrameClick(Sender: TObject);
procedure pItemActiveGradientFromClick(Sender: TObject);
procedure pItemActiveGradientToClick(Sender: TObject);
procedure pItemActiveCaptionColorClick(Sender: TObject);
procedure pItemActiveInnerDarkClick(Sender: TObject);
procedure pItemActiveInnerLightClick(Sender: TObject);
procedure pTabHeaderFontClick(Sender: TObject);
procedure pPaneCaptionFontClick(Sender: TObject);
procedure pItemFontClick(Sender: TObject);
procedure cbTabGradientKindChange(Sender: TObject);
procedure cbPaneGradientKindChange(Sender: TObject);
procedure cbItemIdleGradientKindChange(Sender: TObject);
procedure cbItemHottrackGradientKindChange(Sender: TObject);
procedure cbItemActiveGradientKindChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure pTabHeaderFontColorClick(Sender: TObject);
procedure pPaneCaptionFontColorClick(Sender: TObject);
procedure bExportClick(Sender: TObject);
procedure bImportClick(Sender: TObject);
procedure cbLinkTabClick(Sender: TObject);
procedure cbLinkPaneClick(Sender: TObject);
procedure cbLinkItemClick(Sender: TObject);
procedure bResetClick(Sender: TObject);
private
{ Private declarations }
procedure SetLinkedFrameColor(AColor : TColor);
procedure SetLinkedGradientFromColor(AColor : TColor);
procedure SetLinkedGradientToColor(AColor : TColor);
procedure SetLinkedGradientKind(AKindIndex : integer);
function GetAppearance: TSpkToolbarAppearance;
procedure SetAppearance(const Value: TSpkToolbarAppearance);
procedure SwitchAttributesLink(const Value : boolean);
function ChangeColor(Panel : TPanel) : boolean;
procedure SetPanelColor(Panel: TPanel; AColor : TColor);
function ChangeFont(Panel : TPanel) : boolean;
procedure SetPanelFont(Panel : TPanel; AFont : TFont);
procedure SetComboGradientKind(Combo : TComboBox; GradientType : TBackgroundKind);
procedure LoadAppearance(AAppearance : TSpkToolbarAppearance);
public
property Appearance : TSpkToolbarAppearance read GetAppearance write SetAppearance;
{ Public declarations }
end;
var
frmAppearanceEditWindow: TfrmAppearanceEditWindow;
implementation
{$R *.dfm}
{ TForm3 }
procedure TfrmAppearanceEditWindow.SetAppearance(const Value: TSpkToolbarAppearance);
begin
tbPreview.Appearance.Assign(Value);
end;
procedure TfrmAppearanceEditWindow.SetComboGradientKind(Combo: TComboBox;
GradientType: TBackgroundKind);
begin
case GradientType of
bkSolid: Combo.itemindex:=0;
bkHorizontalGradient: Combo.itemindex:=1;
bkVerticalGradient: Combo.itemindex:=2;
bkConcave: Combo.itemindex:=3;
end;
end;
procedure TfrmAppearanceEditWindow.SetLinkedFrameColor(AColor: TColor);
begin
tbPreview.Appearance.Tab.BorderColor:=AColor;
SetPanelColor(pTabFrame, AColor);
tbPreview.Appearance.Pane.BorderDarkColor:=AColor;
SetPanelColor(pPaneBorderDark, AColor);
tbPreview.Appearance.Element.IdleFrameColor:=AColor;
SetPanelColor(pItemIdleFrame, AColor);
end;
procedure TfrmAppearanceEditWindow.SetLinkedGradientFromColor(AColor: TColor);
begin
tbPreview.Appearance.Tab.GradientFromColor:=AColor;
SetPanelColor(pTabGradientFrom, AColor);
tbPreview.Appearance.Pane.GradientFromColor:=AColor;
SetPanelColor(pPaneGradientFrom, AColor);
tbPreview.Appearance.Element.IdleGradientFromColor:=AColor;
SetPanelColor(pItemIdleGradientFrom, AColor);
end;
procedure TfrmAppearanceEditWindow.SetLinkedGradientKind(AKindIndex: integer);
var Kind : TBackgroundKind;
begin
case AKindIndex of
0 : Kind:=bkSolid;
1 : Kind:=bkHorizontalGradient;
2 : Kind:=bkVerticalGradient;
3 : Kind:=bkConcave;
else Kind:=bkSolid;
end;
tbPreview.Appearance.Tab.GradientType:=Kind;
SetComboGradientKind(cbTabGradientKind, Kind);
tbPreview.Appearance.Pane.GradientType:=Kind;
SetComboGradientKind(cbPaneGradientKind, Kind);
tbPreview.Appearance.Element.IdleGradientType:=Kind;
SetComboGradientKind(cbItemIdleGradientKind, Kind);
end;
procedure TfrmAppearanceEditWindow.SetLinkedGradientToColor(AColor: TColor);
begin
tbPreview.Appearance.Tab.GradientToColor:=AColor;
SetPanelColor(pTabGradientTo, AColor);
tbPreview.Appearance.Pane.GradientToColor:=AColor;
SetPanelColor(pPaneGradientTo, AColor);
tbPreview.Appearance.Element.IdleGradientToColor:=AColor;
SetPanelColor(pItemIdleGradientTo, AColor);
end;
procedure TfrmAppearanceEditWindow.SetPanelColor(Panel: TPanel; AColor : TColor);
begin
Panel.Color := AColor;
if Panel.Color<>AColor then
Showmessage('lipa!');
if (GetRValue(AColor) + GetGValue(AColor) + GetBValue(AColor)) div 3 >= 128 then
Panel.Font.Color := clBlack
else
Panel.Font.Color := clWhite;
Panel.Caption := '$' + IntToHex(AColor, 8);
end;
procedure TfrmAppearanceEditWindow.SetPanelFont(Panel: TPanel; AFont: TFont);
begin
Panel.Font.assign(AFont);
Panel.Caption:=AFont.Name+', '+inttostr(AFont.Size);
end;
procedure TfrmAppearanceEditWindow.SwitchAttributesLink(const Value: boolean);
begin
cbLinkTab.checked:=Value;
cbLinkPane.Checked:=Value;
cbLinkItem.Checked:=Value;
sTabRectangle.visible:=Value;
sPaneRectangle.Visible:=Value;
sItemRectangle.Visible:=Value;
end;
procedure TfrmAppearanceEditWindow.cbItemHottrackGradientKindChange(Sender: TObject);
begin
case (Sender as TCombobox).ItemIndex of
0 : tbPreview.Appearance.Element.HottrackGradientType:=bkSolid;
1 : tbPreview.Appearance.Element.HottrackGradientType:=bkHorizontalGradient;
2 : tbPreview.Appearance.Element.HottrackGradientType:=bkVerticalGradient;
3 : tbPreview.Appearance.Element.HottrackGradientType:=bkConcave;
end;
end;
procedure TfrmAppearanceEditWindow.cbItemIdleGradientKindChange(Sender: TObject);
begin
case (Sender as TCombobox).ItemIndex of
0 : tbPreview.Appearance.Element.IdleGradientType:=bkSolid;
1 : tbPreview.Appearance.Element.IdleGradientType:=bkHorizontalGradient;
2 : tbPreview.Appearance.Element.IdleGradientType:=bkVerticalGradient;
3 : tbPreview.Appearance.Element.IdleGradientType:=bkConcave;
end;
if cbLinkItem.Checked then
SetLinkedGradientKind((Sender as TComboBox).ItemIndex);
end;
procedure TfrmAppearanceEditWindow.cbLinkItemClick(Sender: TObject);
begin
SwitchAttributesLink(cbLinkItem.Checked);
end;
procedure TfrmAppearanceEditWindow.cbLinkPaneClick(Sender: TObject);
begin
SwitchAttributesLink(cbLinkPane.Checked);
end;
procedure TfrmAppearanceEditWindow.cbLinkTabClick(Sender: TObject);
begin
SwitchAttributesLink(cbLinkTab.Checked);
end;
procedure TfrmAppearanceEditWindow.cbTabGradientKindChange(Sender: TObject);
begin
case (Sender as TCombobox).ItemIndex of
0 : tbPreview.Appearance.Tab.GradientType:=bkSolid;
1 : tbPreview.Appearance.Tab.GradientType:=bkHorizontalGradient;
2 : tbPreview.Appearance.Tab.GradientType:=bkVerticalGradient;
3 : tbPreview.Appearance.Tab.GradientType:=bkConcave;
end;
if cbLinkTab.Checked then
SetLinkedGradientKind((Sender as TComboBox).ItemIndex);
end;
function TfrmAppearanceEditWindow.ChangeColor(Panel: TPanel): boolean;
begin
cdColorDialog.Color:=Panel.Color;
if cdColorDialog.Execute then
begin
SetPanelColor(Panel, cdColorDialog.Color);
result:=true
end
else
result:=false;
end;
function TfrmAppearanceEditWindow.ChangeFont(Panel: TPanel): boolean;
begin
fdFontDialog.Font.assign(Panel.font);
if fdFontDialog.Execute then
begin
SetPanelFont(Panel, fdFontDialog.Font);
result:=true;
end
else
result:=false;
end;
procedure TfrmAppearanceEditWindow.FormShow(Sender: TObject);
begin
LoadAppearance(tbPreview.Appearance);
end;
function TfrmAppearanceEditWindow.GetAppearance: TSpkToolbarAppearance;
begin
result:=tbPreview.Appearance;
end;
procedure TfrmAppearanceEditWindow.LoadAppearance(AAppearance: TSpkToolbarAppearance);
begin
with AAppearance do
begin
with Tab do
begin
SetPanelColor(pTabFrame, BorderColor);
SetPanelColor(pTabGradientFrom, GradientFromColor);
SetPanelColor(pTabGradientTo, GradientToColor);
SetComboGradientKind(cbTabGradientKind, GradientType);
SetPanelFont(pTabHeaderFont, TabHeaderFont);
SetPanelColor(pTabHeaderFontColor, TabHeaderFont.Color);
end;
with Pane do
begin
SetPanelColor(pPaneBorderDark, BorderDarkColor);
SetPanelColor(pPaneBorderLight, BorderLightColor);
SetPanelColor(pPaneGradientFrom, GradientFromColor);
SetPanelColor(pPaneGradientTo, GradientToColor);
SetComboGradientKind(cbPaneGradientKind, GradientType);
SetPanelColor(pPaneCaptionBackground, CaptionBgColor);
SetPanelFont(pPaneCaptionFont, CaptionFont);
SetPanelColor(pPaneCaptionFontColor, CaptionFont.Color);
end;
with Element do
begin
SetPanelFont(pItemFont, CaptionFont);
SetPanelColor(pItemIdleFrame, IdleFrameColor);
SetPanelColor(pItemIdleGradientFrom, IdleGradientFromColor);
SetPanelColor(pItemIdleGradientTo, IdleGradientToColor);
SetComboGradientKind(cbItemIdleGradientKind, IdleGradientType);
SetPanelColor(pItemIdleCaptionColor, IdleCaptionColor);
SetPanelColor(pItemIdleInnerDark, IdleInnerDarkColor);
SetPanelColor(pItemIdleInnerLight, IdleInnerLightColor);
SetPanelColor(pItemHottrackFrame, HottrackFrameColor);
SetPanelColor(pItemHottrackGradientFrom, HottrackGradientFromColor);
SetPanelColor(pItemHottrackGradientTo, HottrackGradientToColor);
SetComboGradientKind(cbItemHottrackGradientKind, HottrackGradientType);
SetPanelColor(pItemHottrackCaptionColor, HottrackCaptionColor);
SetPanelColor(pItemHottrackInnerDark, HottrackInnerDarkColor);
SetPanelColor(pItemHottrackInnerLight, HottrackInnerLightColor);
SetPanelColor(pItemActiveFrame, ActiveFrameColor);
SetPanelColor(pItemActiveGradientFrom, ActiveGradientFromColor);
SetPanelColor(pItemActiveGradientTo, ActiveGradientToColor);
SetComboGradientKind(cbItemActiveGradientKind, ActiveGradientType);
SetPanelColor(pItemActiveCaptionColor, ActiveCaptionColor);
SetPanelColor(pItemActiveInnerDark, ActiveInnerDarkColor);
SetPanelColor(pItemActiveInnerLight, ActiveInnerLightColor);
end;
end;
end;
procedure TfrmAppearanceEditWindow.pItemActiveCaptionColorClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.ActiveCaptionColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemActiveFrameClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.ActiveFrameColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemActiveGradientFromClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.ActiveGradientFromColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.bExportClick(Sender: TObject);
var Xml : TSpkXMLParser;
Node : TSpkXMLNode;
begin
XML:=TSpkXMLParser.Create;
try
Node:=XML['Appearance',true];
tbPreview.Appearance.SaveToXML(Node);
mXML.Clear;
mXml.Text:=XML.Generate;
finally
XML.Free;
end;
end;
procedure TfrmAppearanceEditWindow.bImportClick(Sender: TObject);
var XML : TSpkXMLParser;
Node: TSpkXMLNode;
begin
tbPreview.BeginUpdate;
XML:=TSpkXMLParser.Create;
try
XML.Parse(PChar(mXML.text));
Node:=XML['Appearance',false];
if assigned(Node) then
tbPreview.Appearance.LoadFromXML(Node);
LoadAppearance(tbPreview.Appearance);
finally
XML.Free;
tbPreview.EndUpdate;
tbPreview.ForceRepaint;
end;
end;
procedure TfrmAppearanceEditWindow.bResetClick(Sender: TObject);
begin
tbPreview.Appearance.Reset;
LoadAppearance(tbPreview.Appearance);
end;
procedure TfrmAppearanceEditWindow.cbItemActiveGradientKindChange(Sender: TObject);
begin
case (Sender as TCombobox).ItemIndex of
0 : tbPreview.Appearance.Element.ActiveGradientType:=bkSolid;
1 : tbPreview.Appearance.Element.ActiveGradientType:=bkHorizontalGradient;
2 : tbPreview.Appearance.Element.ActiveGradientType:=bkVerticalGradient;
3 : tbPreview.Appearance.Element.ActiveGradientType:=bkConcave;
end;
end;
procedure TfrmAppearanceEditWindow.pItemActiveGradientToClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.ActiveGradientToColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemActiveInnerDarkClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.ActiveInnerDarkColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemActiveInnerLightClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.ActiveInnerLightColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemHottrackCaptionColorClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.HotTrackCaptionColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemHottrackFrameClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.HotTrackFrameColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemHottrackGradientFromClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.HotTrackGradientFromColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemHottrackGradientToClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.HotTrackGradientToColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemHottrackInnerDarkClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.HotTrackInnerDarkColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemHottrackInnerLightClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.HotTrackInnerLightColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemIdleCaptionColorClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.IdleCaptionColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemIdleFrameClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Element.IdleFrameColor:=(Sender as TPanel).Color;
if cbLinkItem.Checked then
SetLinkedFrameColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pItemIdleGradientFromClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Element.IdleGradientFromColor:=(Sender as TPanel).Color;
if cbLinkItem.Checked then
SetLinkedGradientFromColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pItemIdleGradientToClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Element.IdleGradientToColor:=(Sender as TPanel).Color;
if cbLinkItem.Checked then
SetLinkedGradientToColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pItemIdleInnerDarkClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.IdleInnerDarkColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemIdleInnerLightClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Element.IdleInnerLightColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pItemFontClick(Sender: TObject);
begin
if ChangeFont(Sender as TPanel) then
tbPreview.Appearance.Element.CaptionFont.Assign((Sender as TPanel).Font);
tbPreview.ForceRepaint;
end;
procedure TfrmAppearanceEditWindow.pPaneBorderDarkClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Pane.BorderDarkColor:=(Sender as TPanel).Color;
if cbLinkPane.Checked then
SetLinkedFrameColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pPaneBorderLightClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Pane.BorderLightColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pPaneCaptionBackgroundClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
tbPreview.Appearance.Pane.CaptionBgColor:=(Sender as TPanel).Color;
end;
procedure TfrmAppearanceEditWindow.pPaneCaptionFontClick(Sender: TObject);
begin
if ChangeFont(Sender as TPanel) then
tbPreview.Appearance.Pane.CaptionFont.Assign((Sender as TPanel).Font);
tbPreview.ForceRepaint;
end;
procedure TfrmAppearanceEditWindow.pPaneCaptionFontColorClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Pane.CaptionFont.Color:=((Sender as TPanel).Color);
pPaneCaptionFont.Font.color:=((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pPaneGradientFromClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Pane.GradientFromColor:=(Sender as TPanel).Color;
if cbLinkPane.Checked then
SetLinkedGradientFromColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.cbPaneGradientKindChange(Sender: TObject);
begin
case (Sender as TCombobox).ItemIndex of
0 : tbPreview.Appearance.Pane.GradientType:=bkSolid;
1 : tbPreview.Appearance.Pane.GradientType:=bkHorizontalGradient;
2 : tbPreview.Appearance.Pane.GradientType:=bkVerticalGradient;
3 : tbPreview.Appearance.Pane.GradientType:=bkConcave;
end;
if cbLinkPane.Checked then
SetLinkedGradientKind((Sender as TComboBox).ItemIndex);
end;
procedure TfrmAppearanceEditWindow.pPaneGradientToClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Pane.GradientToColor:=(Sender as TPanel).Color;
if cbLinkPane.Checked then
SetLinkedGradientToColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pTabFrameClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Tab.BorderColor:=(Sender as TPanel).Color;
if cbLinkTab.checked then
SetLinkedFrameColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pTabGradientFromClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Tab.GradientFromColor:=(Sender as TPanel).Color;
if cbLinkTab.Checked then
SetLinkedGradientFromColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pTabGradientToClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Tab.GradientToColor:=(Sender as TPanel).Color;
if cbLinkTab.Checked then
SetLinkedGradientToColor((Sender as TPanel).Color);
end;
end;
procedure TfrmAppearanceEditWindow.pTabHeaderFontClick(Sender: TObject);
begin
if ChangeFont(Sender as TPanel) then
tbPreview.Appearance.Tab.TabHeaderFont.Assign((Sender as TPanel).Font);
tbPreview.ForceRepaint;
end;
procedure TfrmAppearanceEditWindow.pTabHeaderFontColorClick(Sender: TObject);
begin
if ChangeColor(Sender as TPanel) then
begin
tbPreview.Appearance.Tab.TabHeaderFont.Color:=((Sender as TPanel).Color);
pTabHeaderFont.Font.color:=((Sender as TPanel).Color);
end;
end;
end.

View File

@ -0,0 +1,782 @@
object frmEditWindow: TfrmEditWindow
Left = 457
Top = 186
Caption = 'Toolbar contents editor'
ClientHeight = 368
ClientWidth = 341
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnActivate = FormActivate
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object tvStructure: TTreeView
Left = 0
Top = 28
Width = 341
Height = 340
Align = alClient
HideSelection = False
Images = ilTreeImages
Indent = 19
MultiSelectStyle = []
PopupMenu = pmStructure
RightClickSelect = True
TabOrder = 0
OnChange = tvStructureChange
OnEdited = tvStructureEdited
OnKeyDown = tvStructureKeyDown
ExplicitLeft = 3
ExplicitTop = 31
end
object tbToolBar: TToolBar
AlignWithMargins = True
Left = 3
Top = 3
Width = 335
Height = 22
Caption = 'tbToolBar'
DrawingStyle = dsGradient
Images = ilActionImages
Indent = 4
ParentShowHint = False
ShowHint = True
TabOrder = 1
object tbAddTab: TToolButton
Left = 4
Top = 0
Action = aAddTab
end
object tbRemoveTab: TToolButton
Left = 27
Top = 0
Action = aRemoveTab
end
object ToolButton3: TToolButton
Left = 50
Top = 0
Width = 8
Caption = 'ToolButton3'
ImageIndex = 2
Style = tbsSeparator
end
object tbAddPane: TToolButton
Left = 58
Top = 0
Action = aAddPane
end
object tbRemovePane: TToolButton
Left = 81
Top = 0
Action = aRemovePane
end
object ToolButton6: TToolButton
Left = 104
Top = 0
Width = 8
Caption = 'ToolButton6'
ImageIndex = 4
Style = tbsSeparator
end
object tbAddItem: TToolButton
Left = 112
Top = 0
Action = aAddLargeButton
DropdownMenu = pmAddItem
Style = tbsDropDown
end
object tbRemoveItem: TToolButton
Left = 150
Top = 0
Action = aRemoveItem
end
object ToolButton9: TToolButton
Left = 173
Top = 0
Width = 8
Caption = 'ToolButton9'
ImageIndex = 6
Style = tbsSeparator
end
object tbMoveUp: TToolButton
Left = 181
Top = 0
Action = aMoveUp
end
object tbMoveDown: TToolButton
Left = 204
Top = 0
Action = aMoveDown
end
end
object ilTreeImages: TImageList
Left = 8
Top = 32
Bitmap = {
494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000400000001000000001002000000000000010
000000000000000000000000000000000000F7ECE300F7ECE300F7ECE300F7EC
E300F7ECE300F7ECE300F7ECE300F7ECE300F7ECE300F7ECE300F7ECE300F7EC
E300F7ECE300F7ECE300F7ECE300F7ECE3000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000F8D2B300F7ECE300F7ECE300F7EC
E300F7ECE300F7ECE300F7ECE300F7ECE300F7ECE300F7ECE300F7ECE300F7EC
E300F7ECE300F7ECE300F8D2B300ECC2A00000000000D5B49400BC997600BC99
7600BC997600BC997600BC997600BC997600BC997600BC997600BC997600BC99
7600BC997600BC997600D5B4940000000000000000000000000000000000B791
6B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B791
6B00B7916B000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000EBC59400F8D2B400F6EBE200F7EC
E300F7EBE300F7EBE300F6EBE200F7EBE300F6EBE300F6EBE200F6ECE300F7EB
E300F7EBE300F8D2B400EBC5940000000000D2AF8E00B9967300FDE8D500FFF0
E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0
E200FFF0E200FDE8D500B9967300D2AF8E000000000000000000B7916B00FFED
DF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFED
DF00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000ECC1A000F8EDE500F8ED
E500F8EDE400F8EDE500F8EDE500F8EDE500F8EDE500F8EDE500F8EDE500F8EC
E500F8EDE500ECC1A0000000000000000000B9947000FDE5D200EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FDE5D200B99470000000000000000000B7916B00FFED
DF00F1C9A200F0CAA100F1C9A200F0C9A100F0C9A200F1C9A100F0CAA100F1C9
A100FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000E2B28E00F9EFE700F9EE
E600F9EFE700F9EFE700F9EEE700F9EEE700F9EFE700F9EFE700F9EEE700F9EF
E700F9EEE700E2B28E000000000000000000B7916B00FFEDDF00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FFEDDF00B7916B000000000000000000B7916B00FFED
DF00EEC49C00EEC49C00EEC59C00EEC49B00EEC49B00EEC49B00EEC49B00EFC4
9C00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000E2B28E00FAF0E800FAF0
E900FAF1E900FAF0E800FAF1E800FBF0E900FAF0E900FAF0E800FAF0E800FAF1
E900FAF0E900E2B28E000000000000000000B7916B00FFEDDF00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FFEDDF00B7916B000000000000000000B7916B00FFED
DF00ECBF9600EBBF9600EBBF9600ECBF9600ECBF9600EBBF9600ECBF9500ECBF
9600FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000E2B28E00FBF2EB00FBF2
EA00FBF1EB00FBF2EB00FBF2EB00FBF2EA00FCF2EB00FBF1EB00FBF1EB00FBF2
EB00FBF1EA00E2B28E000000000000000000B7916B00FFEDDF00F2CCA400F2CC
A400F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CC
A400F2CCA400F2CCA400FFEDDF00B7916B000000000000000000B7916B00FFED
DF00E9B99000E9BA9000E9BA9100E9BA9100E9BA9000E9BA9000E9BA9000E9BA
9000FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000E2B28E00FCF3ED00FCF4
ED00FDF3ED00FCF3ED00FCF4ED00FCF3ED00FDF3ED00FCF3ED00FCF4ED00FCF3
ED00FCF4ED00E2B28E000000000000000000B7916B00FFEDDF00EABF9400EABF
9400EABF9400EABF9400EABF9400EABF9400EABF9400EABF9400EABF9400EABF
9400EABF9400EABF9400FFEDDF00B7916B000000000000000000B7916B00FFED
DF00E6B48A00E6B58A00E7B48A00E6B48A00E6B58B00E6B58A00E7B58B00E7B5
8A00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000ECC1A000FBEDC600FEF5
EF00FDF6EE00FDF5EF00FDF5EF00FEF6EF00FDF6EF00FDF5EF00FDF5EF00FEF5
EF00FBEDC600ECC1A0000000000000000000B7916B00FFEDDF00E5B18900E5B1
8900E5B18900E5B18900E5B18900E5B18900E5B18900E5B18900E5B18900E5B1
8900E5B18900E5B18900FFEDDF00B7916B000000000000000000B7916B00FFED
DF00E4B08500E4B08500E4AF8500E4B08500E4B08500E4AF8500E4AF8500E4B0
8500FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000F8D2B400EBC59400F9EA
D900FFF6F000FEF6F000FEF6F000FEF6F000FEF6F000FEF6F000FFF6F000F9EA
D900EBC59400F8D2B4000000000000000000B7916B00FFEDDF00E2AC8100E2AC
8100E2AC8100E2AC8100E2AC8100E2AC8100E2AC8100E2AC8100E2AC8100E2AC
8100E2AC8100E2AC8100FFEDDF00B7916B000000000000000000B7916B00FFED
DF00E2AC8100E2AC8100E2AC8100E2AC8100E2AC8100E1AC8000E2AC8100E2AC
8100FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000F8D2B300ECC2
A000E5B89700E5B89700E5B89700E5B89700E5B89700E5B89700E5B89700ECC2
A000F8D2B300000000000000000000000000B7916B00FFEDDF00E8B48B00E8B4
8B00E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B4
8B00E8B48B00E8B48B00FFEDDF00B7916B000000000000000000B7916B00FFED
DF00E7B68C00E7B68C00E7B68C00E7B68C00E7B68C00E7B68C00E7B68C00E7B6
8C00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000B9947000FDE5D200E8B48B00E8B4
8B00E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B4
8B00E8B48B00E8B48B00FDE5D200B99470000000000000000000B7916B00FFED
DF00E9BA9100E9BA9100E9BA9100E9BA9100E9BA9100E9BA9100E9BA9100E9BA
9100FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000D2AF8E00B9967300FDE8D500FFF0
E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0
E200FFF0E200FDE8D500B9967300D2AF8E000000000000000000B7916B00FFED
DF00EEC49B00EEC49B00EEC49B00EEC49B00EEC49B00EEC49B00EEC49B00EEC4
9B00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000D5B49400BC997600BC99
7600BC997600BC997600BC997600BC997600BC997600BC997600BC997600BC99
7600BC997600BC997600D5B49400000000000000000000000000B7916B00FFED
DF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFED
DF00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000B791
6B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B791
6B00B7916B000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000100000000100010000000000800000000000000000000000
000000000000000000000000FFFFFF000000FFFFFFFF000000008001E0070000
00010000C003000080030000C003000080030000C003000080030000C0030000
80030000C003000080030000C003000080030000C003000080030000C0030000
C0070000C0030000FFFF0000C0030000FFFF0000C0030000FFFF8001C0030000
FFFFFFFFE0070000FFFFFFFFFFFF000000000000000000000000000000000000
000000000000}
end
object ilActionImages: TImageList
Left = 40
Top = 32
Bitmap = {
494C010108000C00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
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
0000D0966B00D0966B00D0966B00D0966B00D0966B00D0966B00D0966B000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000D0966B000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000B791
6B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B791
6B00B7916B00000000000000000000000000000000000000000000000000B791
6B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B791
6B00B7916B000000000000000000000000000000000000000000000000000000
0000D0966B00E8DACE00E8DACE00E8DACE00E8DACE00E7DACE00D0966B000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000D0966B00F0E6DE00D0966B0000000000000000000000
0000000000000000000000000000000000000000000000000000B7916B00FFED
DF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFED
DF00FFEDDF00B7916B0000000000000000000000000000000000B7916B00FFED
DF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFEDDF00FFED
DF00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000D0966B00D0966B00D0966B00D0966B00D0966B00D0966B00D0966B000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000D0966B00F0E6DE00F0E6DE00F0E6DE00D0966B00000000000000
0000000000000000000000000000000000000000000000000000B7916B00FFED
DF00F1C9A200F0CAA100F1C9A200F0C9A100F0C9A200F1C9A100F0CAA100F1C9
A100FFEDDF00B7916B0000000000000000000000000000000000B7916B00FFED
DF00F1C9A200F0CAA100F1C9A200F0C9A100F0C9A200F1C9A100F0CAA100F1C9
A100FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000D0966B00F0E5DE00F0E5DE00F0E5DE00F0E5DE00F0E5DE00D0966B000000
0000000000000000000000000000000000000000000000000000B7916B00FFED
DF00EEC49C00EEC49C00EEC59C00EEC49B00EEC49B00EEC49B00EEC49B00EFC4
9C00FFEDDF00B7916B0000000000000000000000000000000000B7916B00FFED
DF00EEC49C00EEC49C00EEC59C00EEC49B00EEC49B00EEC49B00EEC49B00EFC4
9C00FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000D0966B00D0966B00D0966B00D0966B00D0966B00D0966B00D0966B000000
000000000000000000000000000000000000000000000000000000000000D096
6B00EEE4DC00EEE4DC00EFE4DC00EEE4DB00EFE4DC00EFE4DC00EFE4DC00D096
6B00000000000000000000000000000000000000000000000000B7916B00FFED
DF000235CC00EBBF9600EBBF9600ECBF9600ECBF9600EBBF9600ECBF9500ECBF
9600FFEDDF00B7916B0000000000000000000000000000000000B7916B00FFED
DF00ECBF9600EBBF9600EBBF9600ECBF9600ECBF9600EBBF9600ECBF9500ECBF
9600FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000D0966B00EBDED400EADFD400EADED400EBDED400EBDED400D0966B000000
0000000000000000000000000000000000000000000000000000D0966B00EEE3
DB00EEE3DB00EEE3DB00EEE3DA00EEE3DB00EEE4DA00EEE3DA00EEE3DA00EEE3
DA00D0966B000000000000000000000000000000000000000000B7916B00FFED
DF000235CC00E9BA9000E9BA9100E9BA9100E9BA9000E9BA9000E9BA9000E9BA
9000FFEDDF00B7916B0000000000000000000000000000000000B7916B00FFED
DF00E9B99000E9BA9000E9BA9100E9BA9100E9BA9000E9BA9000E9BA9000E9BA
9000FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000D0966B00ECE0D600ECDFD500ECDFD600ECDFD600ECE0D500D0966B000000
00000000000000000000000000000000000000000000D0966B00EDE2D800EDE2
D800EDE2D900EDE2D900EDE2D900EDE2D800EDE2D900EDE2D900EDE2D800EDE2
D800EDE2D800D0966B000000000000000000000000000468FF00B7916B00FFED
DF000235CC00E6B58A00E7B48A000436CD00E6B58B00E6B58A00E7B58B00E7B5
8A00FFEDDF00B7916B0000000000000000001A47D200002EC300000D8F00000D
8F00E6B48A00000D8F00000D8F00000D8F00000D8F00E6B58A00E7B58B00E7B5
8A00FFEDDF00B7916B00000000000000000000000000D0966B00D0966B00D096
6B00D0966B00EDE1D700EDE1D700ECE1D700ECE1D700EDE1D700D0966B00D096
6B00D0966B00D0966B00000000000000000000000000D0966B00D0966B00D096
6B00D0966B00EDE1D700EDE1D700ECE1D700ECE1D700EDE1D700D0966B00D096
6B00D0966B00D0966B00000000000000000000000000000000000436CD00FFED
DF000235CC00E4B085000267FF00E4B08500E4B08500E4AF8500E4AF8500E4B0
8500FFEDDF00B7916B00000000000000000000000000466BDD001947D200000D
8F00E4B08500000D8F00001094001C299E00E4B08500E4AF8500E4AF8500E4B0
8500FFEDDF00B7916B00000000000000000000000000D0966B00EDE2D800EDE2
D800EDE2D900EDE2D900EDE2D900EDE2D800EDE2D900EDE2D900EDE2D800EDE2
D800EDE2D800D0966B0000000000000000000000000000000000000000000000
0000D0966B00ECE0D600ECDFD500ECDFD600ECDFD600ECE0D500D0966B000000
0000000000000000000000000000000000000000000000000000B7916B000267
FF000235CC000267FF00E2AC8100E2AC8100E2AC8100E1AC8000E2AC8100E2AC
8100FFEDDF00B7916B00000000000000000000000000000000005D7DE3000025
B6000012970000159C00001FAC00E2AC8100E2AC8100E1AC8000E2AC8100E2AC
8100FFEDDF00B7916B0000000000000000000000000000000000D0966B00EEE3
DB00EEE3DB00EEE3DB00EEE3DA00EEE3DB00EEE4DA00EEE3DA00EEE3DA00EEE3
DA00D0966B000000000000000000000000000000000000000000000000000000
0000D0966B00EBDED400EADFD400EADED400EBDED400EBDED400D0966B000000
000000000000000000000000000000000000000000000235CC000235CC000033
CC0033CCFF000234CC000234CC000234CC00E7B68C00E7B68C00E7B68C00E7B6
8C00FFEDDF00B7916B0000000000000000000000000000000000B7916B002752
D600002CC0000019A200E7B68C00E7B68C00E7B68C00E7B68C00E7B68C00E7B6
8C00FFEDDF00B7916B000000000000000000000000000000000000000000D096
6B00EEE4DC00EEE4DC00EFE4DC00EEE4DB00EFE4DC00EFE4DC00EFE4DC00D096
6B00000000000000000000000000000000000000000000000000000000000000
0000D0966B00D0966B00D0966B00D0966B00D0966B00D0966B00D0966B000000
0000000000000000000000000000000000000000000000000000B7916B000267
FF000235CC000267FF00E9BA9100E9BA9100E9BA9100E9BA9100E9BA9100E9BA
9100FFEDDF00B7916B0000000000000000000000000000000000B7916B002F59
D8000033CC0000119500E9BA9100E9BA9100E9BA9100E9BA9100E9BA9100E9BA
9100FFEDDF00B7916B0000000000000000000000000000000000000000000000
0000D0966B00F0E5DE00F0E5DE00F0E5DE00F0E5DE00F0E5DE00D0966B000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000468FF00FFED
DF000235CC00EEC49B000468FF00EEC49B00EEC49B00EEC49B00EEC49B00EEC4
9B00FFEDDF00B7916B00000000000000000000000000000000000C3DCF002D57
D7002F59D8001242D100000D8F00EEC49B00EEC49B00EEC49B00EEC49B00EEC4
9B00FFEDDF00B7916B0000000000000000000000000000000000000000000000
000000000000D0966B00F0E6DE00F0E6DE00F0E6DE00D0966B00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000D0966B00D0966B00D0966B00D0966B00D0966B00D0966B00D0966B000000
000000000000000000000000000000000000000000000436CD00B7916B00FFED
DF000235CC00FFEDDF00FFEDDF000436CD00FFEDDF00FFEDDF00FFEDDF00FFED
DF00FFEDDF00B7916B000000000000000000000000002D57D700325BD800355D
D900FFEDDF005073E0000020AE00000D8F00FFEDDF00FFEDDF00FFEDDF00FFED
DF00FFEDDF00B7916B0000000000000000000000000000000000000000000000
00000000000000000000D0966B00F0E6DE00D0966B0000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000D0966B00E8DACE00E8DACE00E8DACE00E8DACE00E7DACE00D0966B000000
000000000000000000000000000000000000000000000000000000000000B791
6B000235CC00B7916B00B7916B00B7916B00B7916B00B7916B00B7916B00B791
6B00B7916B000000000000000000000000004B6FDF005879E2004E71DF00365E
DA00B7916B005C7DE300335CD9000030C700001BA600B7916B00B7916B00B791
6B00B7916B000000000000000000000000000000000000000000000000000000
0000000000000000000000000000D0966B000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000D0966B00D0966B00D0966B00D0966B00D0966B00D0966B00D0966B000000
0000000000000000000000000000000000000000000000000000000000000000
00000235CC000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000E7D9CD00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000E8B78F00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E8B78F00D9A37700E8B78F00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9CD00E7D9
CD00E7D9CD00E7D9CD00E8B78F00D9A3770000000000D5B49400BC997600BC99
7600BC997600BC997600BC997600BC997600BC997600BC997600BC997600BC99
7600BC997600BC997600D5B494000000000000000000D5B49400BC997600BC99
7600BC997600BC997600BC997600BC997600BC997600BC997600BC997600BC99
7600BC997600BC997600D5B4940000000000D8A76700E8B79100E6D8CC00E7D9
CD00E7D8CD00E7D8CD00E6D8CC00E7D8CD00E6D8CD00E6D8CC00E6D9CD00E7D8
CD00E7D8CD00E8B79100D8A7670000000000D8A76700E8B79100E6D8CC00E7D9
CD00E7D8CD00E7D8CD00E6D8CC00E7D8CD00E6D8CD00E6D8CC00E6D9CD00E7D8
CD00E7D8CD00E8B79100D8A7670000000000D2AF8E00B9967300FDE8D500FFF0
E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0
E200FFF0E200FDE8D500B9967300D2AF8E00D2AF8E00B9967300FDE8D500FFF0
E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0E200FFF0
E200FFF0E200FDE8D500B9967300D2AF8E0000000000D9A17700E8DAD000E8DA
D000E8DACF00E8DAD000E8DAD000E8DAD000E8DAD000E8DAD000E8DAD000E8D9
D000E8DAD000D9A17700000000000000000000000000D9A17700E8DAD000E8DA
D000E8DACF00E8DAD000E8DAD000E8DAD000E8DAD000E8DAD000E8DAD000E8D9
D000E8DAD000D9A177000000000000000000B9947000FDE5D200EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FDE5D200B9947000B9947000FDE5D200EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FDE5D200B994700000000000CC8E6000EADDD300EADC
D100EADDD300EADDD300EADCD300EADCD300EADDD300EADDD300EADCD300EADD
D300EADCD300CC8E6000000000000000000000000000CC8E6000EADDD300EADC
D100EADDD300EADDD300EADCD300EADCD300EADDD300EADDD300EADCD300EADD
D300EADCD300CC8E60000000000000000000B7916B00FFEDDF00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FFEDDF00B7916B00B7916B00FFEDDF00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FFEDDF00B7916B0000000000CC8E6000EBDED400EBDE
D5000235CC00EBDED400EBDFD400ECDED500EBDED500EBDED400EBDED400EBDF
D500EBDED500CC8E6000000000000000000000000000CC8E6000EBDED400EBDE
D500EBDFD500EBDED400EBDFD400ECDED500EBDED500EBDED400EBDED400EBDF
D500EBDED500CC8E60000000000000000000B7916B00FFEDDF00EDAF6E00EDAF
6E000235CC00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FFEDDF00B7916B00B7916B00FFEDDF00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF6E00EDAF
6E00EDAF6E00EDAF6E00FFEDDF00B7916B0000000000CC8E6000ECE1D800ECE1
D6000235CC00ECE1D800ECE1D800ECE1D600EEE1D800ECDFD800ECDFD800ECE1
D800ECDFD600CC8E6000000000000000000000000000CC8E6000ECE1D800ECE1
D600ECDFD800ECE1D800ECE1D800ECE1D600EEE1D800ECDFD800ECDFD800ECE1
D800ECDFD600CC8E60000000000000000000B7916B00FFEDDF00F2CCA400F2CC
A4000235CC00F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CC
A400F2CCA400F2CCA400FFEDDF00B7916B00B7916B00FFEDDF00F2CCA400F2CC
A400F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CCA400F2CC
A400F2CCA400F2CCA400FFEDDF00B7916B00000000000468FF00EEE2DA00EEE3
DA000235CC00EEE2DA00EEE3DA000436CD00EFE2DA00EEE2DA00EEE3DA00EEE2
DA00EEE3DA00CC8E600000000000000000001A47D200002EC300000D8F00000D
8F00EFE2DA00000D8F00000D8F00000D8F00000D8F00EEE2DA00EEE3DA00EEE2
DA00EEE3DA00CC8E60000000000000000000B7916B000468FF00EABF9400EABF
94000235CC00EABF9400EABF94000436CD00EABF9400EABF9400EABF9400EABF
9400EABF9400EABF9400FFEDDF00B7916B001A47D200002EC300000D8F00000D
8F00EABF9400000D8F00000D8F00000D8F00000D8F00EABF9400EABF9400EABF
9400EABF9400EABF9400FFEDDF00B7916B0000000000D9A177000436CD00F0E5
DD000235CC00EFE5DD000267FF00F0E6DD00EFE6DD00EFE5DD00EFE5DD00F0E5
DD00ECDAA800D9A17700000000000000000000000000466BDD001947D200000D
8F00EFE6DC00000D8F00001094001C299E00EFE6DD00EFE5DD00EFE5DD00F0E5
DD00ECDAA800D9A177000000000000000000B7916B00FFEDDF000436CD00E5B1
89000235CC00E5B189000267FF00E5B18900E5B18900E5B18900E5B18900E5B1
8900E5B18900E5B18900FFEDDF00B7916B00B7916B00466BDD001947D200000D
8F00E5B18900000D8F00001094001C299E00E5B18900E5B18900E5B18900E5B1
8900E5B18900E5B18900FFEDDF00B7916B0000000000E8B79100D8A767000267
FF000235CC000267FF00F0E6DE00F0E6DE00F0E6DE00F0E6DE00F1E6DE00EAD6
C000D8A76700E8B79100000000000000000000000000E8B791005D7DE3000025
B6000012970000159C00001FAC00F0E6DE00F0E6DE00F0E6DE00F1E6DE00EAD6
C000D8A76700E8B791000000000000000000B7916B00FFEDDF00E2AC81000267
FF000235CC000267FF00E2AC8100E2AC8100E2AC8100E2AC8100E2AC8100E2AC
8100E2AC8100E2AC8100FFEDDF00B7916B00B7916B00FFEDDF005D7DE3000025
B6000012970000159C00001FAC00E2AC8100E2AC8100E2AC8100E2AC8100E2AC
8100E2AC8100E2AC8100FFEDDF00B7916B00000000000235CC000235CC000033
CC0033CCFF000234CC000234CC000234CC00D0966B00D0966B00D0966B00D9A3
7700E8B78F000000000000000000000000000000000000000000E8B78F002752
D600002CC0000019A200D0966B00D0966B00D0966B00D0966B00D0966B00D9A3
7700E8B78F00000000000000000000000000B7916B000235CC000235CC000033
CC0033CCFF000234CC000234CC000234CC00E8B48B00E8B48B00E8B48B00E8B4
8B00E8B48B00E8B48B00FFEDDF00B7916B00B7916B00FFEDDF00E8B48B002752
D600002CC0000019A200E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B4
8B00E8B48B00E8B48B00FFEDDF00B7916B000000000000000000000000000267
FF000235CC000267FF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000002F59
D8000033CC000011950000000000000000000000000000000000000000000000
000000000000000000000000000000000000B9947000FDE5D200E8B48B000267
FF000235CC000267FF00E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B4
8B00E8B48B00E8B48B00FDE5D200B9947000B9947000FDE5D200E8B48B002F59
D8000033CC0000119500E8B48B00E8B48B00E8B48B00E8B48B00E8B48B00E8B4
8B00E8B48B00E8B48B00FDE5D200B994700000000000000000000468FF000000
00000235CC00000000000468FF00000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000C3DCF002D57
D7002F59D8001242D100000D8F00000000000000000000000000000000000000
000000000000000000000000000000000000D2AF8E00B99673000468FF00FFF0
E2000235CC00FFF0E2000468FF00FFF0E200FFF0E200FFF0E200FFF0E200FFF0
E200FFF0E200FDE8D500B9967300D2AF8E00D2AF8E00B99673000C3DCF002D57
D7002F59D8001242D100000D8F00FFF0E200FFF0E200FFF0E200FFF0E200FFF0
E200FFF0E200FDE8D500B9967300D2AF8E00000000000436CD00000000000000
00000235CC0000000000000000000436CD000000000000000000000000000000
000000000000000000000000000000000000000000002D57D700325BD800355D
D900000000005073E0000020AE00000D8F000000000000000000000000000000
000000000000000000000000000000000000000000000436CD00BC997600BC99
76000235CC00BC997600BC9976000436CD00BC997600BC997600BC997600BC99
7600BC997600BC997600D5B4940000000000000000002D57D700325BD800355D
D900BC9976005073E0000020AE00000D8F00BC997600BC997600BC997600BC99
7600BC997600BC997600D5B49400000000000000000000000000000000000000
00000235CC000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000004B6FDF005879E2004E71DF00365E
DA00000000005C7DE300335CD9000030C700001BA60000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000235CC000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000004B6FDF005879E2004E71DF00365E
DA00000000005C7DE300335CD9000030C700001BA60000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000235CC000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000235CC000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000300000000100010000000000800100000000000000000000
000000000000000000000000FFFFFF0000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000FFFFFFFFF01FFEFFE007E007F01FFC7F
C003C003F01FF83FC003C003FFFFF01FC003C003F01FE00FC003C003F01FC007
C003C003F01F80038003000380038003C00380038003F01FC003C003C007F01F
8003C003E00FF01FC003C003F01FFFFFC003C003F83FF01F80038003FC7FF01F
E0070007FEFFF01FF7FFFFFFFFFFFFFF00000000FFFFFFFF0000000080018001
0001000100000000800380030000000080038003000000008003800300000000
8003800300000000800300030000000080038003000000008003800300000000
8007C00700000000E3FFE3FF00000000D5FFC1FF00000000B6FF88FF80018001
F7FF087FF7FF087FF7FFFFFFF7FFFFFF00000000000000000000000000000000
000000000000}
end
object ActionList1: TActionList
Images = ilActionImages
Left = 72
Top = 32
object aAddTab: TAction
Caption = 'Add tab'
Hint = 'Add tab'
ImageIndex = 0
OnExecute = aAddTabExecute
end
object aRemoveTab: TAction
Caption = 'Remove tab'
Hint = 'Remove tab'
ImageIndex = 1
OnExecute = aRemoveTabExecute
end
object aAddPane: TAction
Caption = 'Add pane'
Hint = 'Add pane'
ImageIndex = 2
OnExecute = aAddPaneExecute
end
object aRemovePane: TAction
Caption = 'Remove pane'
Hint = 'Remove pane'
ImageIndex = 3
OnExecute = aRemovePaneExecute
end
object aAddSmallButton: TAction
Caption = 'SpkSmallButton'
Hint = 'Add SmallButton'
ImageIndex = 4
OnExecute = aAddSmallButtonExecute
end
object aAddLargeButton: TAction
Caption = 'SpkLargeButton'
Hint = 'Add SpkLargeButton'
ImageIndex = 4
OnExecute = aAddLargeButtonExecute
end
object aRemoveItem: TAction
Caption = 'Remove item'
Hint = 'Remove item'
ImageIndex = 5
OnExecute = aRemoveItemExecute
end
object aMoveUp: TAction
Caption = 'Move up'
Hint = 'Move item up'
ImageIndex = 6
OnExecute = aMoveUpExecute
end
object aMoveDown: TAction
Caption = 'Move down'
Hint = 'Move item down'
ImageIndex = 7
OnExecute = aMoveDownExecute
end
end
object pmAddItem: TPopupMenu
Left = 8
Top = 64
object SpkLargeButton1: TMenuItem
Action = aAddLargeButton
end
object SpkSmallButton1: TMenuItem
Action = aAddSmallButton
end
end
object pmStructure: TPopupMenu
Images = ilActionImages
Left = 40
Top = 64
object Addtab1: TMenuItem
Action = aAddTab
end
object Removetab1: TMenuItem
Action = aRemoveTab
end
object N1: TMenuItem
Caption = '-'
end
object Addpane1: TMenuItem
Action = aAddPane
end
object Removepane1: TMenuItem
Action = aRemovePane
end
object N2: TMenuItem
Caption = '-'
end
object Additem1: TMenuItem
Caption = 'Add item'
object SpkLargeButton2: TMenuItem
Action = aAddLargeButton
end
object SpkSmallButton2: TMenuItem
Action = aAddSmallButton
end
end
object Removeitem1: TMenuItem
Action = aRemoveItem
end
object N3: TMenuItem
Caption = '-'
end
object Moveup1: TMenuItem
Action = aMoveUp
end
object Movedown1: TMenuItem
Action = aMoveDown
end
end
end

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,154 @@
unit spkt_BaseItem;
(*******************************************************************************
* *
* Plik: spkt_BaseItem.pas *
* Opis: Modu� zawieraj�cy bazow� klas� dla elementu tafli. *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
uses Windows, Graphics, Classes, Controls,
SpkMath, SpkGUITools, SpkGraphTools,
spkt_Appearance, spkt_Exceptions, spkt_Dispatch, spkt_Types;
type TSpkItemSize = (isLarge, isNormal);
TSpkItemTableBehaviour = (tbBeginsRow, tbBeginsColumn, tbContinuesRow);
TSpkItemGroupBehaviour = (gbSingleItem, gbBeginsGroup, gbContinuesGroup, gbEndsGroup);
type TSpkBaseItem = class abstract(TSpkComponent)
private
protected
FRect : T2DIntRect;
FToolbarDispatch : TSpkBaseToolbarDispatch;
FAppearance : TSpkToolbarAppearance;
FImages : TImageList;
FDisabledImages : TImageList;
FLargeImages : TImageList;
FDisabledLargeImages : TImageList;
FVisible : boolean;
FEnabled : boolean;
procedure SetVisible(const Value: boolean); virtual;
procedure SetEnabled(const Value: boolean); virtual;
procedure SetRect(const Value: T2DIntRect); virtual;
procedure SetImages(const Value: TImageList); virtual;
procedure SetDisabledImages(const Value : TImageList); virtual;
procedure SetLargeImages(const Value: TImageList); virtual;
procedure SetDisabledLargeImages(const Value: TImageList); virtual;
procedure SetAppearance(const Value: TSpkToolbarAppearance);
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure MouseLeave; virtual; abstract;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); virtual; abstract;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); virtual; abstract;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); virtual; abstract;
function GetWidth : integer; virtual; abstract;
function GetTableBehaviour : TSpkItemTableBehaviour; virtual; abstract;
function GetGroupBehaviour : TSpkItemGroupBehaviour; virtual; abstract;
function GetSize : TSpkItemSize; virtual; abstract;
procedure Draw(ABuffer : TBitmap; ClipRect : T2DIntRect); virtual; abstract;
property ToolbarDispatch : TSpkBaseToolbarDispatch read FToolbarDispatch write FToolbarDispatch;
property Appearance : TSpkToolbarAppearance read FAppearance write SetAppearance;
property Images : TImageList read FImages write SetImages;
property DisabledImages : TImageList read FDisabledImages write SetDisabledImages;
property LargeImages : TImageList read FLargeImages write SetLargeImages;
property DisabledLargeImages : TImageList read FDisabledLargeImages write SetDisabledLargeImages;
property Rect : T2DIntRect read FRect write SetRect;
published
property Visible : boolean read FVisible write SetVisible;
property Enabled : boolean read FEnabled write SetEnabled;
end;
type TSpkBaseItemClass = class of TSpkBaseItem;
implementation
{ TSpkBaseItem }
constructor TSpkBaseItem.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FRect:=T2DIntRect.create(0, 0, 0, 0);
FToolbarDispatch:=nil;
FAppearance:=nil;
FImages:=nil;
FDisabledImages:=nil;
FLargeImages:=nil;
FDisabledLargeImages:=nil;
FVisible:=true;
FEnabled:=true;
end;
destructor TSpkBaseItem.Destroy;
begin
{ Pozosta�e operacje }
inherited Destroy;
end;
procedure TSpkBaseItem.SetAppearance(const Value: TSpkToolbarAppearance);
begin
FAppearance := Value;
if assigned(FToolbarDispatch) then
FToolbarDispatch.NotifyMetricsChanged;
end;
procedure TSpkBaseItem.SetDisabledImages(const Value: TImageList);
begin
FDisabledImages := Value;
end;
procedure TSpkBaseItem.SetDisabledLargeImages(const Value: TImageList);
begin
FDisabledLargeImages:=Value;
end;
procedure TSpkBaseItem.SetEnabled(const Value: boolean);
begin
if Value<>FEnabled then
begin
FEnabled:=Value;
if FToolbarDispatch<>nil then
FToolbarDispatch.NotifyVisualsChanged;
end;
end;
procedure TSpkBaseItem.SetImages(const Value: TImageList);
begin
FImages := Value;
end;
procedure TSpkBaseItem.SetLargeImages(const Value: TImageList);
begin
FLargeImages := Value;
end;
procedure TSpkBaseItem.SetRect(const Value: T2DIntRect);
begin
FRect := Value;
end;
procedure TSpkBaseItem.SetVisible(const Value: boolean);
begin
if Value<>FVisible then
begin
FVisible:=Value;
if FToolbarDispatch<>nil then
FToolbarDispatch.NotifyMetricsChanged;
end;
end;
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,190 @@
unit spkt_Const;
(*******************************************************************************
* *
* Plik: spkt_Const.pas *
* Opis: Sta�e wykorzystywane do obliczania geometrii toolbara *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
const // ****************
// *** Elementy ***
// ****************
LARGEBUTTON_DROPDOWN_FIELD_SIZE = 29;
LARGEBUTTON_GLYPH_MARGIN = 1;
LARGEBUTTON_CAPTION_HMARGIN = 3;
LARGEBUTTON_MIN_WIDTH = 24;
LARGEBUTTON_RADIUS = 4;
LARGEBUTTON_BORDER_SIZE = 2;
LARGEBUTTON_CHEVRON_HMARGIN = 4;
LARGEBUTTON_CAPTION_TOP_RAIL = 45;
LARGEBUTTON_CAPTION_BOTTOM_RAIL = 58;
SMALLBUTTON_GLYPH_WIDTH = 16;
SMALLBUTTON_BORDER_WIDTH = 2;
SMALLBUTTON_HALF_BORDER_WIDTH = 1;
SMALLBUTTON_PADDING = 2;
SMALLBUTTON_DROPDOWN_WIDTH = 11;
SMALLBUTTON_RADIUS = 4;
SMALLBUTTON_MIN_WIDTH = 2 * SMALLBUTTON_PADDING + SMALLBUTTON_GLYPH_WIDTH;
// ********************
// *** Obszar tafli ***
// ********************
/// <summary>Maksymalna wysoko�� obszaru, kt�ry mo�e zaj�� zawarto��
/// tafli z elementami</summary>
MAX_ELEMENT_HEIGHT = 67;
/// <summary>Wysoko�� pojedynczego wiersza element�w tafli</summary>
PANE_ROW_HEIGHT = 22;
PANE_FULL_ROW_HEIGHT = 3 * PANE_ROW_HEIGHT;
/// <summary>Wewn�trzny pionowy margines pomi�dzy pierwszym elementem a
/// tafl� w przypadku wersji jednowierszowej</summary>
PANE_ONE_ROW_TOPPADDING = 22;
/// <summary>Wewn�trzny pionowy margines pomi�dzy ostatnim elementem
/// a tafl� w przypadku wersji jednowierszowej</summary>
PANE_ONE_ROW_BOTTOMPADDING = 23;
/// <summary>Odleg�o�� pomi�dzy wierszami w przypadku wersji dwuwierszowej
/// </summary>
PANE_TWO_ROWS_VSPACER = 7;
/// <summary>Wewn�trzny pionowy margines pomi�dzy pierwszym elementem a
/// tafl� w przypadku wersji dwuwierszowej</summary>
PANE_TWO_ROWS_TOPPADDING = 8;
/// <summary>Wewn�trzny pionowy margines pomi�dzy ostatnim elementem
/// a tafl� w przypadku wersji dwuwierszowej</summary>
PANE_TWO_ROWS_BOTTOMPADDING = 8;
/// <summary>Odleg�o�� pomi�dzy wierszami w przypadku wersji
/// trzywierszowej</summary>
PANE_THREE_ROWS_VSPACER = 0;
/// <summary>Wewn�trzny pionowy margines pomi�dzy pierwszym elementem a
/// tafl� w przypadku wersji trzywierszowej</summary>
PANE_THREE_ROWS_TOPPADDING = 0;
/// <summary>Wewn�trzny pionowy margines pomi�dzy ostatnim elementem
/// a tafl� w przypadku wersji trzywierszowej</summary>
PANE_THREE_ROWS_BOTTOMPADDING = 1;
PANE_FULL_ROW_TOPPADDING = PANE_THREE_ROWS_TOPPADDING;
PANE_FULL_ROW_BOTTOMPADDING = PANE_THREE_ROWS_BOTTOMPADDING;
/// <summary>Odleg�o�� pomi�dzy lew� kraw�dzi� a pierwszym elementem
/// tafli</summary>
PANE_LEFT_PADDING = 2;
/// <summary>Odleg�o�� pomi�dzy ostatnim elementem tafli a praw� kraw�dzi�
/// </summary>
PANE_RIGHT_PADDING = 2;
/// <summary>Odleg�o�� pomi�dzy dwoma kolumnami wewn�trz tafli</summary>
PANE_COLUMN_SPACER = 4;
/// <summary>Odleg�o�� pomi�dzy dwoma osobnymi grupami wewn�trz wiersza
/// w tafli</summary>
PANE_GROUP_SPACER = 4;
// *************
// *** Tafla ***
// *************
/// <summary>Wysoko�� obszaru tytu�u tafli</summary>
PANE_CAPTION_HEIGHT = 15;
PANE_CORNER_RADIUS = 3;
/// <summary>Szeroko��/wysoko�� ramki tafli</summary>
/// <remarks>Nie nale�y zmienia� tej sta�ej!</remarks>
PANE_BORDER_SIZE = 2;
/// <summary>Po�owa szeroko�ci ramki tafli</summary>
/// <remarks>Nie nale�y zmienia� tej sta�ej!</remarks>
PANE_BORDER_HALF_SIZE = 1;
/// <summary>Wysoko�� ca�ej tafli (uwzgl�dniaj�c ramk�)</summary>
PANE_HEIGHT = MAX_ELEMENT_HEIGHT + PANE_CAPTION_HEIGHT + 2 * PANE_BORDER_SIZE;
/// <summary>Poziomy margines etykiety zak�adki</summary>
PANE_CAPTION_HMARGIN = 6;
// ***********************
// *** Obszar zak�adki ***
// ***********************
/// <summary>Promie� zaokr�glenia zak�adki</summary>
TAB_CORNER_RADIUS = 4;
/// <summary>Lewy wewn�trzny margines zak�adki</summary>
TAB_PANE_LEFTPADDING = 2;
/// <summary>Prawy wewn�trzny margines zak�adki</summary>
TAB_PANE_RIGHTPADDING = 2;
/// <summary>G�rny wewn�trzny margines zak�adki</summary>
TAB_PANE_TOPPADDING = 2;
/// <summary>Dolny wewn�trzny margines zak�adki</summary>
TAB_PANE_BOTTOMPADDING = 1;
/// <summary>Odleg�o�� pomi�dzy taflami</summary>
TAB_PANE_HSPACING = 3;
/// <summary>Szeroko��/wysoko�� ramki zak�adki (nie nale�y zmienia�!)
/// </summary>
TAB_BORDER_SIZE = 1;
/// <summary>Wysoko�� zak�adki</summary>
TAB_HEIGHT = PANE_HEIGHT + TAB_PANE_TOPPADDING + TAB_PANE_BOTTOMPADDING + TAB_BORDER_SIZE;
// ***************
// *** Toolbar ***
// ***************
TOOLBAR_BORDER_WIDTH = 1;
TOOLBAR_CORNER_RADIUS = 3;
/// <summary>Wysoko�� etykiet z nazwami zak�adek</summary>
TOOLBAR_TAB_CAPTIONS_HEIGHT = 22;
/// <summary>Poziomy margines wewn�trznego tytu�u zak�adki</summary>
TOOLBAR_TAB_CAPTIONS_TEXT_HPADDING = 4;
TOOLBAR_MIN_TAB_CAPTION_WIDTH = 32;
/// <summary>Sumaryczna wysoko�� toolbara</summary>
TOOLBAR_HEIGHT = TOOLBAR_TAB_CAPTIONS_HEIGHT +
TAB_HEIGHT;
implementation
initialization
{$IFDEF DEBUG}
// Sprawdzanie poprawno�ci
// �uk du�ego przycisku
assert(LARGEBUTTON_RADIUS * 2 <= LARGEBUTTON_DROPDOWN_FIELD_SIZE);
// Tafla, wersja z jednym wierszem
assert(PANE_ROW_HEIGHT +
PANE_ONE_ROW_TOPPADDING +
PANE_ONE_ROW_BOTTOMPADDING <= MAX_ELEMENT_HEIGHT);
// Tafla, wersja z dwoma wierszami
assert(2*PANE_ROW_HEIGHT +
PANE_TWO_ROWS_TOPPADDING +
PANE_TWO_ROWS_VSPACER +
PANE_TWO_ROWS_BOTTOMPADDING <= MAX_ELEMENT_HEIGHT);
// Tafla, wersja z trzema wierszami
assert(3*PANE_ROW_HEIGHT +
PANE_THREE_ROWS_TOPPADDING +
2*PANE_THREE_ROWS_VSPACER +
PANE_THREE_ROWS_BOTTOMPADDING <= MAX_ELEMENT_HEIGHT);
{$ENDIF}
end.

View File

@ -0,0 +1,45 @@
unit spkt_Dispatch;
(*******************************************************************************
* *
* Plik: spkt_Dispatch.pas *
* Opis: Bazowe klasy dyspozytor�w po�rednicz�cych pomi�dzy elementami *
* toolbara. *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
uses Windows, Classes, Controls, Graphics,
SpkMath;
type TSpkBaseDispatch = class abstract(TObject)
private
protected
public
end;
type TSpkBaseAppearanceDispatch = class abstract(TSpkBaseDispatch)
private
protected
public
procedure NotifyAppearanceChanged; virtual; abstract;
end;
type TSpkBaseToolbarDispatch = class abstract(TSpkBaseAppearanceDispatch)
private
protected
public
procedure NotifyItemsChanged; virtual; abstract;
procedure NotifyMetricsChanged; virtual; abstract;
procedure NotifyVisualsChanged; virtual; abstract;
function GetTempBitmap : TBitmap; virtual; abstract;
function ClientToScreen(Point : T2DIntPoint) : T2DIntPoint; virtual; abstract;
end;
implementation
end.

View File

@ -0,0 +1,24 @@
unit spkt_Exceptions;
(*******************************************************************************
* *
* Plik: spkt_Exceptions.pas *
* Opis: Klasy wyj�tk�w toolbara *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
uses SysUtils;
type InternalException = class(Exception);
AssignException = class(Exception);
RuntimeException = class(Exception);
ListException = class(Exception);
implementation
end.

View File

@ -0,0 +1,253 @@
unit spkt_Items;
(*******************************************************************************
* *
* Plik: spkt_Items.pas *
* Opis: Modu� zawiera klas� kolekcji element�w tafli. *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
uses Windows, Classes, Controls, SysUtils, Dialogs,
SpkXMLParser,
spkt_Appearance, spkt_Dispatch, spkt_BaseItem, spkt_Exceptions, spkt_Types,
spkt_Buttons;
type TSpkItems = class(TSpkCollection)
private
FToolbarDispatch : TSpkBaseToolbarDispatch;
FAppearance : TSpkToolbarAppearance;
FImages : TImageList;
FDisabledImages : TImageList;
FLargeImages : TImageList;
FDisabledLargeImages : TImageList;
// *** Gettery i settery ***
procedure SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
function GetItems(index: integer): TSpkBaseItem; reintroduce;
procedure SetAppearance(const Value: TSpkToolbarAppearance);
procedure SetImages(const Value: TImageList);
procedure SetDisabledImages(const Value : TImageList);
procedure SetLargeImages(const Value : TImageList);
procedure SetDisabledLargeImages(const Value : TImageList);
public
// *** Konstruktor, destruktor ***
constructor Create(RootComponent : TComponent); override;
destructor Destroy; override;
function AddLargeButton : TSpkLargeButton;
function AddSmallButton : TSpkSmallButton;
// *** Reakcja na zmiany listy ***
procedure Notify(Item: TComponent; Operation : TOperation); override;
procedure Update; override;
property Items[index : integer] : TSpkBaseItem read GetItems; default;
property ToolbarDispatch : TSpkBaseToolbarDispatch read FToolbarDispatch write SetToolbarDispatch;
property Appearance : TSpkToolbarAppearance read FAppearance write SetAppearance;
property Images : TImageList read FImages write SetImages;
property DisabledImages : TImageList read FDisabledImages write SetDisabledImages;
property LargeImages : TImageList read FLargeImages write SetLargeImages;
property DisabledLargeImages : TImageList read FDisabledLargeImages write SetDisabledLargeImages;
end;
implementation
{ TSpkItems }
function TSpkItems.AddLargeButton: TSpkLargeButton;
var Owner, Parent : TComponent;
i: Integer;
begin
if FRootComponent<>nil then
begin
Owner:=FRootComponent.Owner;
Parent:=FRootComponent;
end
else
begin
Owner:=nil;
Parent:=nil;
end;
result:=TSpkLargeButton.Create(Owner);
result.Parent:=Parent;
if FRootComponent<>nil then
begin
i:=1;
while FRootComponent.Owner.FindComponent('SpkLargeButton'+inttostr(i))<>nil do
inc(i);
result.Name:='SpkLargeButton'+inttostr(i);
end;
AddItem(result);
end;
function TSpkItems.AddSmallButton: TSpkSmallButton;
var Owner, Parent : TComponent;
i: Integer;
begin
if FRootComponent<>nil then
begin
Owner:=FRootComponent.Owner;
Parent:=FRootComponent;
end
else
begin
Owner:=nil;
Parent:=nil;
end;
result:=TSpkSmallButton.Create(Owner);
result.Parent:=Parent;
if FRootComponent<>nil then
begin
i:=1;
while FRootComponent.Owner.FindComponent('SpkSmallButton'+inttostr(i))<>nil do
inc(i);
result.Name:='SpkSmallButton'+inttostr(i);
end;
AddItem(result);
end;
constructor TSpkItems.Create(RootComponent : TComponent);
begin
inherited Create(RootComponent);
FToolbarDispatch:=nil;
FAppearance:=nil;
FImages:=nil;
FDisabledImages:=nil;
FLargeImages:=nil;
FDisabledLargeImages:=nil;
end;
destructor TSpkItems.Destroy;
begin
inherited Destroy;
end;
function TSpkItems.GetItems(index: integer): TSpkBaseItem;
begin
result:=TSpkBaseItem(inherited Items[index]);
end;
procedure TSpkItems.Notify(Item: TComponent;
Operation : TOperation);
begin
inherited Notify(Item, Operation);
case Operation of
opInsert: begin
// Ustawienie dyspozytora na nil spowoduje, �e podczas
// przypisywania w�asno�ci nie b�d� wo�ane metody Notify*
TSpkBaseItem(Item).ToolbarDispatch:=nil;
TSpkBaseItem(Item).Appearance:=FAppearance;
TSpkBaseItem(Item).Images:=FImages;
TSpkBaseItem(Item).DisabledImages:=FDisabledImages;
TSpkBaseItem(Item).LargeImages:=FLargeImages;
TSpkBaseItem(Item).DisabledLargeImages:=FDisabledLargeImages;
TSpkBaseItem(Item).ToolbarDispatch:=FToolbarDispatch;
end;
opRemove: begin
if not(csDestroying in Item.ComponentState) then
begin
TSpkBaseItem(Item).ToolbarDispatch:=nil;
TSpkBaseItem(Item).Appearance:=nil;
TSpkBaseItem(Item).Images:=nil;
TSpkBaseItem(Item).DisabledImages:=nil;
TSpkBaseItem(Item).LargeImages:=nil;
TSpkBaseItem(Item).DisabledLargeImages:=nil;
end;
end;
end;
end;
procedure TSpkItems.SetAppearance(const Value: TSpkToolbarAppearance);
var i: Integer;
begin
FAppearance := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].Appearance:=FAppearance;
end;
procedure TSpkItems.SetDisabledImages(const Value: TImageList);
var i: Integer;
begin
FDisabledImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].DisabledImages:=FDisabledImages;
end;
procedure TSpkItems.SetDisabledLargeImages(const Value: TImageList);
var i: Integer;
begin
FDisabledLargeImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].DisabledLargeImages:=FDisabledLargeImages;
end;
procedure TSpkItems.SetImages(const Value: TImageList);
var i: Integer;
begin
FImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].Images:=FImages;
end;
procedure TSpkItems.SetLargeImages(const Value: TImageList);
var i: Integer;
begin
FLargeImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].LargeImages:=FLargeImages;
end;
procedure TSpkItems.SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
var i : integer;
begin
FToolbarDispatch := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].ToolbarDispatch:=FToolbarDispatch;
end;
procedure TSpkItems.Update;
begin
inherited Update;
if assigned(FToolbarDispatch) then
FToolbarDispatch.NotifyItemsChanged;
end;
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,805 @@
unit spkt_Tab;
(*******************************************************************************
* *
* Plik: spkt_Tab.pas *
* Opis: Komponent zak�adki toolbara *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
uses Windows, Graphics, Controls, Classes, SysUtils,
SpkGraphTools, SpkGUITools, SpkMath,
spkt_Appearance, spkt_Const, spkt_Dispatch, spkt_Exceptions,
spkt_Pane, spkt_Types;
type TSpkTab = class;
TSpkMouseTabElementType = (etNone, etTabArea, etPane);
TSpkMouseTabElement = record
ElementType : TSpkMouseTabElementType;
ElementIndex : integer;
end;
TSpkTabAppearanceDispatch = class(TSpkBaseAppearanceDispatch)
private
FTab : TSpkTab;
protected
public
// *** Konstruktor ***
constructor Create(ATab : TSpkTab);
// *** Implementacja metod odziedziczonych po TSpkBaseTabDispatch ***
procedure NotifyAppearanceChanged; override;
end;
TSpkTab = class(TSpkComponent)
private
FAppearanceDispatch : TSpkTabAppearanceDispatch;
FAppearance : TSpkToolbarAppearance;
FMouseHoverElement : TSpkMouseTabElement;
FMouseActiveElement : TSpkMouseTabElement;
protected
FToolbarDispatch : TSpkBaseToolbarDispatch;
FCaption : string;
FVisible : boolean;
FOverrideAppearance : boolean;
FCustomAppearance : TSpkToolbarAppearance;
FPanes : TSpkPanes;
FRect : T2DIntRect;
FImages : TImageList;
FDisabledImages : TImageList;
FLargeImages : TImageList;
FDisabledLargeImages : TImageList;
// *** Makro ustawia odpowiednie appearance taflom ***
procedure SetPaneAppearance; inline;
// *** Wyszukiwanie tafli ***
function FindPaneAt(x, y : integer) : integer;
// *** Obs�uga designtime i DFM ***
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
procedure DefineProperties(Filer : TFiler); override;
procedure Loaded; override;
// *** Gettery i settery ***
procedure SetCaption(const Value: string);
procedure SetCustomAppearance(const Value: TSpkToolbarAppearance);
procedure SetOverrideAppearance(const Value: boolean);
procedure SetVisible(const Value: boolean);
procedure SetAppearance(const Value: TSpkToolbarAppearance);
procedure SetImages(const Value: TImageList);
procedure SetDisabledImages(const Value : TImageList);
procedure SetLargeImages(const Value : TImageList);
procedure SetDisabledLargeImages(const Value : TImageList);
procedure SetRect(ARect : T2DIntRect);
procedure SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
public
// *** Konstruktor, destruktor ***
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
// *** Geometria, obs�uga tafli, rysowanie ***
function AtLeastOnePaneVisible: boolean;
procedure Draw(ABuffer : TBitmap; AClipRect : T2DIntRect);
// *** Obs�uga gryzonia ***
procedure MouseLeave;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
procedure MouseMove(Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
// *** Obs�uga zdarze� dyspozytora ***
procedure NotifyAppearanceChanged;
// *** Obs�uga element�w ***
procedure FreeingPane(APane : TSpkPane);
property ToolbarDispatch : TSpkBaseToolbarDispatch read FToolbarDispatch write SetToolbarDispatch;
property Appearance : TSpkToolbarAppearance read FAppearance write SetAppearance;
property Panes : TSpkPanes read FPanes;
property Rect : T2DIntRect read FRect write SetRect;
property Images : TImageList read FImages write SetImages;
property DisabledImages : TImageList read FDisabledImages write SetDisabledImages;
property LargeImages : TImageList read FLargeImages write SetLargeImages;
property DisabledLargeImages : TImageList read FDisabledLargeImages write SetDisabledLargeImages;
published
property CustomAppearance : TSpkToolbarAppearance read FCustomAppearance write SetCustomAppearance;
property Caption : string read FCaption write SetCaption;
property OverrideAppearance : boolean read FOverrideAppearance write SetOverrideAppearance;
property Visible : boolean read FVisible write SetVisible;
end;
type TSpkTabs = class(TSpkCollection)
private
protected
FToolbarDispatch : TSpkBaseToolbarDispatch;
FAppearance : TSpkToolbarAppearance;
FImages : TImageList;
FDisabledImages : TImageList;
FLargeImages : TImageList;
FDisabledLargeImages : TImageList;
procedure SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
function GetItems(index: integer): TSpkTab; reintroduce;
procedure SetAppearance(const Value: TSpkToolbarAppearance);
procedure SetImages(const Value: TImageList);
procedure SetDisabledImages(const Value : TImageList);
procedure SetLargeImages(const Value : TImageList);
procedure SetDisabledLargeImages(const Value : TImageList);
public
constructor Create(RootComponent : TComponent); override;
destructor Destroy; override;
function Add : TSpkTab;
function Insert(index : integer) : TSpkTab;
procedure Notify(Item: TComponent; Operation : TOperation); override;
procedure Update; override;
property Items[index : integer] : TSpkTab read GetItems; default;
property ToolbarDispatch : TSpkBaseToolbarDispatch read FToolbarDispatch write SetToolbarDispatch;
property Appearance : TSpkToolbarAppearance read FAppearance write SetAppearance;
property Images : TImageList read FImages write SetImages;
property DisabledImages : TImageList read FDisabledImages write SetDisabledImages;
property LargeImages : TImageList read FLargeImages write SetLargeImages;
property DisabledLargeImages : TImageList read FDisabledLargeImages write SetDisabledLargeImages;
end;
implementation
{ TSpkTabDispatch }
constructor TSpkTabAppearanceDispatch.Create(ATab: TSpkTab);
begin
inherited Create;
FTab:=ATab;
end;
procedure TSpkTabAppearanceDispatch.NotifyAppearanceChanged;
begin
if assigned(FTab) then
FTab.NotifyAppearanceChanged;
end;
{ TSpkTab }
function TSpkTab.AtLeastOnePaneVisible: boolean;
var i : integer;
PaneVisible : boolean;
begin
result:=FPanes.count>0;
if result then
begin
PaneVisible:=false;
i:=FPanes.count-1;
while (i>=0) and not(PaneVisible) do
begin
PaneVisible:=FPanes[i].Visible;
dec(i);
end;
result:=result and PaneVisible;
end;
end;
procedure TSpkTab.SetRect(ARect: T2DIntRect);
var x, i : integer;
tw : integer;
tmpRect : T2DIntRect;
begin
FRect:=ARect;
if AtLeastOnePaneVisible then
begin
x:=ARect.left;
for i := 0 to FPanes.count - 1 do
if FPanes[i].Visible then
begin
tw:=FPanes[i].GetWidth;
tmpRect.Left:=x;
tmpRect.top:=ARect.Top;
tmpRect.right:=x + tw - 1;
tmpRect.bottom:=ARect.bottom;
FPanes[i].Rect:=tmpRect;
x:=x + tw + TAB_PANE_HSPACING;
end
else
begin
FPanes[i].Rect:=T2DIntRect.create(-1,-1,-1,-1);
end;
end;
end;
procedure TSpkTab.SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
begin
FToolbarDispatch := Value;
FPanes.ToolbarDispatch:=FToolbarDispatch;
end;
constructor TSpkTab.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FAppearanceDispatch:=TSpkTabAppearanceDispatch.create(self);
FAppearance:=nil;
FMouseHoverElement.ElementType:=etNone;
FMouseHoverElement.ElementIndex:=-1;
FMouseActiveElement.ElementType:=etNone;
FMouseActiveElement.ElementIndex:=-1;
FToolbarDispatch:=nil;
FCaption:='Tab';
FVisible:=true;
FOverrideAppearance:=false;
FCustomAppearance:=TSpkToolbarAppearance.Create(FAppearanceDispatch);
FPanes:=TSpkPanes.Create(self);
FPanes.ToolbarDispatch:=FToolbarDispatch;
FRect:=T2DIntRect.create(0,0,0,0);
FImages:=nil;
FDisabledImages:=nil;
FLargeImages:=nil;
FDisabledLargeImages:=nil;
SetPaneAppearance;
end;
procedure TSpkTab.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineProperty('Panes',FPanes.ReadNames,FPanes.WriteNames,true);
end;
destructor TSpkTab.Destroy;
begin
FPanes.Free;
FCustomAppearance.Free;
FAppearanceDispatch.Free;
inherited Destroy;
end;
procedure TSpkTab.Draw(ABuffer: TBitmap; AClipRect: T2DIntRect);
var LocalClipRect : T2DIntRect;
i : integer;
begin
if AtLeastOnePaneVisible then
for i := 0 to FPanes.Count - 1 do
if FPanes[i].visible then
begin
if AClipRect.IntersectsWith(FPanes[i].Rect, LocalClipRect) then
FPanes[i].Draw(ABuffer, LocalClipRect);
end;
end;
function TSpkTab.FindPaneAt(x, y: integer): integer;
var i : integer;
begin
result:=-1;
i:=FPanes.count-1;
while (i>=0) and (result=-1) do
begin
if FPanes[i].Visible then
begin
if FPanes[i].Rect.Contains(T2DIntVector.create(x,y)) then
result:=i;
end;
dec(i);
end;
end;
procedure TSpkTab.FreeingPane(APane: TSpkPane);
begin
FPanes.RemoveReference(APane);
end;
procedure TSpkTab.GetChildren(Proc: TGetChildProc; Root: TComponent);
var i: Integer;
begin
inherited;
if FPanes.Count>0 then
for i := 0 to FPanes.Count - 1 do
Proc(FPanes.Items[i]);
end;
procedure TSpkTab.Loaded;
begin
inherited;
if FPanes.ListState = lsNeedsProcessing then
FPanes.ProcessNames(self.Owner);
end;
procedure TSpkTab.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
if FMouseActiveElement.ElementType = etPane then
begin
if FMouseActiveElement.ElementIndex<>-1 then
FPanes[FMouseActiveElement.ElementIndex].MouseDown(Button, Shift, X, Y);
end else
if FMouseActiveElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia.
end else
if FMouseActiveElement.ElementType = etNone then
begin
if FMouseHoverElement.ElementType = etPane then
begin
if FMouseHoverElement.ElementIndex<>-1 then
begin
FMouseActiveElement.ElementType:=etPane;
FMouseActiveElement.ElementIndex:=FMouseHoverElement.ElementIndex;
FPanes[FMouseHoverElement.ElementIndex].MouseDown(Button, Shift, X, Y);
end
else
begin
FMouseActiveElement.ElementType:=etTabArea;
FMouseActiveElement.ElementIndex:=-1;
end;
end else
if FMouseHoverElement.ElementType = etTabArea then
begin
FMouseActiveElement.ElementType:=etTabArea;
FMouseActiveElement.ElementIndex:=-1;
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia.
end;
end;
end;
procedure TSpkTab.MouseLeave;
begin
if FMouseActiveElement.ElementType = etNone then
begin
if FMouseHoverElement.ElementType = etPane then
begin
if FMouseHoverElement.ElementIndex<>-1 then
FPanes[FMouseHoverElement.ElementIndex].MouseLeave;
end else
if FMouseHoverElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia.
end;
end;
FMouseHoverElement.ElementType:=etNone;
FMouseHoverElement.ElementIndex:=-1;
end;
procedure TSpkTab.MouseMove(Shift: TShiftState; X, Y: Integer);
var i : integer;
NewMouseHoverElement : TSpkMouseTabElement;
begin
// Szukamy obiektu pod mysz�
i:=FindPaneAt(x, y);
if i<>-1 then
begin
NewMouseHoverElement.ElementType:=etPane;
NewMouseHoverElement.ElementIndex:=i;
end else
if (X>=FRect.left) and (Y>=FRect.top) and
(X<=FRect.right) and (Y<=FRect.bottom) then
begin
NewMouseHoverElement.ElementType:=etTabArea;
NewMouseHoverElement.ElementIndex:=-1;
end else
begin
NewMouseHoverElement.ElementType:=etNone;
NewMouseHoverElement.ElementIndex:=-1;
end;
if FMouseActiveElement.ElementType = etPane then
begin
if FMouseActiveElement.ElementIndex<>-1 then
begin
FPanes[FMouseActiveElement.ElementIndex].MouseMove(Shift, X, Y);
end;
end else
if FMouseActiveElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia
end else
if FMouseActiveElement.ElementType = etNone then
begin
// Je�li element pod mysz� si� zmienia, informujemy poprzedni element o
// tym, �e mysz opuszcza jego obszar
if (NewMouseHoverElement.ElementType<>FMouseHoverElement.ElementType) or
(NewMouseHoverElement.ElementIndex<>FMouseHoverElement.ElementIndex) then
begin
if FMouseHoverElement.ElementType = etPane then
begin
if FMouseHoverElement.ElementIndex<>-1 then
FPanes[FMouseHoverElement.ElementIndex].MouseLeave;
end else
if FMouseHoverElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia
end;
end;
if NewMouseHoverElement.ElementType = etPane then
begin
if NewMouseHoverElement.ElementIndex<>-1 then
FPanes[NewMouseHoverElement.ElementIndex].MouseMove(Shift, X, Y);
end else
if NewMouseHoverElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia
end;
end;
FMouseHoverElement:=NewMouseHoverElement;
end;
procedure TSpkTab.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
var ClearActive : boolean;
begin
ClearActive:=not(ssLeft in Shift) and not(ssMiddle in Shift) and not(ssRight in Shift);
if FMouseActiveElement.ElementType = etPane then
begin
if FMouseActiveElement.ElementIndex<>-1 then
FPanes[FMouseActiveElement.ElementIndex].MouseUp(Button, Shift, X, Y);
end else
if FMouseActiveElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia.
end;
if ClearActive and
(FMouseActiveElement.ElementType<>FMouseHoverElement.ElementType) or
(FMouseActiveElement.ElementIndex<>FMouseHoverElement.ElementIndex) then
begin
if FMouseActiveElement.ElementType = etPane then
begin
if FMouseActiveElement.ElementIndex<>-1 then
FPanes[FMouseActiveElement.ElementIndex].MouseLeave;
end else
if FMouseActiveElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia.
end;
if FMouseHoverElement.ElementType = etPane then
begin
if FMouseHoverElement.ElementIndex<>-1 then
FPanes[FMouseHoverElement.ElementIndex].MouseMove(Shift, X, Y);
end else
if FMouseHoverElement.ElementType = etTabArea then
begin
// Placeholder, je�li zajdzie potrzeba obs�ugi tego zdarzenia.
end;
end;
if ClearActive then
begin
FMouseActiveElement.ElementType:=etNone;
FMouseActiveElement.ElementIndex:=-1;
end;
end;
procedure TSpkTab.NotifyAppearanceChanged;
begin
if assigned(FToolbarDispatch) then
FToolbarDispatch.NotifyAppearanceChanged;
end;
procedure TSpkTab.SetCustomAppearance(const Value: TSpkToolbarAppearance);
begin
FCustomAppearance.assign(Value);
end;
procedure TSpkTab.SetDisabledImages(const Value: TImageList);
begin
FDisabledImages := Value;
FPanes.DisabledImages := Value;
end;
procedure TSpkTab.SetDisabledLargeImages(const Value: TImageList);
begin
FDisabledLargeImages := Value;
FPanes.DisabledLargeImages := Value;
end;
procedure TSpkTab.SetImages(const Value: TImageList);
begin
FImages := Value;
FPanes.Images := Value;
end;
procedure TSpkTab.SetLargeImages(const Value: TImageList);
begin
FLargeImages := Value;
FPanes.LargeImages := Value;
end;
procedure TSpkTab.SetAppearance(const Value: TSpkToolbarAppearance);
begin
FAppearance:=Value;
SetPaneAppearance;
if FToolbarDispatch<>nil then
FToolbarDispatch.NotifyMetricsChanged;
end;
procedure TSpkTab.SetCaption(const Value: string);
begin
FCaption := Value;
if assigned(FToolbarDispatch) then
FToolbarDispatch.NotifyMetricsChanged;
end;
procedure TSpkTab.SetOverrideAppearance(const Value: boolean);
begin
FOverrideAppearance := Value;
SetPaneAppearance;
if FToolbarDispatch<>nil then
FToolbarDispatch.NotifyMetricsChanged;
end;
procedure TSpkTab.SetPaneAppearance;
begin
if FOverrideAppearance then
FPanes.Appearance:=FCustomAppearance else
FPanes.Appearance:=FAppearance;
// Metoda pe�ni rol� makra - dlatego nie powiadamia dyspozytora o zmianie.
end;
procedure TSpkTab.SetVisible(const Value: boolean);
begin
FVisible := Value;
if FToolbarDispatch<>nil then
FToolbarDispatch.NotifyItemsChanged;
end;
{ TSpkTabs }
function TSpkTabs.Add: TSpkTab;
var Owner, Parent : TComponent;
i: Integer;
begin
if FRootComponent<>nil then
begin
Owner:=FRootComponent.Owner;
Parent:=FRootComponent;
end
else
begin
Owner:=nil;
Parent:=nil;
end;
result:=TSpkTab.create(Owner);
result.Parent:=Parent;
if FRootComponent<>nil then
begin
i:=1;
while FRootComponent.Owner.FindComponent('SpkTab'+inttostr(i))<>nil do
inc(i);
result.Name:='SpkTab'+inttostr(i);
end;
AddItem(result);
end;
constructor TSpkTabs.Create(RootComponent : TComponent);
begin
inherited Create(RootComponent);
FToolbarDispatch:=nil;
FAppearance:=nil;
FImages:=nil;
FDisabledImages:=nil;
FLargeImages:=nil;
FDisabledLargeImages:=nil;
end;
destructor TSpkTabs.Destroy;
begin
inherited Destroy;
end;
function TSpkTabs.GetItems(index: integer): TSpkTab;
begin
result:=TSpkTab(inherited Items[index]);
end;
function TSpkTabs.Insert(index: integer): TSpkTab;
var Owner, Parent : TComponent;
i: Integer;
begin
if (index<0) or (index>=self.Count) then
raise InternalException.create('TSpkTabs.Insert: Nieprawid�owy indeks!');
if FRootComponent<>nil then
begin
Owner:=FRootComponent.Owner;
Parent:=FRootComponent;
end
else
begin
Owner:=nil;
Parent:=nil;
end;
result:=TSpkTab.create(Owner);
result.Parent:=Parent;
if FRootComponent<>nil then
begin
i:=1;
while FRootComponent.Owner.FindComponent('SpkTab'+inttostr(i))<>nil do
inc(i);
result.Name:='SpkTab'+inttostr(i);
end;
InsertItem(index, result);
end;
procedure TSpkTabs.Notify(Item: TComponent;
Operation : TOperation);
begin
inherited Notify(Item, Operation);
case Operation of
opInsert: begin
// Ustawienie dyspozytora na nil spowoduje, �e podczas
// przypisywania w�asno�ci nie b�d� wo�ane metody Notify*
TSpkTab(Item).ToolbarDispatch:=nil;
TSpkTab(Item).Appearance:=self.FAppearance;
TSpkTab(Item).Images:=self.FImages;
TSpkTab(Item).DisabledImages:=self.FDisabledImages;
TSpkTab(Item).LargeImages:=self.FLargeImages;
TSpkTab(Item).DisabledLargeImages:=self.FDisabledLargeImages;
TSpkTab(Item).ToolbarDispatch:=self.FToolbarDispatch;
end;
opRemove: begin
if not(csDestroying in Item.ComponentState) then
begin
TSpkTab(Item).ToolbarDispatch:=nil;
TSpkTab(Item).Appearance:=nil;
TSpkTab(Item).Images:=nil;
TSpkTab(Item).DisabledImages:=nil;
TSpkTab(Item).LargeImages:=nil;
TSpkTab(Item).DisabledLargeImages:=nil;
end;
end;
end;
end;
procedure TSpkTabs.SetAppearance(const Value: TSpkToolbarAppearance);
var i: Integer;
begin
FAppearance := Value;
if self.count>0 then
for i := 0 to self.count - 1 do
self.Items[i].Appearance:=FAppearance;
end;
procedure TSpkTabs.SetDisabledImages(const Value: TImageList);
var i: Integer;
begin
FDisabledImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].DisabledImages:=Value;
end;
procedure TSpkTabs.SetDisabledLargeImages(const Value: TImageList);
var i: Integer;
begin
FDisabledLargeImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].DisabledLargeImages:=Value;
end;
procedure TSpkTabs.SetImages(const Value: TImageList);
var i: Integer;
begin
FImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].Images:=Value;
end;
procedure TSpkTabs.SetLargeImages(const Value: TImageList);
var i: Integer;
begin
FLargeImages := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
Items[i].LargeImages:=Value;
end;
procedure TSpkTabs.SetToolbarDispatch(const Value: TSpkBaseToolbarDispatch);
var i : integer;
begin
FToolbarDispatch := Value;
if self.Count>0 then
for i := 0 to self.count - 1 do
self.Items[i].ToolbarDispatch:=FToolbarDispatch;
end;
procedure TSpkTabs.Update;
begin
inherited Update;
if assigned(FToolbarDispatch) then
FToolbarDispatch.NotifyItemsChanged;
end;
initialization
RegisterClass(TSpkTab);
finalization
UnRegisterClass(TSpkTab);
end.

View File

@ -0,0 +1,196 @@
unit spkt_Tools;
(*******************************************************************************
* *
* Plik: spkt_Tools.pas *
* Opis: Klasy narz�dziowe u�atwiaj�ce renderowanie toolbara. *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
uses Windows, Graphics, SysUtils,
SpkMath, SpkGraphTools, SpkGUITools;
type TButtonTools = class sealed(TObject)
private
protected
public
class procedure DrawButton(Bitmap : TBitmap;
Rect : T2DIntRect;
FrameColor,
InnerLightColor,
InnerDarkColor,
GradientFrom,
GradientTo : TColor;
GradientKind : TBackgroundKind;
LeftEdgeOpen,
RightEdgeOpen,
TopEdgeOpen,
BottomEdgeOpen : boolean;
Radius : integer;
ClipRect : T2DIntRect);
end;
implementation
{ TButtonTools }
class procedure TButtonTools.DrawButton(Bitmap: TBitmap;
Rect: T2DIntRect; FrameColor, InnerLightColor, InnerDarkColor, GradientFrom,
GradientTo: TColor; GradientKind: TBackgroundKind; LeftEdgeOpen,
RightEdgeOpen, TopEdgeOpen, BottomEdgeOpen: boolean; Radius: integer;
ClipRect : T2DIntRect);
var x1, x2, y1, y2 : integer;
LeftClosed, TopClosed, RightClosed, BottomClosed : byte;
begin
if (Rect.Width<6) or (Rect.Height<6) or
(Rect.Width < 2*radius) or (Rect.Height < 2*Radius) then
exit;
if LeftEdgeOpen then LeftClosed:=0 else LeftClosed:=1;
if RightEdgeOpen then RightClosed:=0 else RightClosed:=1;
if TopEdgeOpen then TopClosed:=0 else TopClosed:=1;
if BottomEdgeOpen then BottomClosed:=0 else BottomClosed:=1;
TGuiTools.DrawRoundRect(Bitmap.Canvas,
Rect,
Radius,
GradientFrom,
GradientTo,
GradientKind,
ClipRect,
not(LeftEdgeOpen or TopEdgeOpen),
not(RightEdgeOpen or TopEdgeOpen),
not(LeftEdgeOpen or BottomEdgeOpen),
not(RightEdgeOpen or BottomEdgeOpen));
// Wewn�trzna kraw�d�
// *** G�ra ***
x1:=Rect.Left + radius * TopClosed * LeftClosed + LeftClosed;
x2:=Rect.Right - radius * TopClosed * RightClosed - RightClosed;
y1:=Rect.Top + TopClosed;
TGuiTools.DrawHLine(Bitmap, x1, x2, y1, InnerLightColor, ClipRect);
// *** D�� ***
x1:=Rect.Left + radius * BottomClosed * LeftClosed + LeftClosed;
x2:=Rect.Right - radius * BottomClosed * RightClosed - RightClosed;
y1:=Rect.Bottom - BottomClosed;
if BottomEdgeOpen then
TGuiTools.DrawHLine(Bitmap, x1, x2, y1, InnerDarkColor, ClipRect) else
TGuiTools.DrawHLine(Bitmap, x1, x2, y1, InnerLightColor, ClipRect);
// *** Lewo ***
y1:=Rect.Top + Radius * LeftClosed * TopClosed + TopClosed;
y2:=Rect.Bottom - Radius * LeftClosed * BottomClosed - BottomClosed;
x1:=Rect.Left + LeftClosed;
TGuiTools.DrawVLine(Bitmap, x1, y1, y2, InnerLightColor, ClipRect);
// *** Prawo ***
y1:=Rect.Top + Radius * RightClosed * TopClosed + TopClosed;
y2:=Rect.Bottom - Radius * RightClosed * BottomClosed - BottomClosed;
x1:=Rect.Right - RightClosed;
if RightEdgeOpen then
TGuiTools.DrawVLine(Bitmap, x1, y1, y2, InnerDarkColor, ClipRect) else
TGuiTools.DrawVLine(Bitmap, x1, y1, y2, InnerLightColor, ClipRect);
// Zaokr�glone naro�niki
if not(LeftEdgeOpen or TopEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.left + 1, Rect.Top + 1),
Radius,
cpLeftTop,
InnerLightColor,
ClipRect);
if not(RightEdgeOpen or TopEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.right - radius, Rect.Top + 1),
Radius,
cpRightTop,
InnerLightColor,
ClipRect);
if not(LeftEdgeOpen or BottomEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.left + 1, Rect.bottom - radius),
Radius,
cpLeftBottom,
InnerLightColor,
ClipRect);
if not(RightEdgeOpen or BottomEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.right - radius, Rect.bottom - radius),
Radius,
cpRightBottom,
InnerLightColor,
ClipRect);
// Zewn�trzna kraw�d�
// Zaokr�glone naro�niki
if not(TopEdgeOpen) then
begin
x1:=Rect.Left + Radius * LeftClosed;
x2:=Rect.Right - Radius * RightClosed;
y1:=Rect.Top;
TGuiTools.DrawHLine(Bitmap, x1, x2, y1, FrameColor, ClipRect);
end;
if not(BottomEdgeOpen) then
begin
x1:=Rect.Left + Radius * LeftClosed;
x2:=Rect.Right - Radius * RightClosed;
y1:=Rect.Bottom;
TGuiTools.DrawHLine(Bitmap, x1, x2, y1, FrameColor, ClipRect);
end;
if not(LeftEdgeOpen) then
begin
y1:=Rect.Top + Radius * TopClosed;
y2:=Rect.Bottom - Radius * BottomClosed;
x1:=Rect.Left;
TGuiTools.DrawVLine(Bitmap, x1, y1, y2, FrameColor, ClipRect);
end;
if not(RightEdgeOpen) then
begin
y1:=Rect.Top + Radius * TopClosed;
y2:=Rect.Bottom - Radius * BottomClosed;
x1:=Rect.Right;
TGuiTools.DrawVLine(Bitmap, x1, y1, y2, FrameColor, ClipRect);
end;
if not(LeftEdgeOpen or TopEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.left, Rect.Top),
Radius,
cpLeftTop,
FrameColor,
ClipRect);
if not(RightEdgeOpen or TopEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.right - radius + 1, Rect.Top),
Radius,
cpRightTop,
FrameColor,
ClipRect);
if not(LeftEdgeOpen or BottomEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.left, Rect.bottom - radius + 1),
Radius,
cpLeftBottom,
FrameColor,
ClipRect);
if not(RightEdgeOpen or BottomEdgeOpen) then
TGuiTools.DrawAARoundCorner(Bitmap,
T2DIntPoint.create(Rect.right - radius + 1, Rect.bottom - radius + 1),
Radius,
cpRightBottom,
FrameColor,
ClipRect);
end;
end.

View File

@ -0,0 +1,302 @@
unit spkt_Types;
(*******************************************************************************
* *
* Plik: spkt_Types.pas *
* Opis: Definicje typ�w u�ywanych podczas pracy toolbara *
* Copyright: (c) 2009 by Spook. Jakiekolwiek u�ycie komponentu bez *
* uprzedniego uzyskania licencji od autora stanowi z�amanie *
* prawa autorskiego! *
* *
*******************************************************************************)
interface
uses Windows, Controls, Classes, ContNrs, SysUtils, Dialogs,
spkt_Exceptions;
type TSpkListState = (lsNeedsProcessing, lsReady);
type TSpkComponent = class(TComponent)
private
protected
FParent : TComponent;
// *** Gettery i settery ***
function GetParent: TComponent;
procedure SetParent(const Value: TComponent);
public
// *** Konstruktor ***
constructor Create(AOwner : TComponent); override;
// *** Obs�uga parenta ***
function HasParent : boolean; override;
function GetParentComponent : TComponent; override;
procedure SetParentComponent(Value : TComponent); override;
property Parent : TComponent read GetParent write SetParent;
end;
type TSpkCollection = class(TPersistent)
private
protected
FList : TObjectList;
FNames : TStringList;
FListState : TSpkListState;
FRootComponent : TComponent;
// *** Metody reakcji na zmiany w li�cie ***
procedure Notify(Item : TComponent; Operation : TOperation); virtual;
procedure Update; virtual;
// *** Wewn�trzne metody dodawania i wstawiania element�w ***
procedure AddItem(AItem : TComponent);
procedure InsertItem(index : integer; AItem : TComponent);
// *** Gettery i settery ***
function GetItems(index: integer): TComponent; virtual;
public
// *** Konstruktor, destruktor ***
constructor Create(RootComponent : TComponent); reintroduce; virtual;
destructor Destroy; override;
// *** Obs�uga listy ***
procedure Clear;
function Count : integer;
procedure Delete(index : integer); virtual;
function IndexOf(Item : TComponent) : integer;
procedure Remove(Item : TComponent); virtual;
procedure RemoveReference(Item : TComponent);
procedure Exchange(item1, item2 : integer);
procedure Move(IndexFrom, IndexTo : integer);
// *** Reader, writer i obs�uga designtime i DFM ***
procedure WriteNames(Writer : TWriter); virtual;
procedure ReadNames(Reader : TReader); virtual;
procedure ProcessNames(Owner : TComponent); virtual;
property ListState : TSpkListState read FListState;
property Items[index : integer] : TComponent read GetItems; default;
end;
implementation
{ TSpkCollection }
procedure TSpkCollection.AddItem(AItem: TComponent);
begin
// Ta metoda mo�e by� wywo�ywana bez przetworzenia nazw (w szczeg�lno�ci, metoda
// przetwarzaj�ca nazwy korzysta z AddItem)
Notify(AItem, opInsert);
FList.Add(AItem);
Update;
end;
procedure TSpkCollection.Clear;
begin
FList.Clear;
Update;
end;
function TSpkCollection.Count: integer;
begin
result:=FList.Count;
end;
constructor TSpkCollection.Create(RootComponent : TComponent);
begin
inherited Create;
FRootComponent:=RootComponent;
FNames:=TStringList.create;
FList:=TObjectList.Create;
FList.OwnsObjects:=true;
FListState:=lsReady;
end;
procedure TSpkCollection.Delete(index: integer);
begin
if (index<0) or (index>=FList.count) then
raise InternalException.Create('TSpkCollection.Delete: Nieprawid�owy indeks!');
Notify(TComponent(FList[index]), opRemove);
FList.Delete(index);
Update;
end;
destructor TSpkCollection.Destroy;
begin
FNames.Free;
FList.Free;
inherited;
end;
procedure TSpkCollection.Exchange(item1, item2: integer);
begin
FList.Exchange(item1, item2);
Update;
end;
function TSpkCollection.GetItems(index: integer): TComponent;
begin
if (index<0) or (index>=FList.Count) then
raise InternalException.create('TSpkCollection.GetItems: Nieprawid�owy indeks!');
result:=TComponent(FList[index]);
end;
function TSpkCollection.IndexOf(Item: TComponent): integer;
begin
result:=FList.IndexOf(Item);
end;
procedure TSpkCollection.InsertItem(index: integer; AItem: TComponent);
begin
if (index<0) or (index>FList.Count) then
raise InternalException.Create('TSpkCollection.Insert: Nieprawid�owy indeks!');
Notify(AItem, opInsert);
FList.Insert(index, AItem);
Update;
end;
procedure TSpkCollection.Move(IndexFrom, IndexTo: integer);
begin
if (indexFrom<0) or (indexFrom>=FList.Count) or
(indexTo<0) or (indexTo>=FList.Count) then
raise InternalException.Create('TSpkCollection.Move: Nieprawid�owy indeks!');
FList.Move(IndexFrom, IndexTo);
Update;
end;
procedure TSpkCollection.Notify(Item: TComponent; Operation: TOperation);
begin
//
end;
procedure TSpkCollection.ProcessNames(Owner : TComponent);
var s : string;
begin
FList.Clear;
if Owner<>nil then
for s in FNames do
AddItem(Owner.FindComponent(s));
FNames.Clear;
FListState:=lsReady;
end;
procedure TSpkCollection.ReadNames(Reader: TReader);
begin
Reader.ReadListBegin;
FNames.Clear;
while not(Reader.EndOfList) do
FNames.Add(Reader.ReadString);
Reader.ReadListEnd;
FListState:=lsNeedsProcessing;
end;
procedure TSpkCollection.Remove(Item: TComponent);
var i : integer;
begin
i:=FList.IndexOf(Item);
if i>=0 then
begin
Notify(Item, opRemove);
FList.Delete(i);
Update;
end;
end;
procedure TSpkCollection.RemoveReference(Item: TComponent);
var i : integer;
begin
i:=FList.IndexOf(Item);
if i>=0 then
begin
Notify(Item, opRemove);
FList.Extract(Item);
Update;
end;
end;
procedure TSpkCollection.Update;
begin
//
end;
procedure TSpkCollection.WriteNames(Writer: TWriter);
var Item : pointer;
begin
Writer.WriteListBegin;
for Item in FList do
Writer.WriteString(TComponent(Item).Name);
Writer.WriteListEnd;
end;
{ TSpkComponent }
constructor TSpkComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FParent:=nil;
end;
function TSpkComponent.GetParent: TComponent;
begin
result:=GetParentComponent;
end;
function TSpkComponent.GetParentComponent: TComponent;
begin
result:=FParent;
end;
function TSpkComponent.HasParent: boolean;
begin
result:=FParent<>nil;
end;
procedure TSpkComponent.SetParent(const Value: TComponent);
begin
SetParentComponent(Value);
end;
procedure TSpkComponent.SetParentComponent(Value: TComponent);
begin
FParent:=Value;
end;
end.