986 lines
34 KiB
ObjectPascal
986 lines
34 KiB
ObjectPascal
{================================================================
|
|
|
|
XiButton 1.13
|
|
Written by Eugene Genev
|
|
|
|
=================================================================}
|
|
|
|
unit XiButton;
|
|
{$mode delphi}{$H+}
|
|
interface
|
|
|
|
uses
|
|
{Windows,} Classes, Controls, Graphics, Messages, Forms, Dialogs,
|
|
Math, SysUtils, LMessages, LCLIntF, LCLType;
|
|
|
|
type
|
|
TBtnState = (bsNormal, bsOver, bsDown);
|
|
TButtonLayout = (blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom);
|
|
TColorScheme = (csNeoDesert, csNeoSky, csNeoGrass, csNeoSilver,
|
|
csNeoRose, csNeoSun,
|
|
csDesert, csGrass, csSky, csSun, csRose, csSilver, csCustom);
|
|
|
|
TXiButton = class(TCustomControl)
|
|
private
|
|
FColorFace: TColor;
|
|
FColorGrad: TColor;
|
|
FColorBorder: TColor;
|
|
FColorLight: TColor;
|
|
FColorDark: TColor;
|
|
FColorText: TColor;
|
|
FOverColorFace: TColor;
|
|
FOverColorGrad: TColor;
|
|
FOverColorBorder: TColor;
|
|
FOverColorLight: TColor;
|
|
FOverColorDark: TColor;
|
|
FOverColorText: TColor;
|
|
FDownColorFace: TColor;
|
|
FDownColorGrad: TColor;
|
|
FDownColorBorder: TColor;
|
|
FDownColorLight: TColor;
|
|
FDownColorDark: TColor;
|
|
FDownColorText: TColor;
|
|
FDisabledColorFace: TColor;
|
|
FDisabledColorGrad: TColor;
|
|
FDisabledColorBorder: TColor;
|
|
FDisabledColorLight: TColor;
|
|
FDisabledColorDark: TColor;
|
|
FDisabledColorText: TColor;
|
|
FColorFocusRect: TColor;
|
|
FFocused: Boolean;
|
|
FColorScheme: TColorScheme;
|
|
FCtl3D: boolean;
|
|
FLayout: TButtonLayout;
|
|
FGlyph: TBitmap;
|
|
FTransparentGlyph: Boolean;
|
|
FGradient: Boolean;
|
|
FSpacing: integer;
|
|
FModalResult: TModalResult;
|
|
FCancel: Boolean;
|
|
FDefault: Boolean;
|
|
FHotTrack: Boolean;
|
|
FClicked: Boolean;
|
|
procedure SetColors(Index: integer; Value: TColor);
|
|
procedure SetColorScheme(Value: TColorScheme);
|
|
procedure SetCtl3D(Value: Boolean);
|
|
procedure SetLayout(Value: TButtonLayout);
|
|
procedure SetGlyph(Value: TBitmap);
|
|
procedure SetTransparentGlyph(Value: Boolean);
|
|
procedure SetGradient(Value: Boolean);
|
|
procedure SetSpacing(Value: Integer);
|
|
procedure SetModalResult(Value: TModalResult);
|
|
procedure SetCancel(Value: Boolean);
|
|
procedure SetDefault(Value: Boolean);
|
|
procedure SetHotTrack(Value: Boolean);
|
|
procedure GradientFillRect(Canvas: TCanvas; Rect: TRect;
|
|
StartColor, EndColor: TColor);
|
|
protected
|
|
FBtnState: TBtnState;
|
|
procedure Paint; override;
|
|
procedure Click; Override;
|
|
procedure MouseEnter(var msg: TMessage); message CM_MOUSEENTER;
|
|
procedure MouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
|
|
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
|
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
|
procedure MouseMove (Shift: TShiftState; X, Y: Integer); override;
|
|
procedure WMSetFocus(var msg: TWMSetFocus); message WM_SETFOCUS;
|
|
procedure WMKillFocus(var msg: TWMKillFocus); message WM_KILLFOCUS;
|
|
procedure WMKeyUp(var msg: TLMKeyUp); message LM_KEYUP;
|
|
procedure WMKeyDown(var msg: TLMKeyDown); message LM_KEYDOWN;
|
|
procedure CMDialogKey(var msg: TCMDialogKey); message CM_DIALOGKEY;
|
|
procedure CMDialogChar(var msg: TCMDialogChar); message CM_DIALOGCHAR;
|
|
procedure CMTextChanged (var msg: TMessage); message CM_TEXTCHANGED;
|
|
procedure CMFontChanged(var msg: TMessage); message CM_FONTCHANGED;
|
|
procedure CMEnabledChanged (var msg: TMessage); message CM_ENABLEDCHANGED;
|
|
function GetColorScheme: TStringList;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property ColorFace: TColor index 0 read FColorFace write SetColors;
|
|
property ColorGrad: TColor index 1 read FColorGrad write SetColors;
|
|
property ColorDark: TColor index 2 read FColorDark write SetColors;
|
|
property ColorLight: TColor index 3 read FColorLight write SetColors;
|
|
property ColorBorder: TColor index 4 read FColorBorder write SetColors;
|
|
property ColorText: TColor index 5 read FColorText write SetColors;
|
|
property OverColorFace: TColor index 6 read FOverColorFace write SetColors;
|
|
property OverColorGrad: TColor index 7 read FOverColorGrad write SetColors;
|
|
property OverColorDark: TColor index 8 read FOverColorDark write SetColors;
|
|
property OverColorLight: TColor index 9 read FOverColorLight write SetColors;
|
|
property OverColorBorder: TColor index 10 read FOverColorBorder write SetColors;
|
|
property OverColorText: TColor index 11 read FOverColorText write SetColors;
|
|
property DownColorFace: TColor index 12 read FDownColorFace write SetColors;
|
|
property DownColorGrad: TColor index 13 read FDownColorGrad write SetColors;
|
|
property DownColorDark: TColor index 14 read FDownColorDark write SetColors;
|
|
property DownColorLight: TColor index 15 read FDownColorLight write SetColors;
|
|
property DownColorBorder: TColor index 16 read FDownColorBorder write SetColors;
|
|
property DownColorText: TColor index 17 read FDownColorText write SetColors;
|
|
property DisabledColorFace: TColor index 18 read FDisabledColorFace write SetColors;
|
|
property DisabledColorGrad: TColor index 19 read FDisabledColorGrad write SetColors;
|
|
property DisabledColorDark: TColor index 20 read FDisabledColorDark write SetColors;
|
|
property DisabledColorLight: TColor index 21 read FDisabledColorLight write SetColors;
|
|
property DisabledColorBorder: TColor index 22 read FDisabledColorBorder write SetColors;
|
|
property DisabledColorText: TColor index 23 read FDisabledColorText write SetColors;
|
|
property ColorFocusRect: TColor index 24 read FColorFocusRect write SetColors;
|
|
property ColorScheme: TColorScheme read FColorScheme write SetColorScheme;
|
|
property Ctl3D: Boolean read FCtl3D write SetCtl3D;
|
|
property Layout: TButtonLayout read FLayout write SetLayout;
|
|
property Glyph: TBitmap read FGlyph write SetGlyph;
|
|
property Spacing: integer read FSpacing write SetSpacing;
|
|
property TransparentGlyph: Boolean read FTransparentGlyph write SetTransparentGlyph;
|
|
property Gradient: Boolean read FGradient write SetGradient;
|
|
property HotTrack: Boolean read FHotTrack write FHotTrack;
|
|
property Action;
|
|
property Align;
|
|
property Anchors;
|
|
property BiDiMode;
|
|
property Cancel: Boolean read FCancel write FCancel default False;
|
|
property Caption;
|
|
property Constraints;
|
|
property Default: Boolean read FDefault write SetDefault default False;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property Enabled;
|
|
property Font;
|
|
property ModalResult: TModalResult read FModalResult write SetModalResult default 0;
|
|
property ParentBiDiMode;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property ShowHint;
|
|
property TabOrder;
|
|
property TabStop default True;
|
|
property Visible;
|
|
property OnClick;
|
|
// property OnContextPopup;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDock;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnKeyDown;
|
|
property OnKeyPress;
|
|
property OnKeyUp;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnStartDock;
|
|
property OnStartDrag;
|
|
end;
|
|
|
|
procedure Register;
|
|
|
|
{//$R XiButton.res}
|
|
|
|
implementation
|
|
|
|
procedure Register;
|
|
begin
|
|
RegisterComponents('XiControls', [TXiButton]);
|
|
end;
|
|
|
|
constructor TXiButton.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
Width:= 75;
|
|
Height:= 25;
|
|
FCtl3D:= True;
|
|
FGlyph:= TBitmap.Create;
|
|
TransparentGlyph:= True;
|
|
FGradient:= False;
|
|
TabStop:= True;
|
|
FSpacing:= 4;
|
|
FCancel:= False;
|
|
FDefault:= False;
|
|
FHotTrack:= True;
|
|
ColorScheme:= csNeoDesert;
|
|
FClicked:= False;
|
|
FOverColorGrad:= clWhite;
|
|
FDownColorGrad:= clWhite;
|
|
FDisabledColorGrad:= clWhite;
|
|
end;
|
|
|
|
destructor TXiButton.Destroy;
|
|
begin
|
|
FGlyph.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TXiButton.Paint;
|
|
var
|
|
BtnBmp: TBitmap;
|
|
CaptionRect: TRect;
|
|
GlyphLeft, GlyphTop, TextTop, TextLeft, TextWidth, TextHeight: integer;
|
|
FaceColor, GradColor, LightColor, DarkColor, BorderColor, TextColor: TColor;
|
|
begin
|
|
BtnBmp:= TBitmap.Create;
|
|
BtnBmp.Width:= Width;
|
|
BtnBmp.Height:= Height;
|
|
|
|
case FBtnState of
|
|
bsNormal: begin
|
|
FaceColor:= FColorFace;
|
|
GradColor:= FColorGrad;
|
|
LightColor:= FColorLight;
|
|
DarkColor:= FColorDark;
|
|
BorderColor:= FColorBorder;
|
|
TextColor:= FColorText;
|
|
end;
|
|
|
|
bsOver: begin
|
|
FaceColor:= FOverColorFace;
|
|
GradColor:= FOverColorGrad;
|
|
LightColor:= FOverColorLight;
|
|
DarkColor:= FOverColorDark;
|
|
BorderColor:= FOverColorBorder;
|
|
TextColor:= FOverColorText;
|
|
end;
|
|
|
|
bsDown: begin
|
|
FaceColor:= FDownColorFace;
|
|
GradColor:= FDownColorGrad;
|
|
LightColor:= FDownColorLight;
|
|
DarkColor:= FDownColorDark;
|
|
BorderColor:= FDownColorBorder;
|
|
TextColor:= FDownColorText;
|
|
end;
|
|
end;
|
|
if not Enabled then begin
|
|
FaceColor:= FDisabledColorFace;
|
|
GradColor:= FDisabledColorGrad;
|
|
LightColor:= FDisabledColorLight;
|
|
DarkColor:= FDisabledColorDark;
|
|
BorderColor:= FDisabledColorBorder;
|
|
TextColor:= FDisabledColorText;
|
|
end;
|
|
|
|
with BtnBmp.Canvas do begin
|
|
Brush.Color:= FaceColor;
|
|
Brush.Style:= bsSolid;
|
|
Rectangle(0, 0, Width, Height);
|
|
end;
|
|
|
|
if FGradient then begin
|
|
GradientFillRect(BtnBmp.Canvas, Rect(0, 0, Width, Height), FaceColor, GradColor);
|
|
end;
|
|
|
|
BtnBmp.Canvas.Font:= Font;
|
|
BtnBmp.Canvas.Font.Color:= TextColor;
|
|
TextWidth:= BtnBmp.Canvas.TextWidth(Caption);
|
|
TextHeight:= BtnBmp.Canvas.TextHeight(Caption);
|
|
TextTop:= (Height - TextHeight) div 2;
|
|
TextLeft:= (Width - TextWidth) div 2;
|
|
|
|
if not Glyph.Empty then begin
|
|
GlyphLeft:= 0;
|
|
case FLayout of
|
|
blGlyphLeft: begin
|
|
GlyphTop:= (Height - FGlyph.Height) div 2;
|
|
GlyphLeft:= TextLeft - FGlyph.Width div 2;
|
|
inc(TextLeft, FGlyph.Width div 2);
|
|
if not (Caption = '') then begin
|
|
GlyphLeft:= GlyphLeft - FSpacing div 2 - FSpacing mod 2;
|
|
inc(TextLeft, FSpacing div 2);
|
|
end;
|
|
end;
|
|
blGlyphRight: begin
|
|
GlyphTop:= (Height - FGlyph.Height) div 2;
|
|
GlyphLeft:= TextLeft + TextWidth - FGlyph.Width div 2;
|
|
inc(TextLeft, - FGlyph.Width div 2);
|
|
if not (Caption = '') then begin
|
|
GlyphLeft:= GlyphLeft + FSpacing div 2 + FSpacing mod 2;
|
|
inc(TextLeft, - FSpacing div 2);
|
|
end;
|
|
end;
|
|
blGlyphTop: begin
|
|
GlyphLeft:= (Width - FGlyph.Width) div 2;
|
|
GlyphTop:= TextTop - FGlyph.Height div 2 - FGlyph.Height mod 2;
|
|
inc(TextTop, FGlyph.Height div 2);
|
|
if not (Caption = '') then begin
|
|
GlyphTop:= GlyphTop - FSpacing div 2 - FSpacing mod 2;
|
|
inc(TextTop, + FSpacing div 2);
|
|
end;
|
|
end;
|
|
blGlyphBottom: begin
|
|
GlyphLeft:= (Width - FGlyph.Width) div 2;
|
|
GlyphTop:= TextTop + TextHeight - Glyph.Height div 2;
|
|
inc(TextTop, - FGlyph.Height div 2);
|
|
if not (Caption = '') then begin
|
|
GlyphTop:= GlyphTop + FSpacing div 2 + FSpacing mod 2;
|
|
inc(TextTop, - FSpacing div 2);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
if FBtnState = bsDown then begin
|
|
inc(GlyphTop, 1);
|
|
inc(GlyphLeft, 1);
|
|
end;
|
|
FGlyph.TransparentColor:= FGlyph.Canvas.Pixels[0, 0];
|
|
FGlyph.Transparent:= FTransparentGlyph;
|
|
BtnBmp.Canvas.Draw(GlyphLeft, GlyphTop, FGlyph);
|
|
end;
|
|
if FBtnState = bsDown then begin
|
|
inc(TextTop);
|
|
inc(TextLeft);
|
|
end;
|
|
with CaptionRect do begin
|
|
Top:= TextTop;
|
|
Left:=TextLeft;
|
|
Right:= Left + TextWidth;
|
|
Bottom:= Top + TextHeight;
|
|
end;
|
|
|
|
if Caption <> '' then begin
|
|
BtnBmp.Canvas.Brush.Style:= bsClear;
|
|
DrawText(BtnBmp.Canvas.Handle,
|
|
PChar(Caption),
|
|
length(Caption),
|
|
CaptionRect,
|
|
DT_CENTER or DT_VCENTER or DT_SINGLELINE or DT_NOCLIP);
|
|
end;
|
|
|
|
with BtnBmp.Canvas do begin
|
|
Pen.Style:= psSolid;
|
|
Brush.Color:= FaceColor;
|
|
Pen.Color:= BorderColor;
|
|
Brush.Style:= bsClear;
|
|
Rectangle(0, 0, Width, Height);
|
|
|
|
if Ctl3D then begin
|
|
Pen.Color:= LightColor;
|
|
MoveTo(1, Height-2);
|
|
LineTo(1, 1);
|
|
LineTo(Width -1 , 1);
|
|
|
|
Pen.Color:= DarkColor;
|
|
MoveTo(Width-2, 1);
|
|
LineTo(Width-2, Height-2);
|
|
LineTo(1, Height-2);
|
|
end;
|
|
end;
|
|
|
|
if FFocused then begin
|
|
BtnBmp.Canvas.Pen.Color:= FColorFocusRect;
|
|
BtnBmp.Canvas.Brush.Style:= bsClear;
|
|
BtnBmp.Canvas.Rectangle(3, 3, Width-3, Height-3)
|
|
end;
|
|
Canvas.Draw(0, 0, BtnBmp);
|
|
BtnBmp.Free;
|
|
end;
|
|
|
|
procedure TXiButton.Click;
|
|
begin
|
|
if Parent <> nil then
|
|
GetParentForm(self).ModalResult:= ModalResult;
|
|
FBtnState:= bsNormal;
|
|
Paint;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TXiButton.MouseEnter(var msg: TMessage);
|
|
begin
|
|
if csDesigning in ComponentState then exit;
|
|
if not FHotTrack then exit;
|
|
if FClicked then
|
|
FBtnState:= bsDown
|
|
else
|
|
FBtnState:= bsOver;
|
|
Paint;
|
|
end;
|
|
|
|
procedure TXiButton.MouseLeave(var msg: TMessage);
|
|
begin
|
|
inherited;
|
|
FBtnState:= bsNormal;
|
|
Paint;
|
|
end;
|
|
|
|
procedure TXiButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
inherited;
|
|
if Button <> mbLeft then Exit;
|
|
FClicked:= True;
|
|
FBtnState:= bsDown;
|
|
if TabStop then SetFocus;
|
|
Paint;
|
|
end;
|
|
|
|
procedure TXiButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
inherited;
|
|
FClicked:= False;
|
|
if (x>0) and (y>0) and (x<width) and (y<height) then
|
|
if FHotTrack then FBtnState:= bsOver
|
|
else
|
|
FBtnState:= bsNormal;
|
|
Paint;
|
|
end;
|
|
|
|
procedure TXiButton.MouseMove (Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
inherited;
|
|
end;
|
|
|
|
procedure TXiButton.WMSetFocus(var msg: TWMSetFocus);
|
|
begin
|
|
FFocused:= true;
|
|
Paint;
|
|
end;
|
|
|
|
procedure TXiButton.WMKillFocus(var msg: TWMKillFocus);
|
|
begin
|
|
FFocused:= false;
|
|
FBtnState:= bsNormal;
|
|
Paint;
|
|
end;
|
|
|
|
procedure TXiButton.WMKeyDown(var msg: TLMKeyDown);
|
|
begin
|
|
if msg.CharCode = VK_SPACE then FBtnState:= bsDown;
|
|
if msg.CharCode = VK_RETURN then Click;
|
|
Paint;
|
|
end;
|
|
|
|
procedure TXiButton.WMKeyUp(var msg: TLMKeyUp);
|
|
begin
|
|
if (msg.CharCode = VK_SPACE) then begin
|
|
FBtnState:= bsNormal;
|
|
Paint;
|
|
Click;
|
|
end;
|
|
end;
|
|
|
|
procedure TXiButton.CMTextChanged (var msg: TMessage);
|
|
begin
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetCtl3D(Value: Boolean);
|
|
begin
|
|
FCtl3D:= Value;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetLayout(Value: TButtonLayout);
|
|
begin
|
|
FLayout:= Value;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetGlyph(Value: TBitmap);
|
|
begin
|
|
FGlyph.Assign(Value);
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetSpacing(Value: integer);
|
|
begin
|
|
FSpacing:= Value;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetTransparentGlyph(Value: Boolean);
|
|
begin
|
|
FTransparentGlyph:= Value;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetGradient(Value: Boolean);
|
|
begin
|
|
FGradient:= Value;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.CMFontChanged(var msg: TMessage);
|
|
begin
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.CMDialogKey(var msg: TCMDialogKey);
|
|
begin
|
|
with msg do begin
|
|
if (((CharCode = VK_RETURN) and FFocused) or
|
|
((CharCode = VK_ESCAPE) and FCancel)) and
|
|
(KeyDataToShiftState(KeyData) = []) and CanFocus then
|
|
begin
|
|
Click;
|
|
Result := 1;
|
|
end else if (FDefault and (CharCode = VK_RETURN) and CanFocus) then begin
|
|
Click;
|
|
Result := 1;
|
|
end
|
|
else inherited;
|
|
end;
|
|
end;
|
|
|
|
procedure TXiButton.CMEnabledChanged(var msg: TMessage);
|
|
begin
|
|
inherited;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.CMDialogChar(var msg: TCMDialogChar);
|
|
begin
|
|
with msg do
|
|
if IsAccel(CharCode, Caption) and Enabled then begin
|
|
Click;
|
|
Result := 1;
|
|
end;
|
|
end;
|
|
|
|
procedure TXiButton.SetModalResult(Value: TModalResult);
|
|
begin
|
|
FModalResult:= Value;
|
|
end;
|
|
|
|
procedure TXiButton.SetCancel(Value: Boolean);
|
|
begin
|
|
FCancel:= Value;
|
|
end;
|
|
|
|
procedure TXiButton.SetDefault(Value: Boolean);
|
|
var
|
|
Form: TCustomForm;
|
|
begin
|
|
FDefault := Value;
|
|
if HandleAllocated then
|
|
begin
|
|
Form := GetParentForm(Self);
|
|
if Form <> nil then
|
|
Form.Perform(CM_FOCUSCHANGED, 0, Longint(Form.ActiveControl));
|
|
end;
|
|
end;
|
|
|
|
procedure TXiButton.SetHotTrack(Value: Boolean);
|
|
begin
|
|
FHotTrack:= Value;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetColors(Index: Integer; Value: TColor);
|
|
begin
|
|
case Index of
|
|
0: FColorFace:= Value;
|
|
1: FColorGrad:= Value;
|
|
2: FColorDark:= Value;
|
|
3: FColorLight:= Value;
|
|
4: FColorBorder:= Value;
|
|
5: FColorText:= Value;
|
|
6: FOverColorFace:= Value;
|
|
7: FOverColorGrad:= Value;
|
|
8: FOverColorDark:= Value;
|
|
9: FOverColorLight:= Value;
|
|
10: FOverColorBorder:= Value;
|
|
11: FOverColorText:= Value;
|
|
12: FDownColorFace:= Value;
|
|
13: FDownColorGrad:= Value;
|
|
14: FDownColorDark:= Value;
|
|
15: FDownColorLight:= Value;
|
|
16: FDownColorBorder:= Value;
|
|
17: FDownColorText:= Value;
|
|
18: FDisabledColorFace:= Value;
|
|
19: FDisabledColorGrad:= Value;
|
|
20: FDisabledColorDark:= Value;
|
|
21: FDisabledColorLight:= Value;
|
|
22: FDisabledColorBorder:= Value;
|
|
23: FDisabledColorText:= Value;
|
|
24: FColorFocusRect:= Value;
|
|
end;
|
|
ColorScheme:= csCustom;
|
|
Invalidate;
|
|
end;
|
|
|
|
procedure TXiButton.SetColorScheme(Value: TColorScheme);
|
|
begin
|
|
FColorScheme:= Value;
|
|
case FColorScheme of
|
|
csDesert: begin
|
|
ColorFace:=$0095DDFF;
|
|
ColorLight:=$00B9E7FF;
|
|
ColorDark:=$00009CE8;
|
|
ColorBorder:=$00005680;
|
|
ColorText:=clBlack;
|
|
OverColorFace:=$006FD0FF;
|
|
OverColorLight:=$0095DAFF;
|
|
OverColorDark:=$00008ED2;
|
|
OverColorBorder:=$00005680;
|
|
OverColorText:=clBlack;
|
|
DownColorFace:=$006FD0FF;
|
|
DownColorLight:=$000077B7;
|
|
DownColorDark:=$008AD9FF;
|
|
DownColorBorder:=$000070A6;
|
|
DownColorText:=clBlack;
|
|
DisabledColorFace:=$00E2E2E2;
|
|
DisabledColorLight:=$00EAEAEA;
|
|
DisabledColorDark:=$00D8D8D8;
|
|
DisabledColorBorder:=$00C4C4C4;
|
|
DisabledColorText:=clGray;
|
|
ColorFocusRect:= $004080FF;
|
|
Gradient:= False;
|
|
end;
|
|
csGrass: begin
|
|
ColorFace:=$0098EBB7;
|
|
ColorLight:=$00CBF5DB;
|
|
ColorDark:=$0024B95C;
|
|
ColorBorder:=$00156F37;
|
|
ColorText:=clBlack;
|
|
OverColorFace:=$0068E196;
|
|
OverColorLight:=$00B5F0CB;
|
|
OverColorDark:=$0023B459;
|
|
OverColorBorder:=$0017793D;
|
|
OverColorText:=clBlack;
|
|
DownColorFace:=$004EDC83;
|
|
DownColorLight:=$00177D3E;
|
|
DownColorDark:=$0089E7AC;
|
|
DownColorBorder:=$00167439;
|
|
DownColorText:=clBlack;
|
|
DisabledColorFace:=$00E2E2E2;
|
|
DisabledColorLight:=$00EAEAEA;
|
|
DisabledColorDark:=$00D8D8D8;
|
|
DisabledColorBorder:=$00C4C4C4;
|
|
DisabledColorText:=clGray;
|
|
ColorFocusRect:= $0000A421;
|
|
Gradient:= False;
|
|
end;
|
|
csSky: begin
|
|
ColorFace:=$00FFE0C1;
|
|
ColorLight:=$00FFECD9;
|
|
ColorDark:=$00FFA953;
|
|
ColorBorder:=$00B35900;
|
|
ColorText:=clBlack;
|
|
OverColorFace:=$00FFCD9B;
|
|
OverColorLight:=$00FFE4CA;
|
|
OverColorDark:=$00FFB164;
|
|
OverColorBorder:=$00B35900;
|
|
OverColorText:=clBlack;
|
|
DownColorFace:=$00FFC082;
|
|
DownColorLight:=$00FF9122;
|
|
DownColorDark:=$00FFD3A8;
|
|
DownColorBorder:=$00B35900;
|
|
DownColorText:=clBlack;
|
|
DisabledColorFace:=$00E2E2E2;
|
|
DisabledColorLight:=$00EAEAEA;
|
|
DisabledColorDark:=$00D8D8D8;
|
|
DisabledColorBorder:=$00C4C4C4;
|
|
DisabledColorText:=clGray;
|
|
ColorFocusRect:= $00DC9B14;
|
|
Gradient:= False;
|
|
end;
|
|
csRose: begin
|
|
ColorFace:=$00C6C6FF;
|
|
ColorLight:=$00DDDDFF;
|
|
ColorDark:=$008282FF;
|
|
ColorBorder:=$0000009D;
|
|
ColorText:=clBlack;
|
|
OverColorFace:=$00B0B0FF;
|
|
OverColorLight:=$00D7D7FF;
|
|
OverColorDark:=$006A6AFF;
|
|
OverColorBorder:=$0000009D;
|
|
OverColorText:=clBlack;
|
|
DownColorFace:=$009F9FFF;
|
|
DownColorLight:=$005E5EFF;
|
|
DownColorDark:=$008888FF;
|
|
DownColorBorder:=$0000009D;
|
|
DownColorText:=clBlack;
|
|
DisabledColorFace:=$00E2E2E2;
|
|
DisabledColorLight:=$00EAEAEA;
|
|
DisabledColorDark:=$00D8D8D8;
|
|
DisabledColorBorder:=$00C4C4C4;
|
|
DisabledColorText:=clGray;
|
|
ColorFocusRect:= $005E5EFF;
|
|
Gradient:= False;
|
|
end;
|
|
csSun: begin
|
|
ColorFace:=$00A8FFFF;
|
|
ColorLight:=$00F2FFFF;
|
|
ColorDark:=$0000BBBB;
|
|
ColorBorder:=$00006464;
|
|
ColorText:=clBlack;
|
|
OverColorFace:=$0066F3FF;
|
|
OverColorLight:=$00CCFFFF;
|
|
OverColorDark:=$0000A6A6;
|
|
OverColorBorder:=$00006464;
|
|
OverColorText:=clBlack;
|
|
DownColorFace:=$0022EEFF;
|
|
DownColorLight:=$00008484;
|
|
DownColorDark:=$0066F3FF;
|
|
DownColorBorder:=$00006464;
|
|
DownColorText:=clBlack;
|
|
DisabledColorFace:=$00E2E2E2;
|
|
DisabledColorLight:=$00EAEAEA;
|
|
DisabledColorDark:=$00D8D8D8;
|
|
DisabledColorBorder:=$00C4C4C4;
|
|
DisabledColorText:=clGray;
|
|
ColorFocusRect:= $00008CF4;
|
|
Gradient:= False;
|
|
end;
|
|
csSilver: begin
|
|
ColorFace:=$00E0E0E0;
|
|
ColorLight:=$00F7F7F7;
|
|
ColorDark:=$00AEAEAE;
|
|
ColorBorder:=$00626262;
|
|
ColorText:=clBlack;
|
|
OverColorFace:=$00CFCFCF;
|
|
OverColorLight:=$00EEEEEE;
|
|
OverColorDark:=$00797979;
|
|
OverColorBorder:=$00757575;
|
|
OverColorText:=clBlack;
|
|
DownColorFace:=$00D3D3D3;
|
|
DownColorLight:=$007C7C7C;
|
|
DownColorDark:=$00E9E9E9;
|
|
DownColorBorder:=$004E4E4E;
|
|
DownColorText:=clBlack;
|
|
DisabledColorFace:=$00E2E2E2;
|
|
DisabledColorLight:=$00EAEAEA;
|
|
DisabledColorDark:=$00D8D8D8;
|
|
DisabledColorBorder:=$00C4C4C4;
|
|
DisabledColorText:=clGray;
|
|
ColorFocusRect:= $008A8A8A;
|
|
Gradient:= False;
|
|
end;
|
|
|
|
csNeoDesert: begin
|
|
ColorFace:= $00C6ECFF;
|
|
ColorGrad:= $0037BEFF;
|
|
ColorLight:= $00B9E7FF;
|
|
ColorDark:= $00009CE8;
|
|
ColorBorder:= $00005680;
|
|
ColorText:= clBlack;
|
|
OverColorFace:= $00B3E7FF;
|
|
OverColorGrad:= $0000A3F0;
|
|
OverColorLight:= $0095DAFF;
|
|
OverColorDark:= $00008ED2;
|
|
OverColorBorder:= $00005680;
|
|
OverColorText:= clBlack;
|
|
DownColorFace:= $002BBAFF;
|
|
DownColorGrad:= $0077D2FF;
|
|
DownColorLight:= $000077B7;
|
|
DownColorDark:= $008AD9FF;
|
|
DownColorBorder:= $000070A6;
|
|
DownColorText:= clBlack;
|
|
DisabledColorFace:= $00EEEEEE;
|
|
DisabledColorGrad:= clWhite;
|
|
DisabledColorLight:= clWhite;
|
|
DisabledColorDark:= $00D2D2D2;
|
|
DisabledColorBorder:= clGray;
|
|
DisabledColorText:= clGray;
|
|
ColorFocusRect:= $004080FF;
|
|
Gradient:= true;
|
|
end;
|
|
csNeoSky: begin
|
|
ColorFace:= $00FFEEDD;
|
|
ColorGrad:= $00FFB66C;
|
|
ColorLight:= $00FFECD9;
|
|
ColorDark:= $00FFA851;
|
|
ColorBorder:= $00B35900;
|
|
ColorText:= clBlack;
|
|
OverColorFace:= $00FFEBD7;
|
|
OverColorGrad:= $00FFA346;
|
|
OverColorLight:= $00FFE4CA;
|
|
OverColorDark:= $00FF9E3E;
|
|
OverColorBorder:= $00B35900;
|
|
OverColorText:= clBlack;
|
|
DownColorFace:= $00FFB366;
|
|
DownColorGrad:= $00FFCE9D;
|
|
DownColorLight:= $00FF9E3E;
|
|
DownColorDark:= $00FFD3A8;
|
|
DownColorBorder:= $00B35900;
|
|
DownColorText:= clBlack;
|
|
DisabledColorFace:= $00EEEEEE;
|
|
DisabledColorGrad:= clWhite;
|
|
DisabledColorLight:= clWhite;
|
|
DisabledColorDark:= $00D2D2D2;
|
|
DisabledColorBorder:= clGray;
|
|
DisabledColorText:= clGray;
|
|
ColorFocusRect:= $00FFA953;
|
|
Gradient:= true;
|
|
end;
|
|
csNeoGrass: begin
|
|
ColorFace:= $00DDF9E8;
|
|
ColorGrad:= $005EDF8E;
|
|
ColorLight:= $00CBF5DB;
|
|
ColorDark:= $0024B95C;
|
|
ColorBorder:= $00156F37;
|
|
ColorText:= clBlack;
|
|
OverColorFace:= $00BFF2D2;
|
|
OverColorGrad:= $003DD877;
|
|
OverColorLight:= $00B5F0CB;
|
|
OverColorDark:= $0023B459;
|
|
OverColorBorder:= $0017793D;
|
|
OverColorText:= clBlack;
|
|
DownColorFace:= $004EDC83;
|
|
DownColorGrad:= $0080E6A6;
|
|
DownColorLight:= $00177D3E;
|
|
DownColorDark:= $0089E7AC;
|
|
DownColorBorder:= $00167439;
|
|
DownColorText:= clBlack;
|
|
DisabledColorFace:= $00EEEEEE;
|
|
DisabledColorGrad:= clWhite;
|
|
DisabledColorLight:= clWhite;
|
|
DisabledColorDark:= $00D2D2D2;
|
|
DisabledColorBorder:= clGray;
|
|
DisabledColorText:= clGray;
|
|
ColorFocusRect:= $0024B95C;
|
|
Gradient:= true;
|
|
end;
|
|
csNeoSilver: begin
|
|
ColorFace:= $00F3F3F3;
|
|
ColorGrad:= $00BCBCBC;
|
|
ColorLight:= $00F7F7F7;
|
|
ColorDark:= $00A7A7A7;
|
|
ColorBorder:= $00626262;
|
|
ColorText:= clBlack;
|
|
OverColorFace:= $00F0F0F0;
|
|
OverColorGrad:= $00A6A6A6;
|
|
OverColorLight:= $00EEEEEE;
|
|
OverColorDark:= $00A2A2A2;
|
|
OverColorBorder:= $00757575;
|
|
OverColorText:= clBlack;
|
|
DownColorFace:= $00CACACA;
|
|
DownColorGrad:= $00DADADA;
|
|
DownColorLight:= $007C7C7C;
|
|
DownColorDark:= $00E9E9E9;
|
|
DownColorBorder:= $004E4E4E;
|
|
DownColorText:= clBlack;
|
|
DisabledColorFace:= $00EEEEEE;
|
|
DisabledColorGrad:= clWhite;
|
|
DisabledColorLight:= clWhite;
|
|
DisabledColorDark:= $00D2D2D2;
|
|
DisabledColorBorder:= clGray;
|
|
DisabledColorText:= clGray;
|
|
ColorFocusRect:= $00ADADAD;
|
|
Gradient:= true;
|
|
end;
|
|
csNeoRose: begin
|
|
ColorFace:= $00E8E8FF;
|
|
ColorGrad:= $009595FF;
|
|
ColorLight:= $00DDDDFF;
|
|
ColorDark:= $008282FF;
|
|
ColorBorder:= $0000009D;
|
|
ColorText:= clBlack;
|
|
OverColorFace:= $00DFDFFF;
|
|
OverColorGrad:= $007777FF;
|
|
OverColorLight:= $00D7D7FF;
|
|
OverColorDark:= $006A6AFF;
|
|
OverColorBorder:= $0000009D;
|
|
OverColorText:= clBlack;
|
|
DownColorFace:= $00A6A6FF;
|
|
DownColorGrad:= $00B9B9FF;
|
|
DownColorLight:= $005E5EFF;
|
|
DownColorDark:= $00CECEFF;
|
|
DownColorBorder:= $0000009D;
|
|
DownColorText:= clBlack;
|
|
DisabledColorFace:= $00EEEEEE;
|
|
DisabledColorGrad:= clWhite;
|
|
DisabledColorLight:= clWhite;
|
|
DisabledColorDark:= $00D2D2D2;
|
|
DisabledColorBorder:= clGray;
|
|
DisabledColorText:= clGray;
|
|
ColorFocusRect:= $005E5EFF;
|
|
Gradient:= true;
|
|
end;
|
|
csNeoSun: begin
|
|
ColorFace:= $00F0FFFF;
|
|
ColorGrad:= $0020D8F9;
|
|
ColorLight:= $00F2FFFF;
|
|
ColorDark:= $0000BBBB;
|
|
ColorBorder:= $00006464;
|
|
ColorText:= clBlack;
|
|
OverColorFace:= $00D5FCFF;
|
|
OverColorGrad:= $0005BCDC;
|
|
OverColorLight:= $00CCFFFF;
|
|
OverColorDark:= $0000A6A6;
|
|
OverColorBorder:= $00006464;
|
|
OverColorText:= clBlack;
|
|
DownColorFace:= $0005D1F5;
|
|
DownColorGrad:= $0066F0FB;
|
|
DownColorLight:= $00008484;
|
|
DownColorDark:= $0066F3FF;
|
|
DownColorBorder:= $00006464;
|
|
DownColorText:= clBlack;
|
|
DisabledColorFace:= $00EEEEEE;
|
|
DisabledColorGrad:= clWhite;
|
|
DisabledColorLight:= clWhite;
|
|
DisabledColorDark:= $00D2D2D2;
|
|
DisabledColorBorder:= clGray;
|
|
DisabledColorText:= clGray;
|
|
ColorFocusRect:= $0000BBBB;
|
|
Gradient:= true;
|
|
end;
|
|
end;
|
|
Invalidate;
|
|
FColorScheme:= Value;
|
|
end;
|
|
|
|
|
|
|
|
procedure TXiButton.GradientFillRect(Canvas: TCanvas; Rect: TRect;
|
|
StartColor, EndColor: TColor);
|
|
var
|
|
Steps: Integer;
|
|
StartR, StartG, StartB, EndR, EndG, EndB: Byte;
|
|
CrrR, CrrG, CrrB: Double;
|
|
IncR, IncG, incB: Double;
|
|
i: integer;
|
|
begin
|
|
Steps:= Rect.Bottom - Rect.Top;
|
|
|
|
StartR:= GetRValue(StartColor); EndR:= GetRValue(EndColor);
|
|
StartG:= GetGValue(StartColor); EndG:= GetGValue(EndColor);
|
|
StartB:= GetBValue(StartColor); EndB:= GetBValue(EndColor);
|
|
|
|
IncR:= (EndR - StartR) / steps;
|
|
IncG:= (EndG - StartG) / steps;
|
|
IncB:= (EndB - StartB) / steps;
|
|
|
|
CrrR:= StartR;
|
|
CrrG:= StartG;
|
|
CrrB:= StartB;
|
|
|
|
for i:= 0 to Steps do begin
|
|
Canvas.Pen.Color:= RGB(Round(CrrR), Round(CrrG), Round(CrrB));
|
|
Canvas.MoveTo(Rect.Left, i);
|
|
Canvas.LineTo(Rect.Right + Rect.Left, i);
|
|
CrrR:= CrrR + IncR;
|
|
CrrG:= CrrG + IncG;
|
|
CrrB:= CrrB + IncB;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TXiButton.GetColorScheme: TStringList;
|
|
begin
|
|
Result:= TStringList.Create;
|
|
with Result do begin
|
|
Add('ColorFace:= '+ ColorToString(ColorFace) + ';');
|
|
Add('ColorGrad:= '+ ColorToString(ColorGrad) + ';');
|
|
Add('ColorLight:= '+ ColorToString(ColorLight) + ';');
|
|
Add('ColorDark:= '+ ColorToString(ColorDark) + ';');
|
|
Add('ColorBorder:= '+ ColorToString(ColorBorder) + ';');
|
|
Add('ColorText:= '+ ColorToString(ColorText) + ';');
|
|
Add('OverColorFace:= '+ ColorToString(OverColorFace) + ';');
|
|
Add('OverColorGrad:= '+ ColorToString(OverColorGrad) + ';');
|
|
Add('OverColorLight:= '+ ColorToString(OverColorLight) + ';');
|
|
Add('OverColorDark:= '+ ColorToString(OverColorDark) + ';');
|
|
Add('OverColorBorder:= '+ ColorToString(OverColorBorder) + ';');
|
|
Add('OverColorText:= '+ ColorToString(OverColorText) + ';');
|
|
Add('DownColorFace:= '+ ColorToString(DownColorFace) + ';');
|
|
Add('DownColorGrad:= '+ ColorToString(DownColorGrad) + ';');
|
|
Add('DownColorLight:= '+ ColorToString(DownColorLight) + ';');
|
|
Add('DownColorDark:= '+ ColorToString(DownColorDark) + ';');
|
|
Add('DownColorBorder:= '+ ColorToString(DownColorBorder) + ';');
|
|
Add('DownColorText:= '+ ColorToString(DownColorText) + ';');
|
|
Add('DisabledColorFace:= '+ ColorToString(DisabledColorFace) + ';');
|
|
Add('DisabledColorGrad:= '+ ColorToString(DisabledColorGrad) + ';');
|
|
Add('DisabledColorLight:= '+ ColorToString(DisabledColorLight) + ';');
|
|
Add('DisabledColorDark:= '+ ColorToString(DisabledColorDark) + ';');
|
|
Add('DisabledColorBorder:= '+ ColorToString(DisabledColorBorder) + ';');
|
|
Add('DisabledColorText:= '+ ColorToString(DisabledColorText) + ';');
|
|
Add('ColorFocusRect:= '+ ColorToString(ColorFocusRect) + ';');
|
|
end;
|
|
end;
|
|
|
|
end.
|