spkToolbar: Add TMenuButton, patch by Husker (https://forum.lazarus.freepascal.org/index.php/topic,51552.msg379413.html#msg379413). No complete, yet.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7731 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-10-02 20:44:24 +00:00
parent c25230eb89
commit 4c1488174c
3 changed files with 1316 additions and 11 deletions

View File

@ -27,6 +27,8 @@ type
TSpkElementStyle = (esRounded, esRectangle);
TSpkMenuButtonShapeStyle = (mbssRounded, mbssRectangle);
TSpkStyle = (
spkOffice2007Blue,
spkOffice2007Silver, spkOffice2007SilverTurquoise,
@ -91,6 +93,95 @@ type
end;
{ TSpkMenuButtonAppearance }
// Note :
// For consistancy in appearance drawing with Tabs, CornerRadius and
// CaptionHeight used to draw Menu Button come from TSpkTabAppearance.
TSpkMenuButtonAppearance = class(TPersistent)
private
FDispatch: TSpkBaseAppearanceDispatch;
FCaptionFont: TFont;
FIdleFrameColor: TColor;
FIdleGradientFromColor: TColor;
FIdleGradientToColor: TColor;
FIdleGradientType: TBackgroundKind;
FIdleCaptionColor: TColor;
FHotTrackFrameColor: TColor;
FHotTrackGradientFromColor: TColor;
FHotTrackGradientToColor: TColor;
FHotTrackGradientType: TBackgroundKind;
FHotTrackCaptionColor: TColor;
FHotTrackBrightnessChange: Integer;
FActiveFrameColor: TColor;
FActiveGradientFromColor: TColor;
FActiveGradientToColor: TColor;
FActiveGradientType: TBackgroundKind;
FActiveCaptionColor: TColor;
FShapeStyle: TSpkMenubuttonShapeStyle;
procedure SetActiveCaptionColor(const Value: TColor);
procedure SetActiveFrameColor(const Value: TColor);
procedure SetActiveGradientFromColor(const Value: TColor);
procedure SetActiveGradientToColor(const Value: TColor);
procedure SetActiveGradientType(const Value: TBackgroundKind);
procedure SetCaptionFont(const Value: TFont);
procedure SetHotTrackCaptionColor(const Value: TColor);
procedure SetHotTrackFrameColor(const Value: TColor);
procedure SetHotTrackGradientFromColor(const Value: TColor);
procedure SetHotTrackGradientToColor(const Value: TColor);
procedure SetHotTrackGradientType(const Value: TBackgroundKind);
procedure SetHotTrackBrightnessChange(const Value: Integer);
procedure SetIdleCaptionColor(const Value: TColor);
procedure SetIdleFrameColor(const Value: TColor);
procedure SetIdleGradientFromColor(const Value: TColor);
procedure SetIdleGradientToColor(const Value: TColor);
procedure SetIdleGradientType(const Value: TBackgroundKind);
procedure SetShapeStyle(const Value: TSpkMenuButtonShapeStyle);
procedure CaptionFontChange(Sender: TObject);
public
constructor Create(ADispatch: TSpkBaseAppearanceDispatch);
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
procedure LoadFromXML(Node: TSpkXMLNode);
procedure SaveToPascal(AList: TStrings);
procedure SaveToXML(Node: TSpkXMLNode);
procedure Reset(AStyle: TSpkStyle = spkOffice2007Blue);
procedure GetActiveColors(IsChecked: Boolean; out ACaptionColor, AFrameColor,
AGradientFromColor, AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
procedure GetHotTrackColors(IsChecked: Boolean; out ACaptionColor, AFrameColor,
AGradientFromColor, AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
procedure GetIdleColors(IsChecked: Boolean; out ACaptionColor, AFrameColor,
AGradientFromColor, AGradientToColor: TColor; out AGradientKind: TBackgroundKind;
ABrightenBy: Integer = 0);
published
property CaptionFont: TFont read FCaptionFont write SetCaptionFont;
property IdleFrameColor: TColor read FIdleFrameColor write SetIdleFrameColor;
property IdleGradientFromColor: TColor read FIdleGradientFromColor write SetIdleGradientFromColor;
property IdleGradientToColor: TColor read FIdleGradientToColor write SetIdleGradientToColor;
property IdleGradientType: TBackgroundKind read FIdleGradientType write SetIdleGradientType;
property IdleCaptionColor: TColor read FIdleCaptionColor write SetIdleCaptionColor;
property HotTrackFrameColor: TColor read FHotTrackFrameColor write SetHotTrackFrameColor;
property HotTrackGradientFromColor: TColor read FHotTrackGradientFromColor write SetHotTrackGradientFromColor;
property HotTrackGradientToColor: TColor read FHotTrackGradientToColor write SetHotTrackGradientToColor;
property HotTrackGradientType: TBackgroundKind read FHotTrackGradientType write SetHotTrackGradientType;
property HotTrackCaptionColor: TColor read FHotTrackCaptionColor write SetHotTrackCaptionColor;
property HotTrackBrightnessChange: Integer read FHotTrackBrightnessChange write SetHotTrackBrightnessChange default 20;
property ActiveFrameColor: TColor read FActiveFrameColor write SetActiveFrameColor;
property ActiveGradientFromColor: TColor read FActiveGradientFromColor write SetActiveGradientFromColor;
property ActiveGradientToColor: TColor read FActiveGradientToColor write SetActiveGradientToColor;
property ActiveGradientType: TBackgroundKind read FActiveGradientType write SetActiveGradientType;
property ActiveCaptionColor: TColor read FActiveCaptionColor write SetActiveCaptionColor;
property ShapeStyle: TSpkMenuButtonShapeStyle read FShapeStyle write SetShapeStyle;
end;
{ TSpkPaneAppearance }
TSpkPaneAppearance = class(TPersistent)
@ -261,12 +352,14 @@ type
private
FAppearanceDispatch: TSpkToolbarAppearanceDispatch;
FTab: TSpkTabAppearance;
FMenuButton: TSpkMenuButtonAppearance;
FPane: TSpkPaneAppearance;
FElement: TSpkElementAppearance;
FDispatch: TSpkBaseAppearanceDispatch;
procedure SetElementAppearance(const Value: TSpkElementAppearance);
procedure SetPaneAppearance(const Value: TSpkPaneAppearance);
procedure SetTabAppearance(const Value: TSpkTabAppearance);
procedure SetMenuButtonAppearance(const Value: TSpkMenuButtonAppearance);
public
constructor Create(ADispatch: TSpkBaseAppearanceDispatch); reintroduce;
destructor Destroy; override;
@ -278,6 +371,7 @@ type
procedure LoadFromXML(Node: TSpkXMLNode);
published
property Tab: TSpkTabAppearance read FTab write SetTabAppearance;
property MenuButton: TSpkMenuButtonAppearance read FMenuButton write SetMenuButtonAppearance;
property Pane: TSpkPaneAppearance read FPane write SetPaneAppearance;
property Element: TSpkElementAppearance read FElement write SetElementAppearance;
end;
@ -1587,6 +1681,7 @@ begin
FDispatch := ADispatch;
FAppearanceDispatch := TSpkToolbarAppearanceDispatch.Create(self);
FTab := TSpkTabAppearance.Create(FAppearanceDispatch);
FMenuButton := TSpkMenuButtonAppearance.Create(FAppearanceDispatch);
FPane := TSpkPaneAppearance.create(FAppearanceDispatch);
FElement := TSpkElementAppearance.create(FAppearanceDispatch);
end;
@ -1595,6 +1690,7 @@ destructor TSpkToolbarAppearance.Destroy;
begin
FElement.Free;
FPane.Free;
FMenuButton.Free;
FTab.Free;
FAppearanceDispatch.Free;
inherited;
@ -1609,6 +1705,7 @@ begin
Src := TSpkToolbarAppearance(Source);
self.FTab.Assign(Src.Tab);
self.FMenuButton.Assign(Src.MenuButton);
self.FPane.Assign(Src.Pane);
self.FElement.Assign(Src.Element);
@ -1623,6 +1720,7 @@ var
Subnode: TSpkXMLNode;
begin
Tab.Reset;
MenuButton.Reset;
Pane.Reset;
Element.Reset;
@ -1633,6 +1731,10 @@ begin
if Assigned(Subnode) then
Tab.LoadFromXML(Subnode);
Subnode := Node['Menu Button', false];
if Assigned(Subnode) then
MenuButton.LoadFromXML(Subnode);
Subnode := Node['Pane', false];
if Assigned(Subnode) then
Pane.LoadFromXML(Subnode);
@ -1651,6 +1753,7 @@ end;
procedure TSpkToolbarAppearance.Reset(AStyle: TSpkStyle = spkOffice2007Blue);
begin
FTab.Reset(AStyle);
FMenuButton.Reset(AStyle);
FPane.Reset(AStyle);
FElement.Reset(AStyle);
if Assigned(FAppearanceDispatch) then
@ -1661,6 +1764,7 @@ procedure TSpkToolbarAppearance.SaveToPascal(AList: TStrings);
begin
AList.Add('with Appearance do begin');
FTab.SaveToPascal(AList);
FMenuButton.SaveToPascal(AList);
FPane.SaveToPascal(AList);
FElement.SaveToPascal(AList);
AList.Add('end;');
@ -1673,6 +1777,9 @@ begin
Subnode := Node['Tab',true];
FTab.SaveToXML(Subnode);
Subnode := Node['Menu Button',true];
FMenuButton.SaveToXML(Subnode);
Subnode := Node['Pane',true];
FPane.SaveToXML(Subnode);
@ -1701,4 +1808,570 @@ begin
//AFont.Assign(Screen.MenuFont); // wp: If this really is harmful this proc should be removed.
end;
procedure TSpkToolbarAppearance.SetMenubuttonAppearance(const Value: TSpkMenuButtonAppearance);
begin
FMenuButton.Assign(Value);
end;
//****
constructor TSpkMenuButtonAppearance.Create(ADispatch: TSpkBaseAppearanceDispatch);
begin
inherited Create;
FDispatch := ADispatch;
FCaptionFont := TFont.Create;
FCaptionFont.OnChange := CaptionFontChange;
FHotTrackBrightnessChange := 40;
Reset;
end;
destructor TSpkMenuButtonAppearance.Destroy;
begin
FCaptionFont.Free;
inherited Destroy;
end;
procedure TSpkMenuButtonAppearance.Assign(Source: TPersistent);
var
SrcAppearance: TSpkMenuButtonAppearance;
begin
if Source is TSpkMenuButtonAppearance then
begin
SrcAppearance := TSpkMenuButtonAppearance(Source);
FCaptionFont.Assign(SrcAppearance.CaptionFont);
FIdleFrameColor := SrcAppearance.IdleFrameColor;
FIdleGradientFromColor := SrcAppearance.IdleGradientFromColor;
FIdleGradientToColor := SrcAppearance.IdleGradientToColor;
FIdleGradientType := SrcAppearance.IdleGradientType;
FIdleCaptionColor := SrcAppearance.IdleCaptionColor;
FHotTrackFrameColor := SrcAppearance.HotTrackFrameColor;
FHotTrackGradientFromColor := SrcAppearance.HotTrackGradientFromColor;
FHotTrackGradientToColor := SrcAppearance.HotTrackGradientToColor;
FHotTrackGradientType := SrcAppearance.HotTrackGradientType;
FHotTrackCaptionColor := SrcAppearance.HotTrackCaptionColor;
FHotTrackBrightnessChange := SrcAppearance.HotTrackBrightnessChange;
FActiveFrameColor := SrcAppearance.ActiveFrameColor;
FActiveGradientFromColor := SrcAppearance.ActiveGradientFromColor;
FActiveGradientToColor := SrcAppearance.ActiveGradientToColor;
FActiveGradientType := SrcAppearance.ActiveGradientType;
FActiveCaptionColor := SrcAppearance.ActiveCaptionColor;
FShapeStyle := SrcAppearance.ShapeStyle;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end else
raise AssignException.Create('TSpkMenuButtonAppearance.Assign: Cannot assign the objecct '+Source.ClassName+' to TSpkMenuButtonAppearance!');
end;
procedure TSpkMenuButtonAppearance.CaptionFontChange(Sender: TObject);
begin
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.GetActiveColors(IsChecked: Boolean;
out ACaptionColor, AFrameColor, AGradientFromColor, AGradientToColor: TColor;
out AGradientKind: TBackgroundKind; ABrightenBy: Integer = 0);
const
DELTA = -20;
begin
ACaptionColor := FActiveCaptionColor;
AFrameColor := FActiveFrameColor;
AGradientFromColor := FActiveGradientFromColor;
AGradientToColor := FActiveGradientToColor;
AGradientKind := FActiveGradientType;
if IsChecked then
ABrightenBy := DELTA + ABrightenBy;
if ABrightenBy <> 0 then
begin
ACaptionColor := TColorTools.Brighten(ACaptionColor, ABrightenBy);
AFrameColor := TColorTools.Brighten(AFrameColor, ABrightenBy);
AGradientFromColor := TColorTools.Brighten(AGradientFromColor, ABrightenBy);
AGradientToColor := TColorTools.Brighten(AGradientToColor, ABrightenBy);
end;
end;
procedure TSpkMenuButtonAppearance.GetIdleColors(IsChecked: Boolean;
out ACaptionColor, AFrameColor, AGradientFromColor, AGradientToColor: TColor;
out AGradientKind: TBackgroundKind; ABrightenBy: Integer = 0);
const
DELTA = 10;
begin
if IsChecked then
begin
ABrightenBy := DELTA + ABrightenBy;
ACaptionColor := FActiveCaptionColor;
AFrameColor := FActiveFrameColor;
AGradientFromColor := FActiveGradientFromColor;
AGradientToColor := FActiveGradientToColor;
AGradientKind := FActiveGradientType;
end else
begin
ACaptionColor := FIdleCaptionColor;
AFrameColor := FIdleFrameColor;
AGradientFromColor := FIdleGradientFromColor;
AGradientToColor := FIdleGradientToColor;
AGradientKind := FIdleGradientType;
end;
if ABrightenBy <> 0 then
begin
ACaptionColor := TColorTools.Brighten(ACaptionColor, ABrightenBy);
AFrameColor := TColorTools.Brighten(AFrameColor, ABrightenBy);
AGradientFromColor := TColorTools.Brighten(AGradientFromColor, ABrightenBy);
AGradientToColor := TColorTools.Brighten(AGradientToColor, ABrightenBy);
end;
end;
procedure TSpkMenuButtonAppearance.GetHotTrackColors(IsChecked: Boolean;
out ACaptionColor, AFrameColor, AGradientFromColor, AGradientToColor: TColor;
out AGradientKind: TBackgroundKind; ABrightenBy: Integer = 0);
const
DELTA = 20;
begin
if IsChecked then begin
ABrightenBy := ABrightenBy + DELTA;
ACaptionColor := FActiveCaptionColor;
AFrameColor := FActiveFrameColor;
AGradientFromColor := FActiveGradientFromColor;
AGradientToColor := FActiveGradientToColor;
AGradientKind := FActiveGradientType;
end else begin
ACaptionColor := FHotTrackCaptionColor;
AFrameColor := FHotTrackFrameColor;
AGradientFromColor := FHotTrackGradientFromColor;
AGradientToColor := FHotTrackGradientToColor;
AGradientKind := FHotTrackGradientType;
end;
if ABrightenBy <> 0 then begin
ACaptionColor := TColorTools.Brighten(ACaptionColor, ABrightenBy);
AFrameColor := TColorTools.Brighten(AFrameColor, ABrightenBy);
AGradientFromColor := TColorTools.Brighten(AGradientFromColor, ABrightenBy);
AGradientToColor := TColorTools.Brighten(AGradientToColor, ABrightenBy);
end;
end;
procedure TSpkMenuButtonAppearance.LoadFromXML(Node: TSpkXMLNode);
var
Subnode: TSpkXMLNode;
begin
if not Assigned(Node) then
exit;
Subnode := Node['CaptionFont', false];
if Assigned(Subnode) then
TSpkXMLTools.Load(Subnode, FCaptionFont);
// Idle
Subnode := Node['IdleFrameColor', false];
if Assigned(Subnode) then
FIdleFrameColor := Subnode.TextAsColor;
Subnode := Node['IdleGradientFromColor', false];
if Assigned(Subnode) then
FIdleGradientFromColor := Subnode.TextAsColor;
Subnode := Node['IdleGradientToColor', false];
if Assigned(Subnode) then
FIdleGradientToColor := Subnode.TextAsColor;
Subnode := Node['IdleGradientType', false];
if Assigned(Subnode) then
FIdleGradientType := TBackgroundKind(Subnode.TextAsInteger);
Subnode := Node['IdleCaptionColor', false];
if Assigned(Subnode) then
FIdleCaptionColor := Subnode.TextAsColor;
// HotTrack
Subnode := Node['HottrackFrameColor', false];
if Assigned(Subnode) then
FHottrackFrameColor := Subnode.TextAsColor;
Subnode := Node['HottrackGradientFromColor', false];
if Assigned(Subnode) then
FHottrackGradientFromColor := Subnode.TextAsColor;
Subnode := Node['HottrackGradientToColor', false];
if Assigned(Subnode) then
FHottrackGradientToColor := Subnode.TextAsColor;
Subnode := Node['HottrackGradientType', false];
if Assigned(Subnode) then
FHottrackGradientType := TBackgroundKind(Subnode.TextAsInteger);
Subnode := Node['HottrackCaptionColor', false];
if Assigned(Subnode) then
FHottrackCaptionColor := Subnode.TextAsColor;
Subnode := Node['HottrackBrightnessChange', false];
if Assigned(Subnode) then
FHottrackBrightnessChange := Subnode.TextAsInteger;
// Active
Subnode := Node['ActiveFrameColor', false];
if Assigned(Subnode) then
FActiveFrameColor := Subnode.TextAsColor;
Subnode := Node['ActiveGradientFromColor', false];
if Assigned(Subnode) then
FActiveGradientFromColor := Subnode.TextAsColor;
Subnode := Node['ActiveGradientToColor', false];
if Assigned(Subnode) then
FActiveGradientToColor := Subnode.TextAsColor;
Subnode := Node['ActiveGradientType', false];
if Assigned(Subnode) then
FActiveGradientType := TBackgroundKind(Subnode.TextAsInteger);
Subnode := Node['ActiveCaptionColor', false];
if Assigned(Subnode) then
FActiveCaptionColor := Subnode.TextAsColor;
// Other
Subnode := Node['ShapeStyle', false];
if Assigned(SubNode) then
FShapeStyle := TSpkMenuButtonShapeStyle(Subnode.TextAsInteger);
end;
procedure TSpkMenuButtonAppearance.Reset(AStyle: TSpkStyle = spkOffice2007Blue);
begin
SetDefaultFont(FCaptionFont);
case AStyle of
spkOffice2007Blue,
spkOffice2007Silver,
spkOffice2007SilverTurquoise:
begin
FCaptionFont.Style := [];
FCaptionFont.Color := $00FFFFFF;
FIdleFrameColor := $00A1481F;
FIdleGradientFromColor := $00DF8A47;
FIdleGradientToColor := $00B76129;
FIdleGradientType := bkConcave;
FIdleCaptionColor := $00FFFFFF;
FHotTrackFrameColor := $00A1481F;
FHotTrackGradientFromColor := $00E79D5B;
FHotTrackGradientToColor := $00BE6731;
FHotTrackGradientType := bkConcave;
FHotTrackCaptionColor := $00FFFFFF;
FHotTrackBrightnessChange := 40;
FActiveFrameColor := $00A94D1C;
FActiveGradientFromColor := $00DD8A3E;
FActiveGradientToColor := $00BD6126;
FActiveGradientType := bkConcave;
FActiveCaptionColor := $00FFFFFF;
FShapeStyle := mbssRounded;
end;
//spkOffice2007Silver,
//spkOffice2007SilverTurquoise:
// begin
// FCaptionFont.Style := [];
// FCaptionFont.Color := $008B4215;
// FIdleFrameColor := $00B8B1A9;
// FIdleGradientFromColor := $00F4F4F2;
// FIdleGradientToColor := $00E6E5E3;
// FIdleGradientType := bkConcave;
// FIdleCaptionColor := $0060655F;
// FHotTrackBrightnessChange := 40;
// FHotTrackFrameColor := $009BCFDD;
// FHotTrackGradientFromColor := $00DAFCFF;
// FHotTrackGradientToColor := $004DD7FF;
// FHotTrackGradientType := bkConcave;
// FHotTrackCaptionColor := $0087426F;
// if AStyle = spkOffice2007SilverTurquoise then
// begin
// FHotTrackFrameColor := $009E7D0E;
// FHotTrackGradientFromColor := $00FBF1D0;
// FHotTrackGradientToColor := $00F4DD8A;
// end;
// FActiveFrameColor := $0054768B;
// FActiveGradientFromColor := $006CBBFE;
// FActiveGradientToColor := $003D92FC;
// FActiveGradientType := bkConcave;
// FActiveCaptionColor := $0080426E;
// if AStyle = spkOffice2007SilverTurquoise then
// begin
// FActiveFrameColor := $0077620B;
// FActiveGradientFromColor := $00F4DB82;
// FActiveGradientToColor := $00ECC53E;
// end;
// FShapeStyle := mbssRounded;
// end;
spkMetroLight:
begin
FCaptionFont.Style := [];
FCaptionFont.Color := $00FFFFFF;
FIdleFrameColor := $00B46600;
FIdleGradientFromColor := $00B46600;
FIdleGradientToColor := $00B46600;
FIdleGradientType := bkSolid;
FIdleCaptionColor := $00FFFFFF;
FHotTrackFrameColor := $00DD7D00;
FHotTrackGradientFromColor := $00DD7D00;
FHotTrackGradientToColor := $00DD7D00;
FHotTrackGradientType := bkSolid;
FHotTrackCaptionColor := $00FFFFFF;
FHotTrackBrightnessChange := 20;
FActiveFrameColor := $00965500;
FActiveGradientFromColor := $00965500;
FActiveGradientToColor := $00965500;
FActiveGradientType := bkSolid;
FActiveCaptionColor := $00FFFFFF;
FShapeStyle := mbssRectangle;
end;
spkMetroDark:
begin
FCaptionFont.Style := [];
FCaptionFont.Color := $00FFFFFF;
FIdleFrameColor := $00B46600;
FIdleGradientFromColor := $00B46600;
FIdleGradientToColor := $00B46600;
FIdleGradientType := bkSolid;
FIdleCaptionColor := $00FFFFFF;
FHotTrackFrameColor := $00DD7D00;
FHotTrackGradientFromColor := $00DD7D00;
FHotTrackGradientToColor := $00DD7D00;
FHotTrackGradientType := bkSolid;
FHotTrackCaptionColor := $00FFFFFF;
FHotTrackBrightnessChange := 10;
FActiveFrameColor := $00965500;
FActiveGradientFromColor := $00965500;
FActiveGradientToColor := $00965500;
FActiveGradientType := bkSolid;
FActiveCaptionColor := $00FFFFFF;
FShapeStyle := mbssRectangle;
end;
end;
end;
procedure TSpkMenuButtonAppearance.SaveToPascal(AList: TStrings);
begin
with AList do begin
Add(' with MenuButton do begin');
SaveFontToPascal(AList, FCaptionFont, ' CaptionFont');
Add(' IdleFrameColor := $' + IntToHex(FIdleFrameColor, 8) + ';');
Add(' IdleGradientFromColor := $' + IntToHex(FIdleGradientFromColor, 8) + ';');
Add(' IdleGradientToColor := $' + IntToHex(FIdleGradientToColor, 8) + ';');
Add(' IdleGradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FIdleGradientType)) + ';');
Add(' IdleCaptionColor := $' + IntToHex(FIdleCaptionColor, 8) + ';');
Add(' HotTrackFrameColor := $' + IntToHex(FHotTrackFrameColor, 8) + ';');
Add(' HotTrackGradientFromColor := $' + IntToHex(FHotTrackGradientFromColor, 8) + ';');
Add(' HotTrackGradientToColor := $' + IntToHex(FHotTrackGradientToColor, 8) + ';');
Add(' HotTrackGradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FHotTrackGradientType)) + ';');
Add(' HotTrackCaptionColor := $' + IntToHex(FHotTrackCaptionColor, 8) + ';');
Add(' HotTrackBrightnessChange := ' + IntToStr(FHotTrackBrightnessChange) + ';');
Add(' ActiveFrameColor := $' + IntToHex(FActiveFrameColor, 8) + ';');
Add(' ActiveGradientFromColor := $' + IntToHex(FActiveGradientFromColor, 8) + ';');
Add(' ActiveGradientToColor := $' + IntToHex(FActiveGradientToColor, 8) + ';');
Add(' ActiveGradientType := ' + GetEnumName(TypeInfo(TBackgroundKind), ord(FActiveGradientType)) + ';');
Add(' ActiveCaptionColor := $' + IntToHex(FActiveCaptionColor, 8) + ';');
Add(' ShapeStyle := ' + GetEnumName(TypeInfo(TSpkMenuButtonShapeStyle), ord(FShapeStyle)) + ';');
Add(' end;');
end;
end;
procedure TSpkMenuButtonAppearance.SaveToXML(Node: TSpkXMLNode);
var
Subnode: TSpkXMLNode;
begin
if not Assigned(Node) then
exit;
Subnode := Node['CaptionFont', true];
TSpkXMLTools.Save(Subnode, FCaptionFont);
// Idle
Subnode := Node['IdleFrameColor', true];
Subnode.TextAsColor := FIdleFrameColor;
Subnode := Node['IdleGradientFromColor', true];
Subnode.TextAsColor := FIdleGradientFromColor;
Subnode := Node['IdleGradientToColor', true];
Subnode.TextAsColor := FIdleGradientToColor;
Subnode := Node['IdleGradientType', true];
Subnode.TextAsInteger := integer(FIdleGradientType);
Subnode := Node['IdleCaptionColor', true];
Subnode.TextAsColor := FIdleCaptionColor;
// HotTrack
Subnode := Node['HottrackFrameColor', true];
Subnode.TextAsColor := FHottrackFrameColor;
Subnode := Node['HottrackGradientFromColor', true];
Subnode.TextAsColor := FHottrackGradientFromColor;
Subnode := Node['HottrackGradientToColor', true];
Subnode.TextAsColor := FHottrackGradientToColor;
Subnode := Node['HottrackGradientType', true];
Subnode.TextAsInteger := integer(FHottrackGradientType);
Subnode := Node['HottrackCaptionColor', true];
Subnode.TextAsColor := FHottrackCaptionColor;
Subnode := Node['HottrackBrightnessChange', true];
Subnode.TextAsInteger := FHotTrackBrightnessChange;
// Active
Subnode := Node['ActiveFrameColor', true];
Subnode.TextAsColor := FActiveFrameColor;
Subnode := Node['ActiveGradientFromColor', true];
Subnode.TextAsColor := FActiveGradientFromColor;
Subnode := Node['ActiveGradientToColor', true];
Subnode.TextAsColor := FActiveGradientToColor;
Subnode := Node['ActiveGradientType', true];
Subnode.TextAsInteger := integer(FActiveGradientType);
Subnode := Node['ActiveCaptionColor', true];
Subnode.TextAsColor := FActiveCaptionColor;
// Other
Subnode := Node['ShapeStyle', true];
Subnode.TextAsInteger := integer(FShapeStyle);
end;
procedure TSpkMenuButtonAppearance.SetActiveCaptionColor(const Value: TColor);
begin
FActiveCaptionColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetActiveFrameColor(const Value: TColor);
begin
FActiveFrameColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetActiveGradientFromColor(const Value: TColor);
begin
FActiveGradientFromColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetActiveGradientToColor(const Value: TColor);
begin
FActiveGradientToColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetActiveGradientType(const Value: TBackgroundKind);
begin
FActiveGradientType := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetCaptionFont(const Value: TFont);
begin
FCaptionFont.Assign(Value);
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetHotTrackBrightnessChange(const Value: Integer);
begin
FHotTrackBrightnessChange := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetHotTrackCaptionColor(const Value: TColor);
begin
FHotTrackCaptionColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetHotTrackFrameColor(const Value: TColor);
begin
FHotTrackFrameColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetHotTrackGradientFromColor(const Value: TColor);
begin
FHotTrackGradientFromColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetHotTrackGradientToColor(const Value: TColor);
begin
FHotTrackGradientToColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetHotTrackGradientType(const Value: TBackgroundKind);
begin
FHotTrackGradientType := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetIdleCaptionColor(const Value: TColor);
begin
FIdleCaptionColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetIdleFrameColor(const Value: TColor);
begin
FIdleFrameColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetIdleGradientFromColor(const Value: TColor);
begin
FIdleGradientFromColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetIdleGradientToColor(const Value: TColor);
begin
FIdleGradientToColor := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetIdleGradientType(const Value: TBackgroundKind);
begin
FIdleGradientType := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
procedure TSpkMenuButtonAppearance.SetShapeStyle(const Value: TSpkMenuButtonShapeStyle);
begin
FShapeStyle := Value;
if FDispatch <> nil then
FDispatch.NotifyAppearanceChanged;
end;
end.