SkinCtrls.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:456k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************************}
  2. {                                                                   }
  3. {       Almediadev Visual Component Library                         }
  4. {       DynamicSkinForm                                             }
  5. {       Version 4.98                                                }
  6. {                                                                   }
  7. {       Copyright (c) 2000-2002 Almediadev                          }
  8. {       ALL RIGHTS RESERVED                                         }
  9. {                                                                   }
  10. {       Home:  http://www.almdev.com                                }
  11. {       Support: support@almdev.com                                 }
  12. {                                                                   }
  13. {*******************************************************************}
  14. unit SkinCtrls;
  15. {$P+,S-,W-,R-}
  16. {$WARNINGS OFF}
  17. interface
  18. uses
  19.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  20.   Menus, ExtCtrls, SkinData, spEffBmp, StdCtrls, SkinMenus, ComCtrls;
  21. type
  22.   TspControlButton = record
  23.     R: TRect;
  24.     MouseIn: Boolean;
  25.     Down: Boolean;
  26.   end;
  27.   TspSkinControl = class(TCustomControl)
  28.   protected
  29.     FSD: TspSkinData;
  30.     FAreaName: String;
  31.     FSkinDataName: String;
  32.     FRgn: HRgn;
  33.     FDrawDefault: Boolean;
  34.     CursorIndex: Integer;
  35.     FOnMouseEnter, FOnMouseLeave: TNotifyEvent;
  36.     FAlphaBlend: Boolean;
  37.     FAlphaBlendValue: Byte;
  38.     FUseSkinCursor: Boolean;
  39.     procedure SetAlphaBlend(AValue: Boolean); virtual;
  40.     procedure SetAlphaBlendValue(AValue: Byte); virtual;
  41.     procedure Paint; override;
  42.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  43.     procedure GetSkinData; virtual;
  44.     procedure WMMOVE(var Msg: TWMMOVE); message WM_MOVE;
  45.     procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
  46.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  47.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  48.     procedure SetSkinData(Value: TspSkinData); virtual;
  49.     procedure CreateControlDefaultImage(B: TBitMap); virtual;
  50.     procedure CreateControlSkinImage(B: TBitMap); virtual;
  51.   public
  52.     FIndex: Integer;
  53.     procedure ChangeSkinData; virtual;
  54.     procedure BeforeChangeSkinData; virtual;
  55.     destructor Destroy; override;
  56.     constructor Create(AOwner: TComponent); override;
  57.   published
  58.     property Anchors;
  59.     property TabOrder;
  60.     property Visible;
  61.     property DrawDefault: Boolean
  62.       read FDrawDefault write FDrawDefault;
  63.     property SkinData: TspSkinData read FSD write SetSkinData;
  64.     property AreaName: String read FAreaName write FAreaName;
  65.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  66.     property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
  67.     property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  68.     property AlphaBlend: Boolean read FAlphaBlend write SetAlphaBlend;
  69.     property AlphaBlendValue: Byte
  70.       read FAlphaBlendValue write SetAlphaBlendValue;
  71.     property UseSkinCursor: Boolean read FUseSkinCursor write FUseSkinCursor;
  72.   end;
  73.   TspSkinCustomControl = class(TspSkinControl)
  74.   protected
  75.     FUseSkinFont: Boolean;
  76.     FDefaultWidth: Integer;
  77.     FDefaultHeight: Integer;
  78.     FDefaultFont: TFont;
  79.     LTPt, RTPt, LBPt, RBPt: TPoint;
  80.     SkinRect, ClRect: TRect;
  81.     NewLTPoint, NewRTPoint, NewLBPoint, NewRBPoint: TPoint;
  82.     NewClRect: TRect;
  83.     Picture, MaskPicture: TBitMap;
  84.     ResizeMode: Integer;
  85.     procedure OnDefaultFontChange(Sender: TObject);
  86.     procedure SetDefaultWidth(Value: Integer);
  87.     procedure SetDefaultHeight(Value: Integer);
  88.     procedure SetDefaultFont(Value: TFont);
  89.     procedure DefaultFontChange; virtual;
  90.     function GetNewRect(R: TRect): TRect;
  91.     function GetResizeMode: Integer;
  92.     procedure CalcSize(var W, H: Integer); virtual;
  93.     procedure CreateSkinControlImage(B, SB: TBitMap; R: TRect);
  94.     procedure GetSkinData; override;
  95.     procedure CreateControlRegion;
  96.     procedure SetControlRegion; virtual;
  97.     procedure CreateControlDefaultImage(B: TBitMap); override;
  98.     procedure CreateControlSkinImage(B: TBitMap); override;
  99.   public
  100.     constructor Create(AOwner: TComponent); override;
  101.     destructor Destroy; override;
  102.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  103.     procedure ChangeSkinData; override;
  104.   published
  105.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  106.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  107.     property DefaultWidth: Integer read FDefaultWidth write SetDefaultWidth;
  108.     property DefaultHeight: Integer read FDefaultHeight write SetDefaultHeight;
  109.   end;
  110.   TspFrameSkinControl = class(TspSkinControl)
  111.   protected
  112.     FRgn: HRgn;
  113.     FFrame: Integer;
  114.     FrameW, FrameH: Integer;
  115.     Picture, MaskPicture: TBitMap;
  116.     FDefaultImage: TBitMap;
  117.     FDefaultMask: TBitMap;
  118.     FDefaultFramesCount: Integer;
  119.     FDefaultFramesPlacement: TFramesPlacement;
  120.     procedure CalcDefaultFrameSize; virtual;
  121.     procedure SetDefaultImage(Value: TBitMap);
  122.     procedure SetDefaultMask(Value: TBitMap);
  123.     procedure SetDefaultFramesCount(Value: Integer);
  124.     procedure SetDefaultFramesPlacement(Value: TFramesPlacement);
  125.     procedure SetFrame(Value: Integer);
  126.     procedure SetControlRegion;
  127.     procedure GetSkinData; override;
  128.     procedure CreateControlDefaultImage(B: TBitMap); override;
  129.     procedure CreateControlSkinImage(B: TBitMap); override;
  130.     procedure Loaded; override;
  131.   public
  132.     SkinRect: TRect;
  133.     FramesCount: Integer;
  134.     FramesPlacement: TFramesPlacement;
  135.     constructor Create(AOwner: TComponent); override;
  136.     destructor Destroy; override;
  137.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  138.     procedure ChangeSkinData; override;
  139.     property Frame: Integer read FFrame write SetFrame;
  140.   published
  141.     property DefaultImage: TBitMap read FDefaultImage write SetDefaultImage;
  142.     property DefaultMask: TBitMap read FDefaultMask write SetDefaultMask;
  143.     property DefaultFramesPlacement: TFramesPlacement
  144.       read FDefaultFramesPlacement write SetDefaultFramesPlacement;
  145.     property DefaultFramesCount: Integer
  146.       read FDefaultFramesCount write SetDefaultFramesCount;
  147.     property ShowHint;  
  148.   end;
  149.   TspSkinSwitchState = (swOff, swOn);
  150.   TspSkinSwitch = class(TspFrameSkinControl)
  151.   protected
  152.     FAnimateTimer: TTimer;
  153.     FState: TspSkinSwitchState;
  154.     FOnChange: TNotifyEvent;
  155.     FMouseIn: Boolean;
  156.     function GetTimerInterval: Cardinal;
  157.     procedure SetTimerInterval(Value: Cardinal);
  158.     procedure SetState(Value: TspSkinSwitchState);
  159.     procedure ChangeState(Value: TspSkinSwitchState);
  160.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  161.       X, Y: Integer); override;
  162.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  163.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  164.     procedure DoAnimate(Sender: TObject);
  165.     procedure Start;
  166.     procedure Stop;
  167.   public
  168.     constructor Create(AOwner: TComponent); override;
  169.     destructor Destroy; override;
  170.     procedure ChangeSkinData; override;
  171.   published
  172.     property TimerInterval: Cardinal read GetTimerInterval write SetTimerInterval;
  173.     property State: TspSkinSwitchState read FState write SetState;
  174.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  175.     property OnMouseDown;
  176.     property OnMouseMove;
  177.     property OnMouseUp;
  178.     property OnClick;
  179.   end;
  180.   TspSkinAnimate = class(TspFrameSkinControl)
  181.   protected
  182.     FAnimateTimer: TTimer;
  183.     FCycleMode: Boolean;
  184.     FButtonMode: Boolean;
  185.     FMouseIn: Boolean;
  186.     FOnStart: TNotifyEvent;
  187.     FOnStop: TNotifyEvent;
  188.     FActive: Boolean;
  189.     procedure SetActive(Value: Boolean);
  190.     function GetTimerInterval: Cardinal;
  191.     procedure SetTimerInterval(Value: Cardinal);
  192.     procedure DoAnimate(Sender: TObject);
  193.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  194.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  195.   public
  196.     constructor Create(AOwner: TComponent); override;
  197.     destructor Destroy; override;
  198.     procedure Start;
  199.     procedure Stop;
  200.   published
  201.     property Active: Boolean read FActive write SetActive;
  202.     property Enabled;
  203.     property CycleMode: Boolean read FCycleMode write FCycleMode;
  204.     property ButtonMode: Boolean read FButtonMode write FButtonMode;
  205.     property TimerInterval: Cardinal read GetTimerInterval write SetTimerInterval;
  206.     property OnStart: TNotifyEvent read FOnStart write FOnStart;
  207.     property OnStop: TNotifyEvent read FOnStop write FOnStop;
  208.     property OnMouseDown;
  209.     property OnMouseMove;
  210.     property OnMouseUp;
  211.     property OnClick;
  212.   end;
  213.   TspSkinFrameGauge = class(TspFrameSkinControl)
  214.   protected
  215.     FMinValue, FMaxValue, FValue: Integer;
  216.     FVertical: Boolean;
  217.     FOnChange: TNotifyEvent;
  218.     procedure SetMinValue(AValue: Integer);
  219.     procedure SetMaxValue(AValue: Integer);
  220.     procedure SetValue(AValue: Integer);
  221.     procedure CalcFrame;
  222.   public
  223.     procedure ChangeSkinData; override;
  224.     constructor Create(AOwner: TComponent); override;
  225.   published
  226.     property Value: Integer read FValue write SetValue;
  227.     property MinValue: Integer read FMinValue write SetMinValue;
  228.     property MaxValue: Integer read FMaxValue write SetMaxValue;
  229.     property Align;
  230.     property Enabled;
  231.     property OnMouseDown;
  232.     property OnMouseMove;
  233.     property OnMouseUp;
  234.     property OnResize;
  235.     property PopupMenu;
  236.     property ShowHint;
  237.   end;
  238.   TspSkinFrameRegulator = class(TspFrameSkinControl)
  239.   protected
  240.     FPixInc, FValInc: Integer;
  241.     FDown: Boolean;
  242.     StartV, CurV, TempValue: Integer;
  243.     FMinValue, FMaxValue, FValue: Integer;
  244.     FOnChange: TNotifyEvent;
  245.     FDefaultKind: TRegulatorKind;
  246.     procedure CalcDefaultFrameSize; override;
  247.     procedure SetDefaultKind(Value: TRegulatorKind);
  248.     procedure SetMinValue(AValue: Integer);
  249.     procedure SetMaxValue(AValue: Integer);
  250.     procedure SetValue(AValue: Integer);
  251.     procedure GetSkinData; override;
  252.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  253.       X, Y: Integer); override;
  254.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  255.       X, Y: Integer); override;
  256.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  257.     procedure CalcValue;
  258.     procedure CalcFrame;
  259.   public
  260.     Kind: TRegulatorKind;
  261.     constructor Create(AOwner: TComponent); override;
  262.     procedure ChangeSkinData; override;
  263.   published
  264.     property DefaultKind: TRegulatorKind read FDefaultKind write SetDefaultKind;
  265.     property Value: Integer read FValue write SetValue;
  266.     property MinValue: Integer read FMinValue write SetMinValue;
  267.     property MaxValue: Integer read FMaxValue write SetMaxValue;
  268.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  269.     property Align;
  270.     property Enabled;
  271.     property OnMouseDown;
  272.     property OnMouseMove;
  273.     property OnMouseUp;
  274.     property OnResize;
  275.     property PopupMenu;
  276.     property ShowHint;
  277.   end;
  278.   TspSkinBorderStyle = (bvRaised, bvLowered, bvNone, bvFrame);
  279.   TspSkinPanelNumGlyphs = 1..2;
  280.   TspSkinPanel = class(TspSkinCustomControl)
  281.   protected
  282.     FCheckedMode: Boolean;
  283.     FChecked: Boolean;
  284.     FOnChecked: TNotifyEvent;
  285.     FAutoEnabledControls: Boolean;
  286.     FGlyph: TBitMap;
  287.     FNumGlyphs: TspSkinPanelNumGlyphs;
  288.     FSpacing: Integer;
  289.     FOldHeight: Integer;
  290.     FRollUpState: Boolean;
  291.     FRollUpMode: Boolean;
  292.     FCaptionMode: Boolean;
  293.     FBorderStyle: TspSkinBorderStyle;
  294.     FDefaultCaptionHeight: Integer;
  295.     FDefaultAlignment: TAlignment;
  296.     VisibleControls: TList;
  297.     procedure SetCheckedMode(Value: Boolean);
  298.     procedure SetChecked(Value: Boolean);
  299.     procedure SetGlyph(Value: TBitMap);
  300.     procedure SetNumGlyphs(Value: TspSkinPanelNumGlyphs);
  301.     procedure SetSpacing(Value: Integer);
  302.     procedure SetRollUpMode(Value: Boolean); 
  303.     procedure SetDefaultAlignment(Value: TAlignment);
  304.     procedure SetDefaultCaptionHeight(Value: Integer); virtual;
  305.     procedure SetBorderStyle(Value: TspSkinBorderStyle);
  306.     procedure SetRollUpState(Value: Boolean);
  307.     procedure SetCaptionMode(Value: Boolean); virtual;
  308.     procedure SetAlphaBlend(AValue: Boolean); override;
  309.     procedure SetAlphaBlendValue(AValue: Byte); override;
  310.     procedure CreateParams(var Params: TCreateParams); override;
  311.     procedure AdjustClientRect(var Rect: TRect); override;
  312.     procedure GetSkinData; override;
  313.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  314.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  315.       X, Y: Integer); override;
  316.     procedure CreateControlDefaultImage(B: TBitMap); override;
  317.     procedure CreateControlSkinImage(B: TBitMap); override;
  318.     procedure HideControls;
  319.     procedure ShowControls;
  320.     procedure SkinDrawCheckImage(X, Y: Integer; Cnvs: TCanvas; IR: TRect; DestCnvs: TCanvas);
  321.   public
  322.     FontName: String;
  323.     FontStyle: TFontStyles;
  324.     FontHeight: Integer;
  325.     FontColor: TColor;
  326.     Alignment: TAlignment;
  327.     CaptionRect: TRect;
  328.     NewCaptionRect: TRect;
  329.     RollUpMarkerRect: TRect;
  330.     RestoreMarkerRect: TRect;
  331.     NewRollUpMarkerRect: TRect;
  332.     BGPictureIndex: Integer;
  333.     CheckImageRect, UnCheckImageRect: TRect;
  334.     constructor Create(AOwner: TComponent); override;
  335.     destructor Destroy; override;
  336.     procedure ChangeSkinData; override;
  337.     procedure DoRollUp(ARollUp: Boolean);
  338.     procedure Paint; override;
  339.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  340.   published
  341.     property AutoEnabledControls: Boolean
  342.       read FAutoEnabledControls write FAutoEnabledControls;
  343.     property CheckedMode: Boolean read FCheckedMode write SetCheckedMode;
  344.     property Checked: Boolean read FChecked write SetChecked;
  345.     property Glyph: TBitMap read FGlyph write SetGlyph;
  346.     property NumGlyphs: TspSkinPanelNumGlyphs read FNumGlyphs write SetNumGlyphs;
  347.     property Spacing: Integer read FSpacing write SetSpacing;
  348.     property DefaultAlignment: TAlignment
  349.       read FDefaultAlignment write SetDefaultAlignment;
  350.     property DefaultCaptionHeight: Integer
  351.       read FDefaultCaptionHeight write SetDefaultCaptionHeight;
  352.     property BorderStyle: TspSkinBorderStyle
  353.       read FBorderStyle write SetBorderStyle;
  354.     property CaptionMode: Boolean read FCaptionMode write SetCaptionMode;
  355.     property RollUpMode: Boolean read FRollUpMode write SetRollUpMode;
  356.     property RollUpState: Boolean read FRollUpState write SetRollUpState;
  357.     property Caption;
  358.     property Align;
  359.     property DockSite;
  360.     property DragCursor;
  361.     property DragKind;
  362.     property DragMode;
  363.     property Enabled;
  364.     property ParentShowHint;
  365.     property PopupMenu;
  366.     property ShowHint;
  367.     property TabOrder;
  368.     property TabStop;
  369.     property Visible;
  370.     property OnChecked: TNotifyEvent read FOnChecked write FOnChecked;
  371.     property OnCanResize;
  372.     property OnClick;
  373.     property OnConstrainedResize;
  374.     property OnDockDrop;
  375.     property OnDockOver;
  376.     property OnDblClick;
  377.     property OnDragDrop;
  378.     property OnDragOver;
  379.     property OnEndDock;
  380.     property OnEndDrag;
  381.     property OnEnter;
  382.     property OnExit;
  383.     property OnGetSiteInfo;
  384.     property OnMouseDown;
  385.     property OnMouseMove;
  386.     property OnMouseUp;
  387.     property OnResize;
  388.     property OnStartDock;
  389.     property OnStartDrag;
  390.     property OnUnDock;
  391.   end;
  392.   TspExPanelRollKind = (rkRollHorizontal, rkRollVertical);
  393.   TspSkinExPanel = class(TspSkinCustomControl)
  394.   private
  395.     FOnChangeRollState: TNotifyEvent;
  396.     FOnClose: TNotifyEvent;
  397.     StopCheckSize: Boolean;
  398.     FRollState: Boolean;
  399.     FRollKind: TspExPanelRollKind;
  400.     FDefaultCaptionHeight: Integer;
  401.     VisibleControls: TList;
  402.     FRealWidth, FRealHEight: Integer;
  403.     FShowRollButton: Boolean;
  404.     FShowCloseButton: Boolean;
  405.     function GetRollWidth: Integer;
  406.     function GetRollHeight: Integer;
  407.     procedure SetShowRollButton(Value: Boolean);
  408.     procedure SetShowCloseButton(Value: Boolean);
  409.   protected
  410.     Buttons: array[0..1] of TspControlButton;
  411.     OldActiveButton, ActiveButton, CaptureButton: Integer;
  412.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  413.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  414.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  415.       X, Y: Integer); override;
  416.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  417.       X, Y: Integer); override;
  418.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  419.     procedure CreateControlDefaultImage(B: TBitMap); override;
  420.     procedure CreateControlSkinImage(B: TBitMap); override;
  421.     procedure SetDefaultCaptionHeight(Value: Integer);
  422.     procedure AdjustClientRect(var Rect: TRect); override;
  423.     procedure HideControls;
  424.     procedure ShowControls;
  425.     procedure SetRollState(Value: Boolean);
  426.     procedure SetRollKind(Value: TspExPanelRollKind);
  427.     //
  428.     procedure ButtonDown(I: Integer; X, Y: Integer);
  429.     procedure ButtonUp(I: Integer; X, Y: Integer);
  430.     procedure ButtonEnter(I: Integer);
  431.     procedure ButtonLeave(I: Integer);
  432.     procedure DrawButton(Cnvs: TCanvas; i: Integer);
  433.     procedure TestActive(X, Y: Integer);
  434.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  435.     procedure GetSkinData; override;
  436.   public
  437.     //
  438.     RollHSkinRect, RollVSkinRect: TRect;
  439.     RollLeftOffset, RollRightOffset,
  440.     RollTopOffset, RollBottomOffset: Integer;
  441.     RollVCaptionRect, RollHCaptionRect: TRect;
  442.     CloseButtonRect, CloseButtonActiveRect, CloseButtonDownRect: TRect;
  443.     HRollButtonRect, HRollButtonActiveRect, HRollButtonDownRect: TRect;
  444.     HRestoreButtonRect, HRestoreButtonActiveRect, HRestoreButtonDownRect: TRect;
  445.     VRollButtonRect, VRollButtonActiveRect, VRollButtonDownRect: TRect;
  446.     VRestoreButtonRect, VRestoreButtonActiveRect, VRestoreButtonDownRect: TRect;
  447.     CaptionRect: TRect;
  448.     FontName: String;
  449.     FontStyle: TFontStyles;
  450.     FontHeight: Integer;
  451.     FontColor: TColor;
  452.     //
  453.     constructor Create(AOwner: TComponent); override;
  454.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  455.     procedure ChangeSkinData; override;
  456.     procedure Close;
  457.     property RealWidth: Integer read FRealWidth;
  458.     property RealHeight: Integer read FRealHeight;
  459.   published
  460.     property ShowRollButton: Boolean
  461.       read FShowRollButton write SetShowRollButton;
  462.     property ShowCloseButton: Boolean
  463.       read FShowCloseButton write SetShowCloseButton;
  464.     property DefaultCaptionHeight: Integer
  465.       read FDefaultCaptionHeight write SetDefaultCaptionHeight;
  466.     property RollState: Boolean read FRollState write SetRollState;
  467.     property RollKind: TspExPanelRollKind read FRollKind write SetRollKind;
  468.     property Align;
  469.     property Caption;
  470.     property DockSite;
  471.     property DragCursor;
  472.     property DragKind;
  473.     property DragMode;
  474.     property Enabled;
  475.     property ParentShowHint;
  476.     property PopupMenu;
  477.     property ShowHint;
  478.     property TabOrder;
  479.     property TabStop;
  480.     property Visible;
  481.     property OnCanResize;
  482.     property OnClick;
  483.     property OnConstrainedResize;
  484.     property OnDockDrop;
  485.     property OnDockOver;
  486.     property OnDblClick;
  487.     property OnDragDrop;
  488.     property OnDragOver;
  489.     property OnEndDock;
  490.     property OnEndDrag;
  491.     property OnEnter;
  492.     property OnExit;
  493.     property OnGetSiteInfo;
  494.     property OnMouseDown;
  495.     property OnMouseMove;
  496.     property OnMouseUp;
  497.     property OnResize;
  498.     property OnStartDock;
  499.     property OnStartDrag;
  500.     property OnUnDock;
  501.     property OnChangeRollState: TNotifyEvent
  502.       read FOnChangeRollState write FOnChangeRollState;
  503.     property OnClose: TNotifyEvent read FOnClose write FOnClose;
  504.   end;
  505.   TspSkinGroupBox = class(TspSkinPanel)
  506.   public
  507.     constructor Create(AOwner: TComponent); override;
  508.   end;
  509.   TspNumGlyphs = 1..4;
  510.   TspButtonLayout = (blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom);
  511.   TspSkinButton = class(TspSkinCustomControl)
  512.   protected
  513.     RepeatTimer: TTimer;
  514.     FRepeatMode: Boolean;
  515.     FRepeatInterval: Integer;
  516.     FActive: Boolean;
  517.     FAllowAllUp: Boolean;
  518.     FAllowAllUpCheck: Boolean;
  519.     FDefault: Boolean;
  520.     FCancel: Boolean;
  521.     FModalResult: TModalResult;
  522.     FClicksDisabled: Boolean;
  523.     FCanFocused: Boolean;
  524.     FMorphKf: Double;
  525.     FDown: Boolean;
  526.     FMouseIn, FMouseDown: Boolean;
  527.     FGroupIndex: Integer;
  528.     FGlyph: TBitMap;
  529.     FNumGlyphs: TspNumGlyphs;
  530.     FOnClick: TNotifyEvent;
  531.     FMargin: Integer;
  532.     FSpacing: Integer;
  533.     FLayout: TspButtonLayout;
  534.     MorphTimer: TTimer;
  535.     procedure RepeatTimerProc(Sender: TObject);
  536.     procedure StartRepeat;
  537.     procedure StopRepeat;
  538.     procedure StartMorph;
  539.     procedure StopMorph;
  540.     procedure SetDefault(Value: Boolean);
  541.     function IsFocused: Boolean;
  542.     procedure SetCanFocused(Value: Boolean);
  543.     procedure DoMorph(Sender: TObject);
  544.     procedure CreateButtonImage(B: TBitMap; R: TRect;
  545.       ADown, AMouseIn: Boolean); virtual;
  546.     procedure SetLayout(Value : TspButtonLayout);
  547.     procedure SetGroupIndex(Value: Integer);
  548.     procedure SetDown(Value: Boolean);
  549.     procedure SetMargin(Value: Integer);
  550.     procedure SetSpacing(Value: Integer);
  551.     procedure DoAllUp;
  552.     procedure SetNumGlyphs(Value: TspNumGlyphs);
  553.     procedure SetGlyph(Value: TBitMap);
  554.     procedure GetSkinData; override;
  555.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  556.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  557.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  558.     procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED;
  559.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  560.       X, Y: Integer); override;
  561.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  562.       X, Y: Integer); override;
  563.     procedure ReDrawControl;
  564.     procedure CreateControlDefaultImage(B: TBitMap); override;
  565.     procedure CreateControlSkinImage(B: TBitMap); override;
  566.     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  567.     procedure WMSETFOCUS(var Message: TWMSETFOCUS); message WM_SETFOCUS;
  568.     procedure WMKILLFOCUS(var Message: TWMKILLFOCUS); message WM_KILLFOCUS;
  569.     procedure WndProc(var Message: TMessage); override;
  570.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  571.     procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
  572.     procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
  573.     procedure ButtonClick; virtual;
  574.     procedure CreateWnd; override;
  575.   public
  576.     FontName: String;
  577.     FontStyle: TFontStyles;
  578.     FontHeight: Integer;
  579.     FontColor, ActiveFontColor, DownFontColor, DisabledFontColor: TColor;
  580.     ActiveSkinRect, DownSkinRect, DisabledSkinRect: TRect;
  581.     Morphing: Boolean;
  582.     MorphKind: TMorphKind;
  583.     constructor Create(AOwner: TComponent); override;
  584.     destructor Destroy; override;
  585.     procedure ChangeSkinData; override;
  586.     procedure Paint; override; 
  587.   published
  588.     property RepeatMode: Boolean read FRepeatMode write FRepeatMode;
  589.     property RepeatInterval: Integer
  590.       read  FRepeatInterval write FRepeatInterval;
  591.     property AllowAllUp: Boolean read FAllowAllUp write FAllowAllUp;
  592.     property PopupMenu;
  593.     property ShowHint;
  594.     property TabStop;
  595.     property TabOrder;
  596.     property CanFocused: Boolean read FCanFocused write SetCanFocused;
  597.     property Action;
  598.     property Down: Boolean read FDown write SetDown;
  599.     property GroupIndex: Integer read FGroupIndex write SetGroupIndex;
  600.     property Caption;
  601.     property Glyph: TBitMap read FGlyph write SetGlyph;
  602.     property NumGlyhps: TspNumGlyphs read FNumGlyphs write SetNumGlyphs;
  603.     property Align;
  604.     property Margin: Integer read FMargin write SetMargin default -1;
  605.     property Spacing: Integer read FSpacing write SetSpacing default 4;
  606.     property Layout: TspButtonLayout read FLayout write SetLayout default blGlyphLeft;
  607.     property Enabled;
  608.     property Cancel: Boolean read FCancel write FCancel default False;
  609.     property Default: Boolean read FDefault write SetDefault default False;
  610.     property ModalResult: TModalResult read FModalResult write FModalResult default 0;
  611.     property OnClick: TNotifyEvent read FOnClick write FOnClick;
  612.     property OnMouseDown;
  613.     property OnMouseMove;
  614.     property OnMouseUp;
  615.     property OnResize;
  616.     property OnKeyDown;
  617.     property OnKeyPress;
  618.     property OnKeyUp;
  619.   end;
  620.   TspSkinMenuButton = class(TspSkinButton)
  621.   protected
  622.     FOnShowTrackMenu: TNotifyEvent;
  623.     FOnHideTrackMenu: TNotifyEvent;
  624.     FTrackButtonMode: Boolean;
  625.     FMenuTracked: Boolean;
  626.     FSkinPopupMenu: TspSkinPopupMenu;
  627.     procedure CreateButtonImage(B: TBitMap; R: TRect;
  628.       ADown, AMouseIn: Boolean); override;
  629.     function CanMenuTrack(X, Y: Integer): Boolean;
  630.     procedure TrackMenu;
  631.     procedure SetTrackButtonMode(Value: Boolean);
  632.     procedure GetSkinData; override;
  633.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  634.       X, Y: Integer); override;
  635.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  636.       X, Y: Integer); override;
  637.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  638.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  639.     procedure Notification(AComponent: TComponent;
  640.       Operation: TOperation); override;
  641.     procedure WMCLOSESKINMENU(var Message: TMessage); message WM_CLOSESKINMENU;
  642.     function GetNewTrackButtonRect: TRect;
  643.     procedure WndProc(var Message: TMessage); override;
  644.     procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
  645.     procedure CreateControlDefaultImage(B: TBitMap); override;
  646.   public
  647.     TrackButtonRect: TRect;
  648.     constructor Create(AOwner: TComponent); override;
  649.     destructor Destroy; override;
  650.   published
  651.     property SkinPopupMenu: TspSkinPopupMenu read FSkinPopupMenu
  652.                                              write FSkinPopupMenu;
  653.     property TrackButtonMode: Boolean read FTrackButtonMode
  654.                                       write SetTrackButtonMode;
  655.     property OnShowTrackMenu: TNotifyEvent read FOnShowTrackMenu
  656.                                            write FOnShowTrackMenu;
  657.     property OnHideTrackMenu: TNotifyEvent read FOnHideTrackMenu
  658.                                            write FOnHideTrackMenu;
  659.   end;
  660.   TspSkinCheckRadioBox = class(TspSkinCustomControl)
  661.   protected
  662.     FFlat: Boolean;
  663.     FClicksDisabled: Boolean;
  664.     FCanFocused: Boolean;
  665.     FMouseIn: Boolean;
  666.     FGroupIndex: Integer;
  667.     FOnClick: TNotifyEvent;
  668.     FChecked: Boolean;
  669.     CIRect, NewTextArea: TRect;
  670.     FRadio: Boolean;
  671.     MorphTimer: TTimer;
  672.     FMorphKf: Double;
  673.     procedure StartMorph;
  674.     procedure StopMorph;
  675.     function IsFocused: Boolean;
  676.     procedure SetCheckState;
  677.     procedure SetFlat(Value: Boolean);
  678.     procedure SetCanFocused(Value: Boolean);
  679.     procedure SetRadio(Value: Boolean);
  680.     procedure SetChecked(Value: Boolean);
  681.     procedure DoMorph(Sender: TObject);
  682.     procedure CreateImage(B: TBitMap; R: TRect; AMouseIn: Boolean);
  683.     procedure UnCheckAll;
  684.     procedure GetSkinData; override;
  685.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  686.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  687.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  688.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  689.       X, Y: Integer); override;
  690.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  691.       X, Y: Integer); override;
  692.     procedure ReDrawControl;
  693.     procedure CalcSize(var W, H: Integer); override;
  694.     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  695.     procedure WMSETFOCUS(var Message: TWMSETFOCUS); message WM_SETFOCUS;
  696.     procedure WMMOVE(var Message: TWMSETFOCUS); message WM_MOVE;
  697.     procedure WMKILLFOCUS(var Message: TWMKILLFOCUS); message WM_KILLFOCUS;
  698.     procedure WndProc(var Message: TMessage); override;
  699.     procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
  700.     procedure CreateControlDefaultImage(B: TBitMap); override;
  701.     procedure SkinDrawCheckImage(X, Y: Integer; Cnvs: TCanvas; IR: TRect; DestCnvs: TCanvas);
  702.   public
  703.     FontName: String;
  704.     FontStyle: TFontStyles;
  705.     FontHeight: Integer;
  706.     FontColor, ActiveFontColor, FrameFontColor, UnEnabledFontColor: TColor;
  707.     ActiveSkinRect, CheckImageArea, TextArea,
  708.     CheckImageRect, UnCheckImageRect: TRect;
  709.     ActiveCheckImageRect, ActiveUnCheckImageRect: TRect;
  710.     UnEnabledCheckImageRect, UnEnabledUnCheckImageRect: TRect;
  711.     Morphing: Boolean;
  712.     MorphKind: TMorphKind;
  713.     constructor Create(AOwner: TComponent); override;
  714.     destructor Destroy; override;
  715.     procedure ChangeSkinData; override;
  716.     procedure Paint; override;
  717.   published
  718.     property PopupMenu;
  719.     property ShowHint;
  720.     property TabStop;
  721.     property TabOrder;
  722.     property CanFocused: Boolean read FCanFocused write SetCanFocused;
  723.     property Action;
  724.     property Radio: Boolean read FRadio write SetRadio;
  725.     property Checked: Boolean read FChecked write SetChecked;
  726.     property GroupIndex: Integer read FGroupIndex write FGroupIndex;
  727.     property Flat: Boolean read FFlat write SetFlat;
  728.     property Caption;
  729.     property OnClick: TNotifyEvent read FOnClick write FOnClick;
  730.     property Align;
  731.     property Enabled;
  732.     property OnMouseDown;
  733.     property OnMouseMove;
  734.     property OnMouseUp;
  735.     property OnResize;
  736.     property OnKeyDown;
  737.     property OnKeyPress;
  738.     property OnKeyUp;
  739.   end;
  740.   TspSkinGauge = class(TspSkinCustomControl)
  741.   protected
  742.     FMinValue, FMaxValue, FValue: Integer;
  743.     FVertical: Boolean;
  744.     FProgressText: String;
  745.     FShowPercent: Boolean;
  746.     FShowProgressText: Boolean;
  747.     FTextAlphaBlend: Boolean;
  748.     FTextAlphaBlendValue: Byte;
  749.     procedure SetTextAlphaBlendValue(Value: Byte);
  750.     procedure SetTextAlphaBlend(Value: Boolean);
  751.     procedure SetShowProgressText(Value: Boolean);
  752.     procedure SetShowPercent(Value: Boolean);
  753.     procedure SetProgressText(Value: String);
  754.     procedure SetVertical(AValue: Boolean);
  755.     procedure SetMinValue(AValue: Integer);
  756.     procedure SetMaxValue(AValue: Integer);
  757.     procedure SetValue(AValue: Integer);
  758.     procedure GetSkinData; override;
  759.     procedure CreateImage(B: TBitMap);
  760.     procedure CalcSize(var W, H: Integer); override;
  761.     procedure DrawProgressText(C: TCanvas);
  762.     procedure CreateControlDefaultImage(B: TBitMap); override;
  763.     procedure CreateControlSkinImage(B: TBitMap); override;
  764.   public
  765.     ProgressRect, ProgressArea: TRect;
  766.     NewProgressArea: TRect;
  767.     BeginOffset, EndOffset: Integer;
  768.     FontName: String;
  769.     FontStyle: TFontStyles;
  770.     FontHeight: Integer;
  771.     FontColor: TColor;
  772.     constructor Create(AOwner: TComponent); override;
  773.     function CalcProgressRect(R: TRect; AV: Boolean): TRect;
  774.   published
  775.     property TextAlphaBlend: Boolean read FTextAlphaBlend
  776.                                       write SetTextAlphaBlend;
  777.     property TextAlphaBlendValue: Byte read FTextAlphaBlendValue
  778.                                       write SetTextAlphaBlendValue;
  779.     property ProgressText: String read FProgressText write SetProgressText;
  780.     property ShowProgressText: Boolean read FShowProgressText write SetShowProgressText;
  781.     property ShowPercent: Boolean read FShowPercent write SetShowPercent;
  782.     property MinValue: Integer read FMinValue write SetMinValue;
  783.     property MaxValue: Integer read FMaxValue write SetMaxValue;
  784.     property Value: Integer read FValue write SetValue;
  785.     property Vertical: Boolean
  786.       read FVertical write SetVertical;
  787.     property Align;
  788.     property Enabled;
  789.     property OnMouseDown;
  790.     property OnMouseMove;
  791.     property OnMouseUp;
  792.     property OnResize;
  793.     property PopupMenu;
  794.     property ShowHint;
  795.   end;
  796.   TspSkinButtonLabel = class(TGraphicControl)
  797.   protected
  798.     FMouseIn, FDown: Boolean;
  799.     FIndex: Integer;
  800.     FSD: TspSkinData;
  801.     FSkinDataName: String;
  802.     FDefaultFont: TFont;
  803.     FUseSkinFont: Boolean;
  804.     FDefaultActiveFontColor: TColor;
  805.     FGlyph: TBitMap;
  806.     FNumGlyphs: TspNumGlyphs;
  807.     FMargin: Integer;
  808.     FSpacing: Integer;
  809.     FLayout: TspButtonLayout;
  810.     procedure Notification(AComponent: TComponent;
  811.       Operation: TOperation); override;
  812.     procedure SetSkinData(Value: TspSkinData);
  813.     procedure SetDefaultFont(Value: TFont);
  814.     procedure SetLayout(Value : TspButtonLayout);
  815.     procedure SetMargin(Value: Integer);
  816.     procedure SetSpacing(Value: Integer);
  817.     procedure SetNumGlyphs(Value: TspNumGlyphs);
  818.     procedure SetGlyph(Value: TBitMap);
  819.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  820.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  821.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  822.       X, Y: Integer); override;
  823.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  824.       X, Y: Integer); override;
  825.   public
  826.     FontColor: TColor;
  827.     ActiveFontColor: TColor;
  828.     FontName: String;
  829.     FontHeight: Integer;
  830.     FontStyle: TFontStyles;
  831.     constructor Create(AOwner: TComponent); override;
  832.     destructor Destroy; override;
  833.     procedure ChangeSkinData;
  834.     procedure Paint; override;
  835.   published
  836.     property Glyph: TBitMap read FGlyph write SetGlyph;
  837.     property NumGlyphs: TspNumGlyphs read FNumGlyphs write SetNumGlyphs;
  838.     property Margin: Integer read FMargin write SetMargin default -1;
  839.     property Spacing: Integer read FSpacing write SetSpacing default 4;
  840.     property Layout: TspButtonLayout read FLayout write SetLayout default blGlyphLeft;
  841.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  842.     property DefaultActiveFontColor: TColor
  843.       read FDefaultActiveFontColor write FDefaultActiveFontColor;
  844.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  845.     property SkinData: TspSkinData read FSD write SetSkinData;
  846.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  847.     property Align;
  848.     property Anchors;
  849.     property AutoSize;
  850.     property BiDiMode;
  851.     property Caption;
  852.     property Constraints;
  853.     property DragCursor;
  854.     property DragKind;
  855.     property DragMode;
  856.     property Enabled;
  857.     property ParentBiDiMode;
  858.     property ParentColor;
  859.     property ParentFont;
  860.     property ParentShowHint;
  861.     property PopupMenu;
  862.     property ShowHint;
  863.     property Visible;
  864.     property OnClick;
  865.     property OnDblClick;
  866.     property OnDragDrop;
  867.     property OnDragOver;
  868.     property OnEndDock;
  869.     property OnEndDrag;
  870.     property OnMouseDown;
  871.     property OnMouseMove;
  872.     property OnMouseUp;
  873.     property OnStartDock;
  874.     property OnStartDrag;
  875.   end;
  876.   TspSkinLinkImage = class(TImage)
  877.   private
  878.     FURL: String;
  879.   protected
  880.     procedure Click; override;
  881.   public
  882.     constructor Create(AOwner : TComponent); override;
  883.   published
  884.     property URL: string read FURL write FURL;
  885.   end;
  886.   TspSkinLinkLabel = class(TCustomLabel)
  887.   protected
  888.     FMouseIn: Boolean;
  889.     FIndex: Integer;
  890.     FSD: TspSkinData;
  891.     FSkinDataName: String;
  892.     FDefaultFont: TFont;
  893.     FUseSkinFont: Boolean;
  894.     FDefaultActiveFontColor: TColor;
  895.      FURL: String;
  896.     procedure Notification(AComponent: TComponent;
  897.       Operation: TOperation); override;
  898.     procedure SetSkinData(Value: TspSkinData);
  899.     procedure SetDefaultFont(Value: TFont);
  900.     property Transparent;
  901.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  902.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  903.     procedure GetSkinData;
  904.     procedure DoDrawText(var Rect: TRect; Flags: Longint); override;
  905.   public
  906.     FontName: String;
  907.     FontStyle: TFontStyles;
  908.     FontHeight: Integer;
  909.     FontColor, ActiveFontColor: TColor;
  910.     constructor Create(AOwner: TComponent); override;
  911.     destructor Destroy; override;
  912.     procedure ChangeSkinData;
  913.     procedure Click; override;
  914.   published
  915.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  916.     property DefaultActiveFontColor: TColor
  917.       read FDefaultActiveFontColor write FDefaultActiveFontColor;
  918.     property URL: String read FURL write FURL;
  919.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  920.     property SkinData: TspSkinData read FSD write SetSkinData;
  921.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  922.     property Font;
  923.     property Align;
  924.     property Alignment;
  925.     property Anchors;
  926.     property AutoSize;
  927.     property BiDiMode;
  928.     property Caption;
  929.     property Color;
  930.     property Constraints;
  931.     property DragCursor;
  932.     property DragKind;
  933.     property DragMode;
  934.     property Enabled;
  935.     property FocusControl;
  936.     property ParentBiDiMode;
  937.     property ParentColor;
  938.     property ParentFont;
  939.     property ParentShowHint;
  940.     property PopupMenu;
  941.     property ShowAccelChar;
  942.     property ShowHint;
  943.     property Layout;
  944.     property Visible;
  945.     property WordWrap;
  946.     property OnClick;
  947.     property OnDblClick;
  948.     property OnDragDrop;
  949.     property OnDragOver;
  950.     property OnEndDock;
  951.     property OnEndDrag;
  952.     property OnMouseDown;
  953.     property OnMouseMove;
  954.     property OnMouseUp;
  955.     property OnStartDock;
  956.     property OnStartDrag;
  957.   end;
  958.   TspSkinTextLabel = class(TGraphicControl)
  959.   private
  960.     FIndex: Integer;
  961.     FSD: TspSkinData;
  962.     FSkinDataName: String;
  963.     FDefaultFont: TFont;
  964.     FUseSkinFont: Boolean;
  965.     //
  966.     FLines: TStrings;
  967.     FAlignment: TAlignment;
  968.     FAutoSize: Boolean;
  969.     FLayout: TTextLayout;
  970.     FWordWrap: Boolean;
  971.     procedure SetSkinData(Value: TspSkinData);
  972.     procedure SetDefaultFont(Value: TFont);
  973.     procedure SetLines(Value: TStrings);
  974.     procedure SetAlignment(Value: TAlignment);
  975.     procedure SetLayout(Value: TTextLayout);
  976.     procedure SetWordWrap(Value: Boolean);
  977.     procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
  978.   protected
  979.     procedure AdjustBounds; dynamic;
  980.     function GetLabelText: string; virtual;
  981.     procedure Loaded; override;
  982.     procedure Notification(AComponent: TComponent;
  983.       Operation: TOperation); override;
  984.     procedure SetAutoSize(Value: Boolean); virtual;
  985.     procedure DoDrawText(var Rect: TRect; Flags: Longint);
  986.   public
  987.     FontName: String;
  988.     FontStyle: TFontStyles;
  989.     FontHeight: Integer;
  990.     FontColor: TColor;
  991.     constructor Create(AOwner: TComponent); override;
  992.     destructor Destroy; override;
  993.     property Canvas;
  994.     procedure ChangeSkinData;
  995.     procedure GetSkinData;
  996.     procedure Paint; override;
  997.   published
  998.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  999.     property Lines: TStrings read FLines write SetLines;
  1000.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  1001.     property SkinData: TspSkinData read FSD write SetSkinData;
  1002.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  1003.     property Font;
  1004.     property Align;
  1005.     property Alignment: TAlignment read FAlignment write SetAlignment
  1006.       default taLeftJustify;
  1007.     property AutoSize: Boolean read FAutoSize write SetAutoSize default True;
  1008.     property Layout: TTextLayout read FLayout write SetLayout default tlTop;
  1009.     property WordWrap: Boolean read FWordWrap write SetWordWrap default False;
  1010.     property Anchors;
  1011.     property BiDiMode;
  1012.     property Constraints;                                      
  1013.     property DragCursor;
  1014.     property DragKind;
  1015.     property DragMode;
  1016.     property Enabled;
  1017.     property ParentBiDiMode;
  1018.     property ParentColor;
  1019.     property ParentFont;
  1020.     property ParentShowHint;
  1021.     property PopupMenu;
  1022.     property ShowHint;
  1023.     property Visible;
  1024.     property OnClick;
  1025.     property OnDblClick;
  1026.     property OnDragDrop;
  1027.     property OnDragOver;
  1028.     property OnEndDock;
  1029.     property OnEndDrag;
  1030.     property OnMouseDown;
  1031.     property OnMouseMove;
  1032.     property OnMouseUp;
  1033.     property OnStartDock;
  1034.     property OnStartDrag;
  1035.   end;
  1036.   TspSkinStdLabel = class(TCustomLabel)
  1037.   protected
  1038.     FIndex: Integer;
  1039.     FSD: TspSkinData;
  1040.     FSkinDataName: String;
  1041.     FDefaultFont: TFont;
  1042.     FUseSkinFont: Boolean;
  1043.     procedure Notification(AComponent: TComponent;
  1044.       Operation: TOperation); override;
  1045.     procedure SetSkinData(Value: TspSkinData);
  1046.     procedure SetDefaultFont(Value: TFont);
  1047.     property Transparent;
  1048.     procedure DoDrawText(var Rect: TRect; Flags: Longint); override;
  1049.   public
  1050.     FontName: String;
  1051.     FontStyle: TFontStyles;
  1052.     FontHeight: Integer;
  1053.     FontColor: TColor;
  1054.     constructor Create(AOwner: TComponent); override;
  1055.     destructor Destroy; override;
  1056.     procedure GetSkinData;
  1057.     procedure ChangeSkinData;
  1058.   published
  1059.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  1060.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  1061.     property SkinData: TspSkinData read FSD write SetSkinData;
  1062.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  1063.     property Font;
  1064.     property Align;
  1065.     property Alignment;
  1066.     property Anchors;
  1067.     property AutoSize;
  1068.     property BiDiMode;
  1069.     property Caption;
  1070.     property Color;
  1071.     property Constraints;
  1072.     property DragCursor;
  1073.     property DragKind;
  1074.     property DragMode;
  1075.     property Enabled;
  1076.     property FocusControl;
  1077.     property ParentBiDiMode;
  1078.     property ParentColor;
  1079.     property ParentFont;
  1080.     property ParentShowHint;
  1081.     property PopupMenu;
  1082.     property ShowAccelChar;
  1083.     property ShowHint;
  1084.     property Layout;
  1085.     property Visible;
  1086.     property WordWrap;
  1087.     property OnClick;
  1088.     property OnDblClick;
  1089.     property OnDragDrop;
  1090.     property OnDragOver;
  1091.     property OnEndDock;
  1092.     property OnEndDrag;
  1093.     property OnMouseDown;
  1094.     property OnMouseMove;
  1095.     property OnMouseUp;
  1096.     property OnStartDock;
  1097.     property OnStartDrag;
  1098.   end;
  1099.   TspSkinLabel = class(TspSkinCustomControl)
  1100.   protected
  1101.     FAlignment: TAlignment;
  1102.     FAutoSize: Boolean;
  1103.     FBorderStyle: TspSkinBorderStyle;
  1104.     procedure SetBorderStyle(Value: TspSkinBorderStyle);
  1105.     procedure DrawLabelText(Cnvs: TCanvas; R: TRect);
  1106.     function CalcWidthOffset: Integer;
  1107.     procedure AdjustBounds;
  1108.     procedure PaintLabel(B: TBitMap);
  1109.     procedure SetAutoSizeX(Value: Boolean);
  1110.     procedure SetAlignment(Value: TAlignment);
  1111.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  1112.     procedure CalcSize(var W, H: Integer); override;
  1113.     procedure GetSkinData; override;
  1114.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1115.     procedure CreateControlSkinImage(B: TBitMap); override;
  1116.   public
  1117.     FontName: String;
  1118.     FontStyle: TFontStyles;
  1119.     FontHeight: Integer;
  1120.     FontColor: TColor;
  1121.     constructor Create(AOwner: TComponent); override;
  1122.   published
  1123.     property BorderStyle: TspSkinBorderStyle
  1124.       read FBorderStyle write SetBorderStyle;
  1125.     property Alignment: TAlignment read FAlignment write SetAlignment
  1126.       default taLeftJustify;
  1127.     property AutoSize: Boolean read FAutoSize write SetAutoSizeX;
  1128.     property Align;
  1129.     property Caption;
  1130.     property DragCursor;
  1131.     property DragKind;
  1132.     property DragMode;
  1133.     property Enabled;
  1134.     property PopupMenu;
  1135.     property ShowHint;
  1136.     property Visible;
  1137.     property OnClick;
  1138.     property OnDblClick;
  1139.     property OnDragDrop;
  1140.     property OnDragOver;
  1141.     property OnEndDock;
  1142.     property OnEndDrag;
  1143.     property OnMouseDown;
  1144.     property OnMouseMove;
  1145.     property OnMouseUp;
  1146.     property OnStartDock;
  1147.     property OnStartDrag;
  1148.   end;
  1149.   TspSkinBitLabel = class(TspSkinCustomControl)
  1150.   protected
  1151.     FAutoSize: Boolean;
  1152.     FFixLength: Integer;
  1153.     function GetFixWidth: Integer;
  1154.     procedure SetFixLength(Value: Integer);
  1155.     procedure AdjustBounds;
  1156.     procedure GetSkinData; override;
  1157.     procedure PaintLabel(B: TBitMap);
  1158.     procedure CalcSize(var W, H: Integer); override;
  1159.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  1160.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1161.     procedure CreateControlSkinImage(B: TBitMap); override;
  1162.   public
  1163.     SkinTextRect: TRect;
  1164.     SymbolWidth: Integer;
  1165.     SymbolHeight: Integer;
  1166.     Symbols: TStrings;
  1167.     procedure SetAutoSizeX(Value: Boolean);
  1168.     constructor Create(AOwner: TComponent); override;
  1169.   published
  1170.     property Caption;
  1171.     property AutoSize: Boolean read FAutoSize write SetAutoSizeX;
  1172.     property FixLength: Integer read FFixLength write SetFixLength;
  1173.     property OnMouseDown;
  1174.     property OnMouseMove;
  1175.     property OnMouseUp;
  1176.   end;
  1177.   
  1178.   TspSkinTrackBar = class(TspSkinCustomControl)
  1179.   protected
  1180.     FClicksDisabled: Boolean;
  1181.     FCanFocused: Boolean;
  1182.     Offset1, Offset2, BOffset: Integer;
  1183.     BR: TRect;
  1184.     FMinValue, FMaxValue, FValue: Integer;
  1185.     FVertical: Boolean;
  1186.     FMouseSupport, FDown: Boolean;
  1187.     OMPos: Integer;
  1188.     OldBOffset: Integer;
  1189.     FOnChange: TNotifyEvent;
  1190.     function IsFocused: Boolean;
  1191.     procedure SetCanFocused(Value: Boolean);
  1192.     procedure SetVertical(AValue: Boolean);
  1193.     procedure SetMinValue(AValue: Integer);
  1194.     procedure SetMaxValue(AValue: Integer);
  1195.     procedure SetValue(AValue: Integer);
  1196.     procedure GetSkinData; override;
  1197.     procedure CreateImage(B: TBitMap);
  1198.     procedure CalcSize(var W, H: Integer); override;
  1199.     function CalcButtonRect(R: TRect; AV: Boolean): TRect;
  1200.     function CalcValue(AOffset: Integer): Integer;
  1201.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  1202.       X, Y: Integer); override;
  1203.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1204.       X, Y: Integer); override;
  1205.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1206.     procedure WMMOUSEWHEEL(var Message: TMessage); message WM_MOUSEWHEEL;
  1207.     procedure WMSETFOCUS(var Message: TWMSETFOCUS); message WM_SETFOCUS;
  1208.     procedure WMKILLFOCUS(var Message: TWMKILLFOCUS); message WM_KILLFOCUS;
  1209.     procedure WndProc(var Message: TMessage); override;
  1210.     procedure CMWantSpecialKey(var Msg: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
  1211.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  1212.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1213.     procedure CreateControlSkinImage(B: TBitMap); override;
  1214.   public
  1215.     TrackArea, NewTrackArea, ButtonRect, ActiveButtonRect: TRect;
  1216.     constructor Create(AOwner: TComponent); override;
  1217.   published
  1218.     property PopupMenu;
  1219.     property ShowHint;
  1220.     property TabStop;
  1221.     property TabOrder;
  1222.     property CanFocused: Boolean read FCanFocused write SetCanFocused;
  1223.     property MouseSupport: Boolean read FMouseSupport write FMouseSupport;
  1224.     property MinValue: Integer read FMinValue write SetMinValue;
  1225.     property MaxValue: Integer read FMaxValue write SetMaxValue;
  1226.     property Value: Integer read FValue write SetValue;
  1227.     property Vertical: Boolean read FVertical write SetVertical;
  1228.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  1229.     property Align;
  1230.     property Enabled;
  1231.     property OnMouseDown;
  1232.     property OnMouseMove;
  1233.     property OnMouseUp;
  1234.     property OnResize;
  1235.     property OnKeyDown;
  1236.     property OnKeyPress;
  1237.     property OnKeyUp;
  1238.   end;
  1239.   TspSkinScrollBar = class(TspSkinCustomControl)
  1240.   private
  1241.     FNormalSkinDataName: String;
  1242.     FBothSkinDataName: String;
  1243.     Offset1, Offset2, BOffset: Integer;
  1244.     NewTrackArea: TRect;
  1245.     FDown: Boolean;
  1246.     OMPos, OldPosition, FScrollWidth: Integer;
  1247.     OldBOffset: Integer;
  1248.     WaitMode: Boolean;
  1249.     MX, MY: Integer;
  1250.     MouseD: Boolean;
  1251.     FOnUpButtonClick: TNotifyEvent;
  1252.     FOnDownButtonClick: TNotifyEvent;
  1253.   protected
  1254.     FBothMarkerWidth: Integer;
  1255.     FClicksDisabled: Boolean;
  1256.     FCanFocused: Boolean;
  1257.     FOnChange: TNotifyEvent;
  1258.     FOnLastChange: TNotifyEvent;
  1259.     TimerMode: Integer;
  1260.     ActiveButton, OldActiveButton, CaptureButton: Integer;
  1261.     Buttons: array[0..2] of TspControlButton;
  1262.     FMin, FMax, FSmallChange,
  1263.     FLargeChange, FPosition: Integer;
  1264.     FKind: TScrollBarKind;
  1265.     FPageSize: Integer;
  1266.     procedure SetBothMarkerWidth(Value: Integer);
  1267.     function IsFocused: Boolean;
  1268.     procedure SetCanFocused(Value: Boolean);
  1269.     procedure TestActive(X, Y: Integer);
  1270.     procedure SetPageSize(AValue: Integer);
  1271.     procedure ButtonDown(I: Integer; X, Y: Integer);
  1272.     procedure ButtonUp(I: Integer; X, Y: Integer);
  1273.     procedure ButtonEnter(I: Integer);
  1274.     procedure ButtonLeave(I: Integer);
  1275.     procedure CalcRects;
  1276.     function CalcValue(AOffset: Integer): Integer;
  1277.     procedure SetKind(AValue: TScrollBarKind);
  1278.     procedure SetPosition(AValue: Integer);
  1279.     procedure SetMin(AValue: Integer);
  1280.     procedure SetMax(AValue: Integer);
  1281.     procedure SetSmallChange(AValue: Integer);
  1282.     procedure SetLargeChange(AValue: Integer);
  1283.     procedure SetBoth(Value: Boolean);
  1284.     procedure CalcSize(var W, H: Integer); override;
  1285.     procedure GetSkinData; override;
  1286.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  1287.       X, Y: Integer); override;
  1288.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1289.       X, Y: Integer); override;
  1290.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1291.     procedure WMTimer(var Message: TWMTimer); message WM_Timer;
  1292.     procedure StartScroll;
  1293.     procedure StopTimer;
  1294.     procedure DrawButton(Cnvs: TCanvas; i: Integer);
  1295.     procedure WMMOUSEWHEEL(var Message: TMessage); message WM_MOUSEWHEEL;
  1296.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  1297.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  1298.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  1299.     procedure WMSETFOCUS(var Message: TWMSETFOCUS); message WM_SETFOCUS;
  1300.     procedure WMKILLFOCUS(var Message: TWMKILLFOCUS); message WM_KILLFOCUS;
  1301.     procedure WndProc(var Message: TMessage); override;
  1302.     procedure CMWantSpecialKey(var Msg: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
  1303.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  1304.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1305.     procedure CreateControlSkinImage(B: TBitMap); override;
  1306.     
  1307.   public
  1308.     FBoth: Boolean;
  1309.     TrackArea: TRect;
  1310.     UpButtonRect, ActiveUpButtonRect, DownUpButtonRect: TRect;
  1311.     DownButtonRect, ActiveDownButtonRect, DownDownButtonRect: TRect;
  1312.     ThumbRect, ActiveThumbRect, DownThumbRect: TRect;
  1313.     ThumbOffset1, ThumbOffset2: Integer;
  1314.     GlyphRect, ActiveGlyphRect, DownGlyphRect: TRect;
  1315.     procedure SimplySetPosition(AValue: Integer);
  1316.     constructor Create(AOwner: TComponent); override;
  1317.     procedure SetRange(AMin, AMax, APosition, APageSize: Integer);
  1318.   published
  1319.     property Both: Boolean read FBoth write SetBoth;
  1320.     property BothMarkerWidth: Integer
  1321.       read FBothMarkerWidth write SetBothMarkerWidth;
  1322.     property BothSkinDataName: String
  1323.       read FBothSkinDataName write FBothSkinDataName;
  1324.     property TabStop;
  1325.     property TabOrder;
  1326.     property CanFocused: Boolean read FCanFocused write SetCanFocused;
  1327.     property Align;
  1328.     property Kind: TScrollBarKind read FKind write SetKind;
  1329.     property PageSize: Integer read FPageSize write SetPageSize;
  1330.     property Min: Integer read FMin write SetMin;
  1331.     property Max: Integer read FMax write SetMax;
  1332.     property Position: Integer read FPosition write SetPosition;
  1333.     property SmallChange: Integer read FSmallChange write SetSmallChange;
  1334.     property LargeChange: Integer read FLargeChange write SetLargeChange;
  1335.     property OnUpButtonClick: TNotifyEvent read FOnUpButtonClick write FOnUpButtonClick;
  1336.     property OnDownButtonClick: TNotifyEvent read FOnDownButtonClick write FOnDownButtonClick;
  1337.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  1338.     property OnLastChange: TNotifyEvent read FOnLastChange write FOnLastChange;
  1339.     property OnKeyDown;
  1340.     property OnKeyPress;
  1341.     property OnKeyUp;
  1342.     property OnMouseDown;
  1343.     property OnMouseMove;
  1344.     property OnMouseUp;
  1345.     property OnResize;
  1346.   end;
  1347.   TspSkinControlBar = class(TCustomControlBar)
  1348.   protected
  1349.     FSkinBevel: Boolean;
  1350.     FIndex: Integer;
  1351.     FSD: TspSkinData;
  1352.     FSkinDataName: String;
  1353.     procedure PaintNCSkin;
  1354.     procedure SetSkinBevel(Value: Boolean);
  1355.     procedure SetSkinData(Value: TspSkinData);
  1356.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  1357.     procedure CreateParams(var Params: TCreateParams); override;
  1358.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  1359.     procedure WMSIZE(var Message: TWMSIZE); message WM_SIZE;
  1360.     procedure WMNCPAINT(var Message: TMessage); message WM_NCPAINT;
  1361.     procedure Notification(AComponent: TComponent;
  1362.       Operation: TOperation); override;
  1363.     procedure PaintControlFrame(Canvas: TCanvas; AControl: TControl;
  1364.       var ARect: TRect); override;
  1365.   public
  1366.     LTPt, RTPt, LBPt, RBPt: TPoint;
  1367.     SkinRect, ClRect, NewClRect, ItemRect: TRect;
  1368.     NewLTPoint, NewRTPoint, NewLBPoint, NewRBPoint: TPoint;
  1369.     FSkinPicture: TBitMap;
  1370.     BGPictureIndex: Integer;
  1371.     constructor Create(AOwner: TComponent); override;
  1372.     destructor Destroy; override;
  1373.     procedure Paint; override;
  1374.     property Canvas;
  1375.     procedure GetSkinData;
  1376.     procedure ChangeSkinData;
  1377.   published
  1378.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  1379.     property SkinData: TspSkinData read FSD write SetSkinData;
  1380.     property SkinBevel: Boolean read FSkinBevel write SetSkinBevel;
  1381.     property Align;
  1382.     property Anchors;
  1383.     property AutoDrag;
  1384.     property AutoSize;
  1385.     property BevelEdges;
  1386.     property BevelInner;
  1387.     property BevelOuter;
  1388.     property BevelKind;
  1389.     property BevelWidth;
  1390.     property BorderWidth;
  1391.     property Color;
  1392.     property Constraints;
  1393.     property DockSite;
  1394.     property DragCursor;
  1395.     property DragKind;
  1396.     property DragMode;
  1397.     property Enabled;
  1398.     property ParentColor;
  1399.     property ParentCtl3D;
  1400.     property ParentFont;
  1401.     property ParentShowHint;
  1402.     property Picture;
  1403.     property PopupMenu;
  1404.     property RowSize;
  1405.     property RowSnap;
  1406.     property ShowHint;
  1407.     property TabOrder;
  1408.     property TabStop;
  1409.     property Visible;
  1410.     property OnBandDrag;
  1411.     property OnBandInfo;
  1412.     property OnBandMove;
  1413.     property OnBandPaint;
  1414.     property OnCanResize;
  1415.     property OnClick;
  1416.     property OnConstrainedResize;
  1417.     property OnDockDrop;
  1418.     property OnDockOver;
  1419.     property OnDblClick;
  1420.     property OnDragDrop;
  1421.     property OnDragOver;
  1422.     property OnEndDock;
  1423.     property OnEndDrag;
  1424.     property OnEnter;
  1425.     property OnExit;
  1426.     property OnGetSiteInfo;
  1427.     property OnMouseDown;
  1428.     property OnMouseMove;
  1429.     property OnMouseUp;
  1430.     property OnPaint;
  1431.     property OnResize;
  1432.     property OnStartDock;
  1433.     property OnStartDrag;
  1434.     property OnUnDock;
  1435.   end;
  1436.   TspSkinSplitter = class(TSplitter)
  1437.   protected
  1438.     FDefaultSize: Integer;
  1439.     FIndex: Integer;
  1440.     FSD: TspSkinData;
  1441.     FSkinDataName: String;
  1442.     procedure SetSkinData(Value: TspSkinData);
  1443.     procedure Notification(AComponent: TComponent;
  1444.       Operation: TOperation); override;
  1445.       
  1446.   public
  1447.     LTPt, RTPt, LBPt: TPoint;
  1448.     SkinRect: TRect;
  1449.     FSkinPicture: TBitMap;
  1450.     procedure GetSkinData;
  1451.     procedure ChangeSkinData;
  1452.     constructor Create(AOwner: TComponent); override;
  1453.     destructor Destroy; override;
  1454.     procedure Paint; override;
  1455.   published
  1456.     property DefaultSize: Integer read FDefaultSize write FDefaultSize;
  1457.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  1458.     property SkinData: TspSkinData read FSD write SetSkinData;
  1459.   end;
  1460.   TspSkinCustomRadioGroup = class(TspSkinGroupBox)
  1461.   private
  1462.     FButtonSkinDataName: String;
  1463.     FButtons: TList;
  1464.     FItems: TStrings;
  1465.     FItemIndex: Integer;
  1466.     FColumns: Integer;
  1467.     FReading: Boolean;
  1468.     FUpdating: Boolean;
  1469.     procedure SetButtonSkinDataName(Value: String);
  1470.     procedure ArrangeButtons;
  1471.     procedure ButtonClick(Sender: TObject);
  1472.     procedure ItemsChange(Sender: TObject);
  1473.     procedure SetButtonCount(Value: Integer);
  1474.     procedure SetColumns(Value: Integer);
  1475.     procedure SetItemIndex(Value: Integer);
  1476.     procedure SetItems(Value: TStrings);
  1477.     procedure UpdateButtons;
  1478.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  1479.     procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
  1480.     procedure WMSize(var Message: TWMSize); message WM_SIZE;
  1481.   protected
  1482.     procedure SetSkinData(Value: TspSkinData); override;
  1483.     procedure Loaded; override;
  1484.     procedure ReadState(Reader: TReader); override;
  1485.     function CanModify: Boolean; virtual;
  1486.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  1487.     property Columns: Integer read FColumns write SetColumns default 1;
  1488.     property ItemIndex: Integer read FItemIndex write SetItemIndex default -1;
  1489.     property Items: TStrings read FItems write SetItems;
  1490.   public
  1491.     constructor Create(AOwner: TComponent); override;
  1492.     destructor Destroy; override;
  1493.     procedure ChangeSkinData; override;
  1494.     procedure FlipChildren(AllLevels: Boolean); override;
  1495.     property ButtonSkinDataName: String
  1496.       read FButtonSkinDataName write SetButtonSkinDataName;
  1497.   end;
  1498.   TspSkinCustomCheckGroup = class(TspSkinGroupBox)
  1499.   private
  1500.     FItemIndex: Integer;
  1501.     FButtonSkinDataName: String;
  1502.     FButtons: TList;
  1503.     FItems: TStrings;
  1504.     FColumns: Integer;
  1505.     FReading: Boolean;
  1506.     FUpdating: Boolean;
  1507.     FButtonDefaultFont: TFont;
  1508.     procedure SetButtonDefaultFont(Value: TFont);
  1509.     procedure SetButtonSkinDataName(Value: String);
  1510.     procedure ArrangeButtons;
  1511.     procedure ButtonClick(Sender: TObject);
  1512.     procedure ItemsChange(Sender: TObject);
  1513.     procedure SetButtonCount(Value: Integer);
  1514.     procedure SetColumns(Value: Integer);
  1515.     procedure SetItems(Value: TStrings);
  1516.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  1517.     procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
  1518.     procedure WMSize(var Message: TWMSize); message WM_SIZE;
  1519.   protected
  1520.     procedure UpdateButtons;
  1521.     procedure SetSkinData(Value: TspSkinData); override;
  1522.     procedure Loaded; override;
  1523.     procedure ReadState(Reader: TReader); override;
  1524.     function CanModify: Boolean; virtual;
  1525.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  1526.     function GetCheckedStatus(Index: Integer): Boolean;
  1527.     procedure SetCheckedStatus(Index: Integer; Value: Boolean);
  1528.     property Columns: Integer read FColumns write SetColumns default 1;
  1529.     property Items: TStrings read FItems write SetItems;
  1530.   public
  1531.     constructor Create(AOwner: TComponent); override;
  1532.     destructor Destroy; override;
  1533.     procedure ChangeSkinData; override;
  1534.     procedure FlipChildren(AllLevels: Boolean); override;
  1535.     property ButtonDefaultFont: TFont
  1536.       read FButtonDefaultFont write SetButtonDefaultFont;
  1537.     property ButtonSkinDataName: String
  1538.       read FButtonSkinDataName write SetButtonSkinDataName;
  1539.     property Checked[Index: Integer]: Boolean read GetCheckedStatus write SetCheckedStatus;
  1540.     property ItemIndex: Integer read FItemIndex;
  1541.   end;
  1542.   TspSkinCheckGroup = class(TspSkinCustomCheckGroup)
  1543.   published
  1544.     property ButtonSkinDataName;
  1545.     property ButtonDefaultFont;
  1546.     property Align;
  1547.     property Anchors;
  1548.     property BiDiMode;
  1549.     property Caption;
  1550.     property Color;
  1551.     property Columns;
  1552.     property Ctl3D;
  1553.     property DragCursor;
  1554.     property DragKind;
  1555.     property DragMode;
  1556.     property Enabled;
  1557.     property Font;
  1558.     property Items;
  1559.     property ItemIndex;
  1560.     property Constraints;
  1561.     property ParentBiDiMode;
  1562.     property ParentColor;
  1563.     property ParentCtl3D;
  1564.     property ParentFont;
  1565.     property ParentShowHint;
  1566.     property PopupMenu;
  1567.     property ShowHint;
  1568.     property TabOrder;
  1569.     property TabStop;
  1570.     property Visible;
  1571.     property OnClick;
  1572.     property OnContextPopup;
  1573.     property OnDragDrop;
  1574.     property OnDragOver;
  1575.     property OnEndDock;
  1576.     property OnEndDrag;
  1577.     property OnEnter;
  1578.     property OnExit;
  1579.     property OnStartDock;
  1580.     property OnStartDrag;
  1581.   end;
  1582.   TspSkinRadioGroup = class(TspSkinCustomRadioGroup)
  1583.   published
  1584.     property ButtonSkinDataName;
  1585.     property Align;
  1586.     property Anchors;
  1587.     property BiDiMode;
  1588.     property Caption;
  1589.     property Color;
  1590.     property Columns;
  1591.     property Ctl3D;
  1592.     property DragCursor;
  1593.     property DragKind;
  1594.     property DragMode;
  1595.     property Enabled;
  1596.     property Font;
  1597.     property ItemIndex;
  1598.     property Items;
  1599.     property Constraints;
  1600.     property ParentBiDiMode;
  1601.     property ParentColor;
  1602.     property ParentCtl3D;
  1603.     property ParentFont;
  1604.     property ParentShowHint;
  1605.     property PopupMenu;
  1606.     property ShowHint;
  1607.     property TabOrder;
  1608.     property TabStop;
  1609.     property Visible;
  1610.     property OnClick;
  1611.     {$IFDEF VER130}
  1612.     property OnContextPopup;
  1613.     {$ENDIF}
  1614.     {$IFDEF VER140}
  1615.     property OnContextPopup;
  1616.     {$ENDIF}
  1617.     {$IFDEF VER150}
  1618.     property OnContextPopup;
  1619.     {$ENDIF}
  1620.     property OnDragDrop;
  1621.     property OnDragOver;
  1622.     property OnEndDock;
  1623.     property OnEndDrag;
  1624.     property OnEnter;
  1625.     property OnExit;
  1626.     property OnStartDock;
  1627.     property OnStartDrag;
  1628.   end;
  1629.   TspSkinCustomTreeView = class(TCustomTreeView)
  1630.   protected
  1631.     FInCheckScrollBars: Boolean;
  1632.     FSD: TspSkinData;
  1633.     FSkinDataName: String;
  1634.     FIndex: Integer;
  1635.     FDefaultFont: TFont;
  1636.     FDefaultColor: TColor;
  1637.     FVScrollBar: TspSkinScrollBar;
  1638.     FHScrollBar: TspSkinScrollBar;
  1639.     procedure Notification(AComponent: TComponent;
  1640.      Operation: TOperation); override;
  1641.     procedure SetDefaultColor(Value: TColor);
  1642.     procedure SetDefaultFont(Value: TFont);
  1643.     procedure SetSkinData(Value: TspSkinData);
  1644.     procedure SetVScrollBar(Value: TspSkinScrollBar);
  1645.     procedure SetHScrollBar(Value: TspSkinScrollBar);
  1646.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  1647.     procedure WMNCPAINT(var Message: TWMNCPAINT); message WM_NCPAINT;
  1648.     procedure WndProc(var Message: TMessage); override;
  1649.     procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
  1650.     procedure OnVScrollBarChange(Sender: TObject);
  1651.     procedure OnHScrollBarChange(Sender: TObject);
  1652.     procedure CreateParams(var Params: TCreateParams); override;
  1653.     procedure Change(Node: TTreeNode); override;
  1654.     procedure Loaded; override;
  1655.   public
  1656.     constructor Create(AOwner: TComponent); override;
  1657.     destructor Destroy; override;
  1658.     procedure ChangeSkinData;
  1659.     procedure UpDateScrollBars;
  1660.     property HScrollBar: TspSkinScrollBar read FHScrollBar
  1661.                                           write SetHScrollBar;
  1662.     property VScrollBar: TspSkinScrollBar read FVScrollBar
  1663.                                           write SetVScrollBar;
  1664.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  1665.     property SkinData: TspSkinData read FSD write SetSkinData;
  1666.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  1667.     property DefaultColor: TColor read FDefaultColor write SetDefaultColor;
  1668.   end;
  1669.   TspSkinTreeView = class(TspSkinCustomTreeView)
  1670.   published
  1671.     property Items;
  1672.     property HScrollBar;
  1673.     property VScrollBar;
  1674.     property DefaultFont;
  1675.     property SkinData;
  1676.     property SkinDataName;
  1677.     property DefaultColor;
  1678.     property Align;
  1679.     property Anchors;
  1680.     property AutoExpand;
  1681.     property BiDiMode;
  1682.     property ChangeDelay;
  1683.     property Color;
  1684.     property Constraints;
  1685.     property DragKind;
  1686.     property DragCursor;
  1687.     property DragMode;
  1688.     property Enabled;
  1689.     property Font;
  1690.     property HideSelection;
  1691.     property HotTrack;
  1692.     property Images;
  1693.     property Indent;
  1694.     {$IFDEF VER140}
  1695.     property MultiSelect;
  1696.     property MultiSelectStyle;
  1697.     {$ENDIF}
  1698.    {$IFDEF VER150}
  1699.     property MultiSelect;
  1700.     property MultiSelectStyle;
  1701.     {$ENDIF}
  1702.     property ParentBiDiMode;
  1703.     property ParentColor default False;
  1704.     property ParentCtl3D;
  1705.     property ParentFont;
  1706.     property ParentShowHint;
  1707.     property PopupMenu;
  1708.     property ReadOnly;
  1709.     property RightClickSelect;
  1710.     property RowSelect;
  1711.     property ShowButtons;
  1712.     property ShowHint;
  1713.     property ShowLines;
  1714.     property ShowRoot;
  1715.     property SortType;
  1716.     property StateImages;
  1717.     property TabOrder;
  1718.     property TabStop default True;
  1719.     property ToolTips;
  1720.     property Visible;
  1721.     {$IFDEF VER140}
  1722.     property OnAddition;
  1723.     {$ENDIF}
  1724.     {$IFDEF VER150}
  1725.     property OnAddition;
  1726.     {$ENDIF}
  1727.     property OnAdvancedCustomDraw;
  1728.     property OnAdvancedCustomDrawItem;
  1729.     property OnChange;
  1730.     property OnChanging;
  1731.     property OnClick;
  1732.     property OnCollapsed;
  1733.     property OnCollapsing;
  1734.     property OnCompare;
  1735.     property OnContextPopup;
  1736.     {$IFDEF VER140}
  1737.     property OnCreateNodeClass;
  1738.     {$ENDIF}
  1739.     {$IFDEF VER150}
  1740.     property OnCreateNodeClass;
  1741.     {$ENDIF}
  1742.     property OnCustomDraw;
  1743.     property OnCustomDrawItem;
  1744.     property OnDblClick;
  1745.     property OnDeletion;
  1746.     property OnDragDrop;
  1747.     property OnDragOver;
  1748.     property OnEdited;
  1749.     property OnEditing;
  1750.     property OnEndDock;
  1751.     property OnEndDrag;
  1752.     property OnEnter;
  1753.     property OnExit;
  1754.     property OnExpanding;
  1755.     property OnExpanded;
  1756.     property OnGetImageIndex;
  1757.     property OnGetSelectedIndex;
  1758.     property OnKeyDown;
  1759.     property OnKeyPress;
  1760.     property OnKeyUp;
  1761.     property OnMouseDown;
  1762.     property OnMouseMove;
  1763.     property OnMouseUp;
  1764.     property OnStartDock;
  1765.     property OnStartDrag;
  1766.   end;
  1767.   TspSkinCustomListView = class(TCustomListView)
  1768.   protected
  1769.     FHeaderSkinDataName: String;
  1770.     FInCheckScrollBars: Boolean;
  1771.     FromSB: Boolean;
  1772.     FSD: TspSkinData;
  1773.     FSkinDataName: String;
  1774.     FIndex: Integer;
  1775.     FDefaultFont: TFont;
  1776.     FDefaultColor: TColor;
  1777.     //
  1778.     FVScrollBar: TspSkinScrollBar;
  1779.     FHScrollBar: TspSkinScrollBar;
  1780.     FOldVScrollBarPos: Integer;
  1781.     FOldHScrollBarPos: Integer;
  1782.     //
  1783.     FHeaderHandle: HWND;
  1784.     FHeaderInstance: Pointer;
  1785.     FDefHeaderProc: Pointer;
  1786.     FActiveSection: Integer;
  1787.     FHeaderDown: Boolean;
  1788.     FHeaderInDivider: Boolean;
  1789.     //
  1790.     FHIndex: Integer;
  1791.     HLTPt, HRTPt, HLBPt, HRBPt: TPoint;
  1792.     HSkinRect, HClRect: TRect;
  1793.     HNewLTPoint, HNewRTPoint, HNewLBPoint, HNewRBPoint: TPoint;
  1794.     HNewClRect: TRect;
  1795.     HPicture: TBitMap;
  1796.     HFontColor, HActiveFontColor, HDownFontColor: TColor;
  1797.     HActiveSkinRect, HDownSkinRect: TRect;
  1798.     //
  1799.     procedure HGetSkinData; 
  1800.     function GetHeaderSectionRect(Index: Integer): TRect;
  1801.     procedure Notification(AComponent: TComponent;
  1802.      Operation: TOperation); override;
  1803.     procedure SetDefaultColor(Value: TColor);
  1804.     procedure SetDefaultFont(Value: TFont);
  1805.     procedure SetSkinData(Value: TspSkinData);
  1806.     procedure UpDateScrollBars1;
  1807.     procedure UpDateScrollBars2;
  1808.     procedure UpDateScrollBars3;
  1809.     procedure SetVScrollBar(Value: TspSkinScrollBar);
  1810.     procedure SetHScrollBar(Value: TspSkinScrollBar);
  1811.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  1812.     procedure WMNCPAINT(var Message: TWMNCPAINT); message WM_NCPAINT;
  1813.     procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
  1814.     procedure WndProc(var Message: TMessage); override;
  1815.     procedure OnVScrollBarChange(Sender: TObject);
  1816.     procedure OnHScrollBarChange(Sender: TObject);
  1817.     procedure CreateParams(var Params: TCreateParams); override;
  1818.     procedure Loaded; override;
  1819.     //
  1820.     procedure HeaderWndProc(var Message: TMessage);
  1821.     procedure DrawHeaderSection(Cnvs: TCanvas; Column: TListColumn;
  1822.       Active, Pressed: Boolean; R: TRect);
  1823.     procedure PaintHeader(DC: HDC);
  1824.     procedure CreateWnd; override;
  1825.     //
  1826.   public
  1827.     constructor Create(AOwner: TComponent); override;
  1828.     destructor Destroy; override;
  1829.     procedure UpDateScrollBars;
  1830.     procedure ChangeSkinData;
  1831.     property HScrollBar: TspSkinScrollBar read FHScrollBar
  1832.                                           write SetHScrollBar;
  1833.     property VScrollBar: TspSkinScrollBar read FVScrollBar
  1834.                                           write SetVScrollBar;
  1835.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  1836.     property SkinData: TspSkinData read FSD write SetSkinData;
  1837.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  1838.     property DefaultColor: TColor read FDefaultColor write SetDefaultColor;
  1839.     property HeaderSkinDataName: String
  1840.       read FHeaderSkinDataName write FHeaderSkinDataName;
  1841.   end;
  1842.   TspSkinListView = class(TspSkinCustomListView)
  1843.   published
  1844.     property Action;
  1845.     property Align;
  1846.     property AllocBy;
  1847.     property Anchors;
  1848.     property BiDiMode;
  1849.     property Checkboxes;
  1850.     property Color;
  1851.     property Columns;
  1852.     property ColumnClick;
  1853.     property Constraints;
  1854.     property DragCursor;
  1855.     property DragKind;
  1856.     property DragMode;
  1857.     property Enabled;
  1858.     property Font;
  1859.     property FullDrag;
  1860.     property GridLines;
  1861.     property HideSelection;
  1862.     property HotTrack;
  1863.     property HotTrackStyles;
  1864.     property HoverTime;
  1865.     property IconOptions;
  1866.     property Items;
  1867.     property LargeImages;
  1868.     property MultiSelect;
  1869.     property OwnerData;
  1870.     property OwnerDraw;
  1871.     property ReadOnly default False;
  1872.     property RowSelect;
  1873.     property ParentBiDiMode;
  1874.     property ParentColor default False;
  1875.     property ParentFont;
  1876.     property ParentShowHint;
  1877.     property PopupMenu;
  1878.     property ShowColumnHeaders;
  1879.     property ShowWorkAreas;
  1880.     property ShowHint;
  1881.     property SmallImages;
  1882.     property SortType;
  1883.     property StateImages;
  1884.     property TabOrder;
  1885.     property TabStop default True;
  1886.     property ViewStyle;
  1887.     property Visible;
  1888.     property HeaderSkinDataName;
  1889.     property HScrollBar;
  1890.     property VScrollBar;
  1891.     property DefaultFont;
  1892.     property SkinData;
  1893.     property SkinDataName;
  1894.     property DefaultColor;
  1895.     property OnAdvancedCustomDraw;
  1896.     property OnAdvancedCustomDrawItem;
  1897.     property OnAdvancedCustomDrawSubItem;
  1898.     property OnChange;
  1899.     property OnChanging;
  1900.     property OnClick;
  1901.     property OnColumnClick;
  1902.     property OnColumnDragged;
  1903.     property OnColumnRightClick;
  1904.     property OnCompare;
  1905.     property OnContextPopup;
  1906.     property OnCustomDraw;
  1907.     property OnCustomDrawItem;
  1908.     property OnCustomDrawSubItem;
  1909.     property OnData;
  1910.     property OnDataFind;
  1911.     property OnDataHint;
  1912.     property OnDataStateChange;
  1913.     property OnDblClick;
  1914.     property OnDeletion;
  1915.     property OnDrawItem;
  1916.     property OnEdited;
  1917.     property OnEditing;
  1918.     property OnEndDock;
  1919.     property OnEndDrag;
  1920.     property OnEnter;
  1921.     property OnExit;
  1922.     property OnGetImageIndex;
  1923.     property OnGetSubItemImage;
  1924.     property OnDragDrop;
  1925.     property OnDragOver;
  1926.     property OnInfoTip;
  1927.     property OnInsert;
  1928.     property OnKeyDown;
  1929.     property OnKeyPress;
  1930.     property OnKeyUp;
  1931.     property OnMouseDown;
  1932.     property OnMouseMove;
  1933.     property OnMouseUp;
  1934.     property OnResize;
  1935.     property OnSelectItem;
  1936.     property OnStartDock;
  1937.     property OnStartDrag;
  1938.   end;
  1939.   TspStatusPanelNumGlyphs = 1..2;
  1940.   TspSkinStatusPanel = class(TspSkinLabel)
  1941.   private
  1942.     FGlyph: TBitMap;
  1943.     FNumGlyphs: TspStatusPanelNumGlyphs;
  1944.     procedure SetNumGlyphs(Value: TspStatusPanelNumGlyphs);
  1945.     procedure SetGlyph(Value: TBitMap);
  1946.   protected
  1947.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  1948.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1949.     procedure CreateControlSkinImage(B: TBitMap); override;
  1950.   public
  1951.     constructor Create(AOwner: TComponent); override;
  1952.     destructor Destroy; override;
  1953.   published
  1954.     property Glyph: TBitMap read FGlyph write SetGlyph;
  1955.     property NumGlyphs: TspStatusPanelNumGlyphs read FNumGlyphs write SetNumGlyphs;
  1956.   end;
  1957.   TspSkinRichEdit = class(TCustomRichEdit)
  1958.   protected
  1959.     FSkinSupport: Boolean;
  1960.     FSD: TspSkinData;
  1961.     FSkinDataName: String;
  1962.     FIndex: Integer;
  1963.     FDefaultFont: TFont;
  1964.     FDefaultColor: TColor;
  1965.     //
  1966.     FVScrollBar: TspSkinScrollBar;
  1967.     FHScrollBar: TspSkinScrollBar;
  1968.     FOldVScrollBarPos: Integer;
  1969.     FOldHScrollBarPos: Integer;
  1970.     procedure Notification(AComponent: TComponent;
  1971.      Operation: TOperation); override;
  1972.     procedure SetDefaultColor(Value: TColor);
  1973.     procedure SetDefaultFont(Value: TFont);
  1974.     procedure SetSkinData(Value: TspSkinData);
  1975.     procedure SetVScrollBar(Value: TspSkinScrollBar);
  1976.     procedure SetHScrollBar(Value: TspSkinScrollBar);
  1977.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  1978.     procedure WMNCPAINT(var Message: TWMNCPAINT); message WM_NCPAINT;
  1979.     procedure WndProc(var Message: TMessage); override;
  1980.     procedure OnVScrollBarChange(Sender: TObject);
  1981.     procedure OnHScrollBarChange(Sender: TObject);
  1982.     procedure Loaded; override;
  1983.     procedure CreateParams(var Params: TCreateParams); override;
  1984.     procedure OnVScrollBarUpButtonClick(Sender: TObject);
  1985.     procedure OnVScrollBarDownButtonClick(Sender: TObject);
  1986.     procedure Change; override;
  1987.   public
  1988.     constructor Create(AOwner: TComponent); override;
  1989.     destructor Destroy; override;
  1990.     procedure UpDateScrollBars;
  1991.     procedure ChangeSkinData;
  1992.   published
  1993.     property Align;
  1994.     property Alignment;
  1995.     property Anchors;
  1996.     property BiDiMode;
  1997.     property Color;
  1998.     property DragCursor;
  1999.     property DragKind;
  2000.     property DragMode;
  2001.     property Enabled;
  2002.     property Font;
  2003.     property HideSelection;
  2004.     property ImeMode;
  2005.     property ImeName;
  2006.     property Constraints;
  2007.     property Lines;
  2008.     property MaxLength;
  2009.     property ParentBiDiMode;
  2010.     property ParentFont;
  2011.     property ParentShowHint;
  2012.     property PlainText;
  2013.     property PopupMenu;
  2014.     property ReadOnly;
  2015.     property ShowHint;
  2016.     property TabOrder;
  2017.     property TabStop default True;
  2018.     property Visible;
  2019.     property WantTabs;
  2020.     property WantReturns;
  2021.     property WordWrap;
  2022.     property SkinSupport: Boolean read FSkinSupport write FSkinSupport;
  2023.     property HScrollBar: TspSkinScrollBar read FHScrollBar
  2024.                                           write SetHScrollBar;
  2025.     property VScrollBar: TspSkinScrollBar read FVScrollBar
  2026.                                           write SetVScrollBar;
  2027.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  2028.     property SkinData: TspSkinData read FSD write SetSkinData;
  2029.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  2030.     property DefaultColor: TColor read FDefaultColor write SetDefaultColor;
  2031.     property OnChange;
  2032.     property OnDragDrop;
  2033.     property OnDragOver;
  2034.     property OnEndDock;
  2035.     property OnEndDrag;
  2036.     property OnEnter;
  2037.     property OnExit;
  2038.     property OnKeyDown;
  2039.     property OnKeyPress;
  2040.     property OnKeyUp;
  2041.     property OnMouseDown;
  2042.     property OnMouseMove;
  2043.     property OnMouseUp;
  2044.     property OnMouseWheel;
  2045.     property OnMouseWheelDown;
  2046.     property OnMouseWheelUp;
  2047.     property OnProtectChange;
  2048.     property OnResizeRequest;
  2049.     property OnSaveClipboard;
  2050.     property OnSelectionChange;
  2051.     property OnStartDock;
  2052.     property OnStartDrag;
  2053.   end;
  2054.   TspGraphicSkinControl = class(TGraphicControl)
  2055.   protected
  2056.     FSD: TspSkinData;
  2057.     FAreaName: String;
  2058.     FSkinDataName: String;
  2059.     FDrawDefault: Boolean;
  2060.     CursorIndex: Integer;
  2061.     FOnMouseEnter, FOnMouseLeave: TNotifyEvent;
  2062.     FAlphaBlend: Boolean;
  2063.     FAlphaBlendValue: Byte;
  2064.     FUseSkinCursor: Boolean;
  2065.     procedure SetAlphaBlend(AValue: Boolean); virtual;
  2066.     procedure SetAlphaBlendValue(AValue: Byte); virtual;
  2067.     procedure Paint; override;
  2068.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  2069.     procedure GetSkinData; virtual;
  2070.     procedure WMMOVE(var Msg: TWMMOVE); message WM_MOVE;
  2071.     procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
  2072.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  2073.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  2074.     procedure SetSkinData(Value: TspSkinData); virtual;
  2075.     procedure CreateControlDefaultImage(B: TBitMap); virtual;
  2076.     procedure CreateControlSkinImage(B: TBitMap); virtual;
  2077.   public
  2078.     FIndex: Integer;
  2079.     procedure ChangeSkinData; virtual;
  2080.     procedure BeforeChangeSkinData; virtual;
  2081.     destructor Destroy; override;
  2082.     constructor Create(AOwner: TComponent); override;
  2083.   published
  2084.     property Anchors;
  2085.     property Visible;
  2086.     property DrawDefault: Boolean
  2087.       read FDrawDefault write FDrawDefault;
  2088.     property SkinData: TspSkinData read FSD write SetSkinData;
  2089.     property AreaName: String read FAreaName write FAreaName;
  2090.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  2091.     property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
  2092.     property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  2093.     property AlphaBlend: Boolean read FAlphaBlend write SetAlphaBlend;
  2094.     property AlphaBlendValue: Byte
  2095.       read FAlphaBlendValue write SetAlphaBlendValue;
  2096.     property UseSkinCursor: Boolean read FUseSkinCursor write FUseSkinCursor;
  2097.   end;
  2098.   TspGraphicSkinCustomControl = class(TspGraphicSkinControl)
  2099.   protected
  2100.     FDefaultWidth: Integer;
  2101.     FDefaultHeight: Integer;
  2102.     FDefaultFont: TFont;
  2103.     FUseSkinFont: Boolean;
  2104.     LTPt, RTPt, LBPt, RBPt: TPoint;
  2105.     SkinRect, ClRect: TRect;
  2106.     NewLTPoint, NewRTPoint, NewLBPoint, NewRBPoint: TPoint;
  2107.     NewClRect: TRect;
  2108.     Picture: TBitMap;
  2109.     ResizeMode: Integer;
  2110.     procedure OnDefaultFontChange(Sender: TObject);
  2111.     procedure SetDefaultWidth(Value: Integer);
  2112.     procedure SetDefaultHeight(Value: Integer);
  2113.     procedure SetDefaultFont(Value: TFont);
  2114.     procedure DefaultFontChange; virtual;
  2115.     function GetNewRect(R: TRect): TRect;
  2116.     function GetResizeMode: Integer;
  2117.     procedure CalcSize(var W, H: Integer); virtual;
  2118.     procedure CreateSkinControlImage(B, SB: TBitMap; R: TRect);
  2119.     procedure GetSkinData; override;
  2120.     procedure CreateControlDefaultImage(B: TBitMap); override;
  2121.     procedure CreateControlSkinImage(B: TBitMap); override;
  2122.   public
  2123.     constructor Create(AOwner: TComponent); override;
  2124.     destructor Destroy; override;
  2125.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  2126.     procedure ChangeSkinData; override;
  2127.   published
  2128.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  2129.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  2130.     property DefaultWidth: Integer read FDefaultWidth write SetDefaultWidth;
  2131.     property DefaultHeight: Integer read FDefaultHeight write SetDefaultHeight;
  2132.   end;
  2133.   TspSkinSpeedButton = class(TspGraphicSkinCustomControl)
  2134.   protected
  2135.     RepeatTimer: TTimer;
  2136.     FRepeatMode: Boolean;
  2137.     FRepeatInterval: Integer;
  2138.     FFlat: Boolean;
  2139.     FAllowAllUp: Boolean;
  2140.     FAllowAllUpCheck: Boolean;
  2141.     FClicksDisabled: Boolean;
  2142.     FMorphKf: Double;
  2143.     FDown: Boolean;
  2144.     FMouseIn, FMouseDown: Boolean;
  2145.     FGroupIndex: Integer;
  2146.     FGlyph: TBitMap;
  2147.     FNumGlyphs: TspNumGlyphs;
  2148.     FOnClick: TNotifyEvent;
  2149.     FMargin: Integer;
  2150.     FSpacing: Integer;
  2151.     FLayout: TspButtonLayout;
  2152.     MorphTimer: TTimer;
  2153.     procedure RepeatTimerProc(Sender: TObject);
  2154.     procedure StartRepeat;
  2155.     procedure StopRepeat;
  2156.     procedure SetFlat(Value: Boolean);
  2157.     procedure StartMorph;
  2158.     procedure StopMorph;
  2159.     procedure DoMorph(Sender: TObject);
  2160.     procedure CreateButtonImage(B: TBitMap; R: TRect;
  2161.       ADown, AMouseIn: Boolean); virtual;
  2162.     procedure SetLayout(Value : TspButtonLayout);
  2163.     procedure SetGroupIndex(Value: Integer);
  2164.     procedure SetDown(Value: Boolean);
  2165.     procedure SetMargin(Value: Integer);
  2166.     procedure SetSpacing(Value: Integer);
  2167.     procedure DoAllUp;
  2168.     procedure SetNumGlyphs(Value: TspNumGlyphs);
  2169.     procedure SetGlyph(Value: TBitMap);
  2170.     procedure GetSkinData; override;
  2171.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  2172.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  2173.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  2174.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  2175.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  2176.       X, Y: Integer); override;
  2177.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  2178.       X, Y: Integer); override;
  2179.     procedure ReDrawControl;
  2180.     procedure CreateControlDefaultImage(B: TBitMap); override;
  2181.     procedure CreateControlSkinImage(B: TBitMap); override;
  2182.     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  2183.     procedure ButtonClick; virtual;
  2184.   public
  2185.     FontName: String;
  2186.     FontStyle: TFontStyles;
  2187.     FontHeight: Integer;
  2188.     FontColor, ActiveFontColor, DownFontColor, DisabledFontColor: TColor;
  2189.     ActiveSkinRect, DownSkinRect, DisabledSkinRect: TRect;
  2190.     Morphing: Boolean;
  2191.     MorphKind: TMorphKind;
  2192.     constructor Create(AOwner: TComponent); override;
  2193.     destructor Destroy; override;
  2194.     procedure ChangeSkinData; override;
  2195.     procedure Paint; override;
  2196.   published
  2197.     property RepeatMode: Boolean read FRepeatMode write FRepeatMode;
  2198.     property RepeatInterval: Integer
  2199.       read  FRepeatInterval write FRepeatInterval;
  2200.     property Flat: Boolean read FFlat write SetFlat;
  2201.     property AllowAllUp: Boolean read FAllowAllUp write FAllowAllUp;
  2202.     property PopupMenu;
  2203.     property ShowHint;
  2204.     property Action;
  2205.     property Down: Boolean read FDown write SetDown;
  2206.     property GroupIndex: Integer read FGroupIndex write SetGroupIndex;
  2207.     property Caption;
  2208.     property Glyph: TBitMap read FGlyph write SetGlyph;
  2209.     property NumGlyhps: TspNumGlyphs read FNumGlyphs write SetNumGlyphs;
  2210.     property Align;
  2211.     property Margin: Integer read FMargin write SetMargin default -1;
  2212.     property Spacing: Integer read FSpacing write SetSpacing default 4;
  2213.     property Layout: TspButtonLayout read FLayout write SetLayout default blGlyphLeft;
  2214.     property Enabled;
  2215.     property OnClick: TNotifyEvent read FOnClick write FOnClick;
  2216.     property OnMouseDown;
  2217.     property OnMouseMove;
  2218.     property OnMouseUp;
  2219.     property OnResize;
  2220.   end;
  2221.   TspSkinMenuSpeedButton = class(TspSkinSpeedButton)
  2222.   protected
  2223.     FOnShowTrackMenu: TNotifyEvent;
  2224.     FOnHideTrackMenu: TNotifyEvent;
  2225.     FTrackButtonMode: Boolean;
  2226.     FMenuTracked: Boolean;
  2227.     FSkinPopupMenu: TspSkinPopupMenu;
  2228.     procedure CreateButtonImage(B: TBitMap; R: TRect;
  2229.       ADown, AMouseIn: Boolean); override;
  2230.     function CanMenuTrack(X, Y: Integer): Boolean;
  2231.     procedure TrackMenu;
  2232.     procedure SetTrackButtonMode(Value: Boolean);
  2233.     procedure GetSkinData; override;
  2234.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  2235.       X, Y: Integer); override;
  2236.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  2237.       X, Y: Integer); override;
  2238.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  2239.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  2240.     procedure Notification(AComponent: TComponent;
  2241.       Operation: TOperation); override;
  2242.     procedure WMCLOSESKINMENU(var Message: TMessage); message WM_CLOSESKINMENU;
  2243.     function GetNewTrackButtonRect: TRect;
  2244.     procedure CreateControlDefaultImage(B: TBitMap); override;
  2245.   public
  2246.     TrackButtonRect: TRect;
  2247.     constructor Create(AOwner: TComponent); override;
  2248.     destructor Destroy; override;
  2249.     procedure Paint; override;
  2250.   published
  2251.     property SkinPopupMenu: TspSkinPopupMenu read FSkinPopupMenu
  2252.                                              write FSkinPopupMenu;
  2253.     property TrackButtonMode: Boolean read FTrackButtonMode
  2254.                                       write SetTrackButtonMode;
  2255.     property OnShowTrackMenu: TNotifyEvent read FOnShowTrackMenu
  2256.                                            write FOnShowTrackMenu;
  2257.     property OnHideTrackMenu: TNotifyEvent read FOnHideTrackMenu
  2258.                                            write FOnHideTrackMenu;
  2259.   end;
  2260.   TspCustomDrawSkinSectionEvent = procedure(HeaderControl: THeaderControl;
  2261.     Section: THeaderSection; const Rect: TRect; Active, Pressed: Boolean;
  2262.     Cnvs: TCanvas) of object;
  2263.   TspSkinHeaderControl = class(THeaderControl)
  2264.   protected
  2265.     //
  2266.     FSD: TspSkinData;
  2267.     FSkinDataName: String;
  2268.     FIndex: Integer;
  2269.     FDefaultFont: TFont;
  2270.     FUseSkinFont: Boolean;
  2271.     FDefaultHeight: Integer;
  2272.     //
  2273.     InDivider: Boolean;
  2274.     FDown: Boolean;
  2275.     FInTracking: Boolean;
  2276.     FActiveSection, FOldActiveSection: Integer;
  2277.     FOnSkinSectionClick: TSectionNotifyEvent;
  2278.     FOnDrawSkinSection: TspCustomDrawSkinSectionEvent;
  2279.     procedure SetDefaultHeight(Value: Integer);
  2280.     function GetSkinItemRect(Index: Integer): TRect;
  2281.     procedure PaintWindow(DC: HDC); override;
  2282.     procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
  2283.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  2284.     function DrawSkinSection(Cnvs: TCanvas; Index: Integer; Active, Pressed: Boolean): TRect;
  2285.     procedure DrawSkinSectionR(Cnvs: TCanvas; Section: THeaderSection; Active, Pressed: Boolean; R: TRect);
  2286.      procedure CreateParams(var Params: TCreateParams); override;
  2287.     procedure TestActive(X, Y: Integer);
  2288.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  2289.       X, Y: Integer); override;
  2290.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  2291.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  2292.                         X, Y: Integer); override;
  2293.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  2294.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  2295.     procedure WndProc(var Message:TMessage); override;
  2296.     procedure CreateWnd; override;
  2297.     procedure DrawSection(Section: THeaderSection; const Rect: TRect;
  2298.       Pressed: Boolean); override;
  2299.     procedure SetDefaultFont(Value: TFont);
  2300.     procedure SetSkinData(Value: TspSkinData);
  2301.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  2302.   public
  2303.     LTPt, RTPt, LBPt, RBPt: TPoint;
  2304.     SkinRect, ClRect: TRect;
  2305.     NewLTPoint, NewRTPoint, NewLBPoint, NewRBPoint: TPoint;
  2306.     NewClRect: TRect;
  2307.     Picture: TBitMap;
  2308.     FontName: String;
  2309.     FontStyle: TFontStyles;
  2310.     FontHeight: Integer;
  2311.     FontColor, ActiveFontColor, DownFontColor: TColor;
  2312.     ActiveSkinRect, DownSkinRect: TRect;
  2313.     //
  2314.     constructor Create(AOwner: TComponent); override;
  2315.     destructor Destroy; override;
  2316.     procedure GetSkinData;
  2317.     procedure ChangeSkinData;
  2318.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; 
  2319.   published
  2320.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  2321.     property DefaultHeight: Integer read FDefaultHeight write SetDefaultHeight;
  2322.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  2323.     property SkinData: TspSkinData read FSD write SetSkinData;
  2324.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  2325.     property OnSkinSectionClick: TSectionNotifyEvent
  2326.       read FOnSkinSectionClick write FOnSkinSectionClick;
  2327.     property OnDrawSkinSection: TspCustomDrawSkinSectionEvent
  2328.       read FOnDrawSkinSection write FOnDrawSkinSection;
  2329.   end;
  2330.   TspNumThumbStates = 1..2;
  2331.   TspSliderOrientation = (soHorizontal, soVertical);
  2332.   TspSliderOption = (soShowFocus, soShowPoints, soSmooth,
  2333.                      soRulerOpaque, soThumbOpaque);
  2334.   TspSliderOptions = set of TspSliderOption;
  2335.   TspSliderImage = (siHThumb, siHRuler, siVThumb, siVRuler);
  2336.   TspSliderImages = set of TspSliderImage;
  2337.   TspSliderImageArray = array[TspSliderImage] of TBitmap;
  2338.   TspJumpMode = (jmNone, jmHome, jmEnd, jmNext, jmPrior);
  2339.   TspSkinCustomSlider = class(TspSkinControl)
  2340.   private
  2341.     FUseSkinThumb: Boolean;
  2342.     FTransparent: Boolean;
  2343.     FUserImages: TspSliderImages;
  2344.     FImages: TspSliderImageArray;
  2345.     FEdgeSize: Integer;
  2346.     FRuler: TBitmap;
  2347.     FPaintBuffered: Boolean;
  2348.     FRulerOrg: TPoint;
  2349.     FThumbRect: TRect;
  2350.     FThumbDown: Boolean;
  2351.     FNumThumbStates: TspNumThumbStates;
  2352.     FPointsRect: TRect;
  2353.     FOrientation: TspSliderOrientation;
  2354.     FOptions: TspSliderOptions;
  2355.     FBevelWidth: Integer;
  2356.     FMinValue: Longint;
  2357.     FMaxValue: Longint;
  2358.     FIncrement: Longint;
  2359.     FValue: Longint;
  2360.     FHit: Integer;
  2361.     FFocused: Boolean;
  2362.     FSliding: Boolean;
  2363.     FTracking: Boolean;
  2364.     FTimerActive: Boolean;
  2365.     FMousePos: TPoint;
  2366.     FStartJump: TspJumpMode;
  2367.     FReadOnly: Boolean;
  2368.     FOnChange: TNotifyEvent;
  2369.     FOnChanged: TNotifyEvent;
  2370.     FOnDrawPoints: TNotifyEvent;
  2371.     procedure SetTransparent(Value: Boolean);
  2372.     function GetImage(Index: Integer): TBitmap;
  2373.     procedure SetImage(Index: Integer; Value: TBitmap);
  2374.     procedure SliderImageChanged(Sender: TObject);
  2375.     procedure SetEdgeSize(Value: Integer);
  2376.     function GetNumThumbStates: TspNumThumbStates;
  2377.     procedure SetNumThumbStates(Value: TspNumThumbStates);
  2378.     procedure SetOrientation(Value: TspSliderOrientation);
  2379.     procedure SetOptions(Value: TspSliderOptions);
  2380.     procedure SetMinValue(Value: Longint);
  2381.     procedure SetMaxValue(Value: Longint);
  2382.     procedure SetIncrement(Value: Longint);
  2383.     procedure SetReadOnly(Value: Boolean);
  2384.     function GetThumbOffset: Integer;
  2385.     procedure SetThumbOffset(Value: Integer);
  2386.     procedure SetValue(Value: Longint);
  2387.     procedure ThumbJump(Jump: TspJumpMode);
  2388.     function GetThumbPosition(var Offset: Integer): TPoint;
  2389.     function JumpTo(X, Y: Integer): TspJumpMode;
  2390.     procedure InvalidateThumb;
  2391.     procedure StopTracking;
  2392.     procedure TimerTrack;
  2393.     function StoreImage(Index: Integer): Boolean;
  2394.     procedure CreateElements;
  2395.     procedure BuildRuler(R: TRect);
  2396.     procedure BuildSkinRuler(R: TRect);
  2397.     procedure AdjustElements;
  2398.     procedure ReadUserImages(Stream: TStream);
  2399.     procedure WriteUserImages(Stream: TStream);
  2400.     procedure InternalDrawPoints(ACanvas: TCanvas; PointsStep, PointsHeight,
  2401.       ExtremePointsHeight: Longint);
  2402.     procedure DrawThumb(Canvas: TCanvas; Origin: TPoint; Highlight: Boolean);
  2403.     procedure DrawSkinThumb(Canvas: TCanvas; Origin: TPoint; Highlight: Boolean);
  2404.     function GetValueByOffset(Offset: Integer): Longint;
  2405.     function GetOffsetByValue(Value: Longint): Integer;
  2406.     function GetRulerLength: Integer;
  2407.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  2408.     procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED;
  2409.     procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
  2410.     procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  2411.     procedure WMSize(var Message: TWMSize); message WM_SIZE;
  2412.     procedure WMTimer(var Message: TMessage); message WM_TIMER;
  2413.     procedure WMMOVE(var Msg: TWMMOVE); message WM_MOVE;
  2414.   protected
  2415.     procedure AlignControls(AControl: TControl; var Rect: TRect); override;
  2416.     procedure DefineProperties(Filer: TFiler); override;
  2417.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  2418.     procedure Loaded; override;
  2419.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  2420.       X, Y: Integer); override;
  2421.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  2422.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  2423.       X, Y: Integer); override;
  2424.     procedure Paint; override;
  2425.     function CanModify: Boolean; virtual;
  2426.     function GetSliderRect: TRect; virtual;
  2427.     function GetSliderValue: Longint; virtual;
  2428.     procedure Change; dynamic;
  2429.     procedure Changed; dynamic;
  2430.     procedure Sized; virtual;
  2431.     procedure RangeChanged; virtual;
  2432.     procedure SetRange(Min, Max: Longint);
  2433.     procedure ThumbMouseDown(Button: TMouseButton; Shift: TShiftState;
  2434.       X, Y: Integer); virtual;
  2435.     procedure ThumbMouseMove(Shift: TShiftState; X, Y: Integer); virtual;
  2436.     procedure ThumbMouseUp(Button: TMouseButton; Shift: TShiftState;
  2437.       X, Y: Integer); virtual;
  2438.     property ThumbOffset: Integer read GetThumbOffset write SetThumbOffset;
  2439.     property SliderRect: TRect read GetSliderRect;
  2440.     property ImageHThumb: TBitmap index Ord(siHThumb) read GetImage
  2441.       write SetImage stored StoreImage;
  2442.     property ImageHRuler: TBitmap index Ord(siHRuler) read GetImage
  2443.       write SetImage  stored StoreImage;
  2444.     property ImageVThumb: TBitmap index Ord(siVThumb) read GetImage
  2445.       write SetImage stored StoreImage;
  2446.     property ImageVRuler: TBitmap index Ord(siVRuler) read GetImage
  2447.       write SetImage stored StoreImage;
  2448.     property NumThumbStates: TspNumThumbStates read GetNumThumbStates
  2449.       write SetNumThumbStates default 2;
  2450.     property Orientation: TspSliderOrientation read FOrientation
  2451.       write SetOrientation default soHorizontal;
  2452.     property EdgeSize: Integer read FEdgeSize write SetEdgeSize default 2;
  2453.     property Options: TspSliderOptions read FOptions write SetOptions
  2454.       default [soShowFocus, soShowPoints, soSmooth];
  2455.     property ReadOnly: Boolean read FReadOnly write SetReadOnly default False;
  2456.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  2457.     property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
  2458.     property OnDrawPoints: TNotifyEvent read FOnDrawPoints write FOnDrawPoints;
  2459.     procedure GetSkinData; override;
  2460.   public
  2461.     HRulerRect: TRect;
  2462.     HThumbRect: TRect;
  2463.     VRulerRect: TRect;
  2464.     VThumbRect: TRect;
  2465.     SkinEdgeSize: Integer;
  2466.     BGColor: TColor;
  2467.     PointsColor: TColor;
  2468.     Picture: TBitMap;
  2469.     constructor Create(AOwner: TComponent); override;
  2470.     destructor Destroy; override;
  2471.     procedure DefaultDrawPoints(PointsStep, PointsHeight,
  2472.       ExtremePointsHeight: Longint); virtual;
  2473.     procedure ChangeSkinData; override;
  2474.     property Canvas;
  2475.     property Increment: Longint read FIncrement write SetIncrement default 10;
  2476.     property MinValue: Longint read FMinValue write SetMinValue default 0;
  2477.     property MaxValue: Longint read FMaxValue write SetMaxValue default 100;
  2478.     property Value: Longint read FValue write SetValue default 0;
  2479.     property Transparent: Boolean read FTransparent write SetTransparent;
  2480.     property UseSkinThumb: Boolean read FUseSkinThumb write FUseSkinThumb;
  2481.   end;
  2482. { TspSlider }
  2483.   TspSkinSlider = class(TspSkinCustomSlider)
  2484.   published
  2485.     property Align;
  2486.     property Color;
  2487.     property Cursor;
  2488.     property DragMode;
  2489.     property DragCursor;
  2490.     property Enabled;
  2491.     property ImageHThumb;
  2492.     property ImageHRuler;
  2493.     property ImageVThumb;
  2494.     property ImageVRuler;
  2495.     property Increment;
  2496.     property MinValue;
  2497.     property MaxValue;
  2498.     property NumThumbStates;
  2499.     property Orientation;
  2500.     property EdgeSize;
  2501.     property Options;
  2502.     property ParentColor;
  2503.     property ParentShowHint;
  2504.     property PopupMenu;
  2505.     property ShowHint;
  2506.     property TabOrder;
  2507.     property TabStop default True;
  2508.     property Value;
  2509.     property Transparent;
  2510.     property UseSkinThumb;
  2511.     property Visible;
  2512.     property Anchors;
  2513.     property Constraints;
  2514.     property DragKind;
  2515.     property OnChange;
  2516.     property OnChanged;
  2517.     property OnDrawPoints;
  2518.     property OnClick;
  2519.     property OnDblClick;
  2520.     property OnEnter;
  2521.     property OnExit;
  2522.     property OnMouseMove;
  2523.     property OnMouseDown;
  2524.     property OnMouseUp;
  2525.     property OnKeyDown;
  2526.     property OnKeyUp;
  2527.     property OnKeyPress;
  2528.     property OnDragOver;
  2529.     property OnDragDrop;
  2530.     property OnEndDrag;
  2531.     property OnStartDrag;
  2532.     property OnContextPopup;
  2533.     property OnMouseWheelDown;
  2534.     property OnMouseWheelUp;
  2535.     property OnEndDock;
  2536.     property OnStartDock;
  2537.   end;
  2538.   TspSkinBevel = class(TBevel)
  2539.   protected
  2540.     FSD: TspSkinData;
  2541.     FSkinDataName: String;
  2542.     FIndex: Integer;
  2543.     FDividerMode: Boolean;
  2544.     procedure SetDividerMode(Value: Boolean);
  2545.     procedure SetSkinData(Value: TspSkinData);
  2546.   public
  2547.     LightColor, DarkColor: TColor;
  2548.     constructor Create(AOwner: TComponent); override;
  2549.     procedure Paint; override;
  2550.     procedure ChangeSkinData;
  2551.   published
  2552.     property SkinData: TspSkinData read FSD write SetSkinData;
  2553.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  2554.     property DividerMode: Boolean read FDividerMode write SetDividerMode;
  2555.   end;
  2556.   TspSkinButtonsBar = class;
  2557.   TspButtonBarSection = class;
  2558.   TspButtonBarItems = class;
  2559.   TspButtonBarItem = class(TCollectionItem)
  2560.   private
  2561.     FText: String;
  2562.     FImageIndex: Integer;
  2563.     FOnClick: TNotifyEvent;
  2564.     procedure SetText(const Value: string);
  2565.     procedure SetImageIndex(const Value: Integer);
  2566.     procedure ItemClick(const Value: TNotifyEvent);
  2567.   protected
  2568.     function GetDisplayName: string; override;
  2569.     procedure Click;
  2570.   public
  2571.     constructor Create(Collection: TCollection); override;
  2572.     procedure Assign(Source: TPersistent); override;
  2573.   published
  2574.     property Text: string read FText write SetText;
  2575.     property ImageIndex:integer read FImageIndex write SetImageIndex;
  2576.     property OnClick:TNotifyEvent read FonClick write ItemClick;
  2577.   end;
  2578.   TspButtonBarItems = class(TCollection)
  2579.   private
  2580.     FSection: TspButtonBarSection;
  2581.     function GetItem(Index: Integer): TspButtonBarItem;
  2582.     procedure SetItem(Index: Integer; Value: TspButtonBarItem);
  2583.   protected
  2584.     function GetOwner: TPersistent; override;
  2585.     procedure Update(Item: TCollectionItem); override;
  2586.   public
  2587.     constructor Create(Section: TspButtonBarSection);
  2588.     function Add: TspButtonBarItem;
  2589.     property Items[Index: Integer]: TspButtonBarItem read GetItem write SetItem; default;
  2590.   end;
  2591.   TspButtonBarSection = class(TCollectionItem)
  2592.   private
  2593.     FText: string;
  2594.     FItems: TspButtonBarItems;
  2595.     FOnClick: TNotifyEvent;
  2596.     FImageIndex: Integer;
  2597.     procedure SetText(const Value: string);
  2598.     procedure SetItems(const Value: TspButtonBarItems);
  2599.     procedure SectionClick(const Value: TNotifyEvent);
  2600.     procedure SetImageIndex(Value: Integer);
  2601.   protected
  2602.     function GetDisplayName: string; override;
  2603.     procedure Click;
  2604.   public
  2605.     constructor Create(Collection: TCollection); override;
  2606.     destructor  Destroy;override;
  2607.     procedure Assign(Source: TPersistent); override;
  2608.   published
  2609.     property Text: string read FText write SetText;
  2610.     property Items: TspButtonBarItems read FItems write SetItems;
  2611.     property OnClick:TNotifyEvent read FOnClick write SectionClick;
  2612.     property ImageIndex: Integer read FImageIndex write SetImageIndex;
  2613.   end;
  2614.   TspButtonBarSections = class(TCollection)
  2615.   private
  2616.     FButtonsBar: TspSkinButtonsBar;
  2617.     function GetItem(Index: Integer): TspButtonBarSection;
  2618.     procedure SetItem(Index: Integer; Value: TspButtonBarSection);
  2619.   protected
  2620.     function GetOwner: TPersistent; override;
  2621.     procedure Update(Item: TCollectionItem); override;
  2622.   public
  2623.     function GetButtonsBar: TspSkinButtonsBar;
  2624.     constructor Create(ButtonsBar: TspSkinButtonsBar);
  2625.     function Add: TspButtonBarSection;
  2626.     property Items[Index: Integer]: TspButtonBarSection read GetItem write SetItem; default;
  2627.   end;
  2628.   TspSectionButton = class(TspSkinSpeedButton)
  2629.   private
  2630.     FItemIndex: Integer;
  2631.     FButtonsBar: TspSkinButtonsBar;
  2632.   public
  2633.     constructor CreateEx(AOwner: TComponent; AButtonsBar: TspSkinButtonsBar; AIndex: Integer);
  2634.     procedure ButtonClick; override;
  2635.   end;
  2636.   TspSectionItem = class(TspSkinSpeedButton)
  2637.   private
  2638.     FItemIndex: Integer;
  2639.     FButtonsBar: TspSkinButtonsBar;
  2640.     FSectionIndex: Integer;
  2641.   public
  2642.     constructor CreateEx(AOwner: TComponent; AButtonsBar: TspSkinButtonsBar; ASectionIndex, AIndex: Integer);
  2643.     procedure ButtonClick; override;
  2644.   end;
  2645.   TspSkinButtonsBar = class(TspSkinPanel)
  2646.   private
  2647.     FShowButtons: Boolean;
  2648.     FDefaultSectionFont: TFont;
  2649.     FDefaultItemFont: TFont;
  2650.     FUpButton, FDownButton: TspSkinButton;
  2651.     TopIndex: Integer;
  2652.     VisibleCount: Integer;
  2653.     FItemHeight: Integer;
  2654.     FItemsTransparent: Boolean;
  2655.     FItemsPanel: TspSkinPanel;
  2656.     FSections: TspButtonBarSections;
  2657.     FSectionIndex: Integer;
  2658.     FItemImages: TImagelist;
  2659.     FSectionImages: TImageList;
  2660.     FSectionButtons: TList;
  2661.     FSectionItems: TList;
  2662.     FSectionButtonSkinDataName: String;
  2663.     FDefaultButtonHeight: Integer;
  2664.     procedure SetShowButtons(Value: Boolean);
  2665.     procedure SetDefaultButtonHeight(Value: Integer);
  2666.     procedure SetDefaultSectionFont(Value: TFont);
  2667.     procedure SetDefaultItemFont(Value: TFont);
  2668.     procedure SetItemHeight(Value: Integer);
  2669.     procedure SetItemsTransparent(Value: Boolean);
  2670.     procedure SetSections(Value: TspButtonBarSections);
  2671.     procedure UpdateSection(Index: Integer);
  2672.     procedure UpdateSections;
  2673.     procedure UpdateItems;
  2674.     procedure SetSectionIndex(const Value: integer);
  2675.     procedure SetItemImages(const Value: TImagelist);
  2676.     procedure SetSectionImages(const Value: TImageList);
  2677.     procedure CheckVisibleItems;
  2678.     procedure OnItemPanelResize(Sender: TObject);
  2679.   protected
  2680.     procedure CreateWnd; override;
  2681.     procedure SetSkinData(Value: TspSkinData); override;
  2682.     procedure ClearSections;
  2683.     procedure ClearItems;
  2684.     procedure OpenSection(Index: Integer);
  2685.     procedure ArangeItems;
  2686.     procedure ShowUpButton;
  2687.     procedure ShowDownButton;
  2688.     procedure HideUpButton;
  2689.     procedure HideDownButton;
  2690.     procedure UpButtonClick(Sender: TObject);
  2691.     procedure DownButtonClick(Sender: TObject);
  2692.   public
  2693.     procedure ScrollUp;
  2694.     procedure ScrollDown;
  2695.     constructor Create(AOwner: TComponent); override;
  2696.     destructor Destroy; override;
  2697.     procedure Notification(AComponent:TComponent; Operation:TOperation);override;
  2698.     procedure UpDateSectionButtons;
  2699.     procedure ChangeSkinData; override;
  2700.   published
  2701.     property ShowButtons: Boolean read FShowButtons write SetShowButtons;
  2702.     property DefaultSectionFont: TFont read FDefaultSectionFont write SetDefaultSectionFont;
  2703.     property DefaultButtonHeight: Integer
  2704.       read FDefaultButtonHeight write SetDefaultButtonHeight;
  2705.     property DefaultItemFont: TFont read FDefaultItemFont write SetDefaultItemFont;
  2706.     property Align default alLeft;
  2707.     property Enabled;
  2708.     property SectionButtonSkinDataName: String
  2709.       read FSectionButtonSkinDataName
  2710.       write FSectionButtonSkinDataName; 
  2711.     property ItemHeight: Integer read FItemHeight write SetItemHeight;
  2712.     property ItemsTransparent: Boolean read FItemsTransparent write SetItemsTransparent;
  2713.     property ItemImages: TImagelist read FItemImages write SetItemImages;
  2714.     property SectionImages:TImageList read FSectionImages write SetSectionImages;
  2715.     property Sections: TspButtonBarSections read FSections write SetSections;
  2716.     property SectionIndex:integer read FSectionIndex write SetSectionIndex;
  2717.     property PopupMenu;
  2718.     property ShowHint;
  2719.     property Hint;
  2720.     property Visible;
  2721.     property OnClick;
  2722.     property OnContextPopup;
  2723.     property OnMouseDown;
  2724.     property OnMouseMove;
  2725.     property OnMouseUp;
  2726.     property OnResize;
  2727.   end;
  2728.   {TspSkinNoteBook}
  2729.   TspSkinPage = class(TspSkinPanel)
  2730.   private
  2731.     procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  2732.   protected
  2733.     FImageIndex: Integer;
  2734.     procedure ReadState(Reader: TReader); override;
  2735.   public
  2736.     constructor Create(AOwner: TComponent); override;
  2737.   published
  2738.     property ImageIndex: Integer read FImageIndex write FImageIndex;
  2739.     property Caption;
  2740.     property Height stored False;
  2741.     property TabOrder stored False;
  2742.     property Visible stored False;
  2743.     property Width stored False;
  2744.   end;
  2745.   TspSkinNotebook = class(TspSkinPanel)
  2746.   private
  2747.     FAccess: TStrings;
  2748.     FPageIndex: Integer;
  2749.     FOnPageChanged: TNotifyEvent;
  2750.     FButtonsMode: Boolean;
  2751.     FButtons: TList;
  2752.     FImages: TImageList;
  2753.     FButtonSkinDataName: String;
  2754.     procedure SetImages(const Value: TImageList);
  2755.     procedure ClearButtons;
  2756.     procedure SetPages(Value: TStrings);
  2757.     procedure SetActivePage(const Value: string);
  2758.     function GetActivePage: string;
  2759.     procedure SetPageIndex(Value: Integer);
  2760.     procedure SetButtonsMode(Value: Boolean);
  2761.   protected
  2762.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  2763.     procedure CreateParams(var Params: TCreateParams); override;
  2764.     function GetChildOwner: TComponent; override;
  2765.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  2766.     procedure ReadState(Reader: TReader); override;
  2767.     procedure ShowControl(AControl: TControl); override;
  2768.     procedure UpdateButtons;
  2769.   public
  2770.     FPageList: TList;
  2771.     procedure UpdateButton(APageIndex: Integer; ACaption: String);
  2772.     procedure Loaded; override;
  2773.     constructor Create(AOwner: TComponent); override;
  2774.     destructor Destroy; override;
  2775.   published
  2776.     property ActivePage: string read GetActivePage write SetActivePage stored False;
  2777.     property ButtonsMode: Boolean read FButtonsMode write SetButtonsMode;
  2778.      property ButtonSkinDataName: String
  2779.       read FButtonSkinDataName
  2780.       write FButtonSkinDataName;
  2781.     property Images: TImageList read FImages write SetImages;
  2782.     property Align;
  2783.     property Anchors;
  2784.     property DragCursor;
  2785.     property DragKind;
  2786.     property DragMode;
  2787.     property Font;
  2788.     property Enabled;
  2789.     property Constraints;
  2790.     property PageIndex: Integer read FPageIndex write SetPageIndex default 0;
  2791.     property Pages: TStrings read FAccess write SetPages stored False;
  2792.     property ParentShowHint;
  2793.     property PopupMenu;
  2794.     property ShowHint;
  2795.     property TabOrder;
  2796.     property TabStop;
  2797.     property Visible;
  2798.     property OnClick;
  2799.     property OnContextPopup;
  2800.     property OnDblClick;
  2801.     property OnDragDrop;
  2802.     property OnDragOver;
  2803.     property OnEndDock;
  2804.     property OnEndDrag;
  2805.     property OnEnter;
  2806.     property OnExit;
  2807.     property OnMouseDown;
  2808.     property OnMouseMove;
  2809.     property OnMouseUp;
  2810.     property OnPageChanged: TNotifyEvent read FOnPageChanged write FOnPageChanged;
  2811.     property OnStartDock;
  2812.     property OnStartDrag;
  2813.   end;
  2814.   TspPageButton = class(TspSkinSpeedButton)
  2815.   private
  2816.     FPageIndex: Integer;
  2817.     FNoteBook: TspSkinNoteBook;
  2818.   public
  2819.     constructor CreateEx(AOwner: TComponent; ANoteBook: TspSkinNoteBook; APageIndex: Integer);
  2820.     procedure ButtonClick; override;
  2821.   end;
  2822.  TspSkinXFormButton = class(TspSkinButton)
  2823.  private
  2824.    FDefImage: TBitMap;
  2825.    FDefActiveImage: TBitMap;
  2826.    FDefDownImage: TBitMap;
  2827.    FDefMask: TBitMap;
  2828.    FDefActiveFontColor: TColor;
  2829.    FDefDownFontColor: TColor;
  2830.    procedure SetDefImage(Value: TBitMap);
  2831.    procedure SetDefActiveImage(Value: TBitMap);
  2832.    procedure SetDefDownImage(Value: TBitMap);
  2833.    procedure SetDefMask(Value: TBitMap);
  2834.  protected
  2835.     procedure SetControlRegion; override;
  2836.     procedure DrawDefaultButton(C: TCanvas);
  2837.     procedure CreateControlDefaultImage(B: TBitMap); override;
  2838.     procedure Loaded; override;
  2839.  public
  2840.    constructor Create(AOwner: TComponent); override;
  2841.    destructor Destroy; override;
  2842.    procedure ChangeSkinData; override;
  2843.    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  2844.  published
  2845.    property DefImage: TBitMap read FDefImage write SetDefImage;
  2846.    property DefActiveImage: TBitMap read FDefActiveImage write SetDefActiveImage;
  2847.    property DefDownImage: TBitMap read FDefDownImage write SetDefDownImage;
  2848.    property DefMask: TBitMap read FDefMask write SetDefMask;
  2849.    property DefActiveFontColor: TColor
  2850.     read FDefActiveFontColor write FDefActiveFontColor;
  2851.    property DefDownFontColor: TColor
  2852.     read FDefDownFontColor write FDefDownFontColor;
  2853.  end;
  2854.  procedure NotebookHandlesNeeded(Notebook: TspSkinNotebook);
  2855. implementation
  2856. {$R *.res}
  2857. Uses spUtils, DynamicSkinForm, ActnList, ImgList, SkinTabs, CommCtrl, ShellAPI;
  2858. const
  2859.   MorphTimerInterval = 20;
  2860. type
  2861.   TParentControl = class(TWinControl);
  2862. const
  2863.   ImagesResNames: array[TspSliderImage] of PChar =
  2864.     ('SP_HTB', 'SP_HRL', 'SP_VTB', 'SP_VRL');
  2865.   Indent = 6;
  2866.   JumpInterval = 400;
  2867. // Call HandleNeeded for each page in notebook.  Used to allow anchors to work
  2868. // on invisible pages.
  2869. procedure NotebookHandlesNeeded(Notebook: TspSkinNotebook);
  2870. var
  2871.   I: Integer;
  2872. begin
  2873.   if Notebook <> nil then
  2874.     for I := 0 to Notebook.FPageList.Count - 1 do
  2875.       with TspSkinPage(Notebook.FPageList[I]) do
  2876.       begin
  2877.         DisableAlign;
  2878.         try
  2879.           HandleNeeded;
  2880.           ControlState := ControlState - [csAlignmentNeeded];
  2881.         finally
  2882.           EnableAlign;
  2883.         end;
  2884.       end;
  2885. end;
  2886. procedure CalcLCoord(Layout: TspButtonLayout; R: TRect; gw, gh, tw, th: Integer;
  2887.   Spacing, Margin: Integer; var tx, ty, gx, gy: Integer);
  2888. var
  2889.   H, W, H1, W1: Integer;
  2890. begin
  2891.  H := R.Top + RectHeight(R) div 2;
  2892.  W := R.Left + RectWidth(R) div 2;
  2893.  if Margin = -1
  2894.  then
  2895.    begin
  2896.      W1 := (tw + gw + Spacing) div 2;
  2897.      H1 := (th + gh + Spacing) div 2;
  2898.      case Layout of
  2899.        blGlyphRight:
  2900.          begin
  2901.            tx := W - W1;
  2902.            ty := H - th div 2;
  2903.            gx := W + W1 - gw;
  2904.            gy := H - gh div 2;
  2905.          end;
  2906.       blGlyphLeft:
  2907.          begin
  2908.            gx := W - W1;
  2909.            gy := H - gh div 2;
  2910.            tx := W + W1 - tw;
  2911.            ty := H - th div 2;
  2912.          end;
  2913.       blGlyphTop:
  2914.          begin
  2915.            tx := W - tw div 2;
  2916.            ty := H + H1 - th;
  2917.            gx := W - gw div 2;
  2918.            gy := H - H1;
  2919.         end;
  2920.      blGlyphBottom:
  2921.         begin
  2922.           gx := W - gw div 2;
  2923.           gy := H + H1 - gh;
  2924.           tx := W - tw div 2;
  2925.           ty := H - H1;
  2926.        end;
  2927.      end;
  2928.    end
  2929.  else
  2930.    begin
  2931.      case Layout of
  2932.        blGlyphRight:
  2933.          begin
  2934.            gy := H - gh div 2;
  2935.            gx := R.Right - gw - Margin;
  2936.            tx := gx - Spacing - tw;
  2937.            ty := H - th div 2;
  2938.          end;
  2939.        blGlyphLeft:
  2940.          begin
  2941.            gy := H - gh div 2;
  2942.            gx := R.Left + Margin;
  2943.            tx := gx + gw + Spacing;
  2944.            ty := H - th div 2;
  2945.          end;
  2946.        blGlyphTop:
  2947.           begin
  2948.             gy := R.Top +  Margin;
  2949.             gx := W - gw div 2;
  2950.             ty := gy + gh + Spacing;
  2951.             tx := W - tw div 2;
  2952.           end;
  2953.       blGlyphBottom:
  2954.           begin
  2955.             gy := R.Bottom - gh - Margin;
  2956.             gx := W - gw div 2;
  2957.             ty := gy - Spacing - th;
  2958.             tx := W - tw div 2;
  2959.          end;
  2960.        end;
  2961.     end;
  2962. end;
  2963. procedure DrawGlyphAndText(Cnvs: TCanvas;
  2964.   R: TRect; Margin, Spacing: Integer; Layout: TspButtonLayout;
  2965.   Caption: String; Glyph: TBitMap; NumGlyphs, GlyphNum: Integer; ADown: Boolean);
  2966. var
  2967.   gw, gh: Integer;
  2968.   tw, th: Integer;
  2969.   TX, TY, GX, GY: Integer;
  2970.   TR: TRect;
  2971. begin
  2972.   if Glyph.Empty
  2973.   then
  2974.     begin
  2975.       gw := 0;
  2976.       gh := 0;
  2977.     end
  2978.   else
  2979.     begin
  2980.       gw := Glyph.Width div NumGlyphs;
  2981.       gh := Glyph.Height;
  2982.     end;
  2983.   with Cnvs do
  2984.   begin
  2985.     TR := NullRect;
  2986.     DrawText(Handle, PChar(Caption), Length(Caption), TR,
  2987.              DT_CALCRECT);
  2988.     tw := RectWidth(TR);
  2989.     th := RectHeight(TR);
  2990.     Brush.Style := bsClear;
  2991.   end;
  2992.   CalcLCoord(Layout, R, gw, gh, tw, th, Spacing, Margin, TX, TY, GX, GY);
  2993.   if ADown
  2994.   then
  2995.     begin
  2996.       Inc(GX); Inc(GY);
  2997.       Inc(TX); Inc(TY);
  2998.     end;
  2999.   TR := Rect(TX, TY, TX, TY);
  3000.   DrawText(Cnvs.Handle, PChar(Caption), Length(Caption), TR, DT_CALCRECT);
  3001.   Inc(TR.Right, 2);
  3002.   DrawText(Cnvs.Handle, PChar(Caption), Length(Caption), TR, DT_VCENTER or DT_CENTER);
  3003.   if not Glyph.Empty then DrawGlyph(Cnvs, GX, GY, Glyph, NumGlyphs, GlyphNum);
  3004. end;
  3005. constructor TspSkinControl.Create;
  3006. begin
  3007.   inherited Create(AOwner);
  3008.   FSD := nil;
  3009.   FAreaName := '';
  3010.   Frgn := 0;
  3011.   FIndex := -1;
  3012.   FDrawDefault := True;
  3013.   CursorIndex := -1;
  3014.   FAlphaBlend := False;
  3015.   FAlphaBlendValue := 200;
  3016.   FUseSkinCursor := False;
  3017. end;
  3018. destructor TspSkinControl.Destroy;
  3019. begin
  3020.   inherited Destroy;
  3021. end;
  3022. procedure TspSkinControl.SetAlphaBlend;
  3023. begin
  3024.   FAlphaBlend := AValue;
  3025.   RePaint;
  3026. end;
  3027. procedure TspSkinControl.SetAlphaBlendValue;
  3028. begin
  3029.   FAlphaBlendValue := AValue;
  3030.   RePaint;
  3031. end;
  3032. procedure TspSkinControl.CMMouseEnter;
  3033. begin
  3034.   inherited;
  3035.   if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
  3036. end;
  3037. procedure TspSkinControl.CMMouseLeave;
  3038. begin
  3039.   inherited;
  3040.   if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
  3041. end;
  3042. procedure TspSkinControl.WMEraseBkGnd;
  3043. begin
  3044. end;
  3045. procedure TspSkinControl.WMMOVE;
  3046. begin
  3047.   inherited;
  3048.   if FAlphaBlend then RePaint;
  3049. end;
  3050. procedure TspSkinControl.BeforeChangeSkinData;
  3051. begin
  3052.   FIndex := -1;
  3053. end;
  3054. procedure TspSkinControl.ChangeSkinData;
  3055. begin
  3056.   GetSkinData;
  3057.   if FUseSkinCursor
  3058.   then 
  3059.   if CursorIndex <> -1
  3060.   then
  3061.     Cursor := FSD.StartCursorIndex + CursorIndex
  3062.   else
  3063.     Cursor := crDefault;
  3064.   RePaint;
  3065. end;
  3066. procedure TspSkinControl.SetSkinData;
  3067. begin
  3068.   FSD := Value;
  3069.   if (FSD <> nil) then
  3070.   if not FSD.Empty and not (csDesigning in ComponentState)
  3071.   then
  3072.     ChangeSkinData;
  3073. end;
  3074. procedure TspSkinControl.GetSkinData;
  3075. begin
  3076.   if (FSD = nil) or FSD.Empty
  3077.   then
  3078.     FIndex := -1
  3079.   else
  3080.     FIndex := FSD.GetControlIndex(FSkinDataName);
  3081. end;
  3082. procedure TspSkinControl.Paint;
  3083. var
  3084.   Buffer: TBitMap;
  3085.   ParentImage: TBitMap;
  3086.   PBuffer, PIBuffer: TspEffectBmp;
  3087.   kf: Double;
  3088. begin
  3089.   if (Width <= 0) or (Height <= 0) then Exit;
  3090.   GetSkinData;
  3091.   Buffer := TBitMap.Create;
  3092.   Buffer.Width := Width;
  3093.   Buffer.Height := Height;
  3094.   if FIndex <> -1
  3095.   then
  3096.     CreateControlSkinImage(Buffer)
  3097.   else
  3098.   if FDrawDefault
  3099.   then
  3100.     CreateControlDefaultImage(Buffer);
  3101.   if FAlphaBlend
  3102.   then
  3103.     begin
  3104.       ParentImage := TBitMap.Create;
  3105.       ParentImage.Width := Width;
  3106.       ParentImage.Height := Height;
  3107.       GetParentImage(Self, ParentImage.Canvas);
  3108.       PBuffer := TspEffectBmp.CreateFromhWnd(Buffer.Handle);
  3109.       PIBuffer := TspEffectBmp.CreateFromhWnd(ParentImage.Handle);
  3110.       kf := 1 - FAlphaBlendValue / 255;
  3111.       PBuffer.Morph(PIBuffer, Kf);
  3112.       PBuffer.Draw(Canvas.Handle, 0, 0);
  3113.       PBuffer.Free;
  3114.       PIBuffer.Free;
  3115.       ParentImage.Free;
  3116.     end
  3117.   else
  3118.     Canvas.Draw(0, 0, Buffer);
  3119.   Buffer.Free;
  3120. end;
  3121. procedure TspSkinControl.CreateControlDefaultImage;
  3122. begin
  3123. end;
  3124. procedure TspSkinControl.CreateControlSkinImage;
  3125. begin
  3126. end;
  3127. procedure TspSkinControl.Notification;
  3128. begin
  3129.   inherited Notification(AComponent, Operation);
  3130.   if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
  3131. end;
  3132. constructor TspFrameSkinControl.Create(AOwner: TComponent);
  3133. begin
  3134.   inherited;
  3135.   FFrame := 1;
  3136.   FrameW := 0;
  3137.   FrameH := 0;
  3138.   Picture := nil;
  3139.   MaskPicture := nil;
  3140.   FDefaultImage := TBitMap.Create;
  3141.   FDefaultMask := TBitMap.Create;
  3142.   FDefaultFramesCount := 1;
  3143. end;
  3144. destructor TspFrameSkinControl.Destroy;
  3145. begin
  3146.   FDefaultImage.Free;
  3147.   FDefaultMask.Free;
  3148.   if FRgn <> 0
  3149.   then
  3150.     begin
  3151.       DeleteObject(FRgn);
  3152.       FRgn := 0;
  3153.     end;
  3154.   inherited;
  3155. end;
  3156. procedure TspFrameSkinControl.Loaded;
  3157. begin
  3158.   inherited;
  3159.   CalcDefaultFrameSize;
  3160.   if (FIndex = -1) and (FSD = nil)
  3161.   then
  3162.     SetControlRegion;
  3163. end;
  3164. procedure TspFrameSkinControl.CalcDefaultFrameSize;
  3165. begin
  3166.   if FDefaultImage.Empty then Exit;
  3167.   FramesCount := FDefaultFramesCount;
  3168.   FramesPlacement := FDefaultFramesPlacement;
  3169.   case FramesPlacement of
  3170.    fpHorizontal:
  3171.      begin
  3172.        FrameW := FDefaultImage.Width div FramesCount;
  3173.        FrameH := FDefaultImage.Height;
  3174.      end;
  3175.    fpVertical:
  3176.      begin
  3177.        FrameW := FDefaultImage.Width;
  3178.        FrameH := FDefaultImage.Height div FramesCount;
  3179.      end;
  3180.   end;
  3181. end;
  3182. procedure TspFrameSkinControl.SetDefaultMask;
  3183. begin
  3184.   FDefaultMask.Assign(Value);
  3185.   SetControlRegion;
  3186.   RePaint;
  3187. end;
  3188. procedure TspFrameSkinControl.SetDefaultImage;
  3189. begin
  3190.   FDefaultImage.Assign(Value);
  3191.   FFrame := 1;
  3192.   CalcDefaultFrameSize;
  3193.   SetBounds(Left, Top, FrameW, FrameH);
  3194.   RePaint;
  3195. end;
  3196. procedure TspFrameSkinControl.SetDefaultFramesCount;
  3197. begin
  3198.   if Value <= 0
  3199.   then
  3200.     FDefaultFramesCount := 1
  3201.   else
  3202.     FDefaultFramesCount := Value;
  3203.   CalcDefaultFrameSize;
  3204.   SetBounds(Left, Top, FrameW, FrameH);
  3205.   RePaint;
  3206. end;
  3207. procedure TspFrameSkinControl.SetDefaultFramesPlacement;
  3208. begin
  3209.   FDefaultFramesPlacement := Value;
  3210.   CalcDefaultFrameSize;
  3211.   SetBounds(Left, Top, FrameW, FrameH);
  3212.   RePaint;
  3213. end;
  3214. procedure TspFrameSkinControl.GetSkinData;
  3215. begin
  3216.   inherited;
  3217.   if FIndex <> -1
  3218.   then
  3219.     if TspDataSkinControl(FSD.CtrlList.Items[FIndex]) is TspDataSkinFrameControl
  3220.     then
  3221.       begin
  3222.         with TspDataSkinFrameControl(FSD.CtrlList.Items[FIndex]) do
  3223.         begin
  3224.           Self.SkinRect := SkinRect;
  3225.           Self.CursorIndex := CursorIndex;
  3226.           if (PictureIndex <> -1) and (PictureIndex < FSD.FActivePictures.Count)
  3227.           then
  3228.             Picture := TBitMap(FSD.FActivePictures.Items[PictureIndex])
  3229.           else
  3230.             Picture := nil;
  3231.           if (MaskPictureIndex <> -1) and (MaskPictureIndex < FSD.FActivePictures.Count)
  3232.           then
  3233.             MaskPicture := TBitMap(FSD.FActivePictures.Items[MaskPictureIndex])
  3234.           else
  3235.             MaskPicture := nil;
  3236.           Self.FramesCount := FramesCount;
  3237.           Self.FramesPlacement := FramesPlacement;
  3238.         end;
  3239.         if FramesCount < 2 then FramesCount := 2;
  3240.         case FramesPlacement of
  3241.           fpHorizontal:
  3242.              begin
  3243.                FrameW := RectWidth(SkinRect) div FramesCount;
  3244.                FrameH := RectHeight(SkinRect);
  3245.              end;
  3246.           fpVertical:
  3247.             begin
  3248.               FrameH := RectHeight(SkinRect) div FramesCount;
  3249.               FrameW := RectWidth(SkinRect);
  3250.             end;
  3251.         end;
  3252.       end;
  3253. end;
  3254. procedure TspFrameSkinControl.SetBounds;
  3255. var
  3256.   UpDate: Boolean;
  3257. begin
  3258.   GetSkinData;
  3259.   UpDate := ((Width <> AWidth) or (Height <> AHeight)) and
  3260.   ((FIndex <> -1) or (not FDefaultImage.Empty and (FIndex = -1)));
  3261.   if UpDate
  3262.   then
  3263.     begin
  3264.       AWidth := FrameW;
  3265.       AHeight := FrameH;
  3266.     end;  
  3267.   inherited;
  3268.   if UpDate
  3269.   then
  3270.     begin
  3271.       SetControlRegion;
  3272.       RePaint;
  3273.     end;
  3274. end;
  3275. procedure TspFrameSkinControl.ChangeSkinData;
  3276. var
  3277.   UpDate: Boolean;
  3278. begin
  3279.   GetSkinData;
  3280.   if (FIndex = -1) and (not FDefaultImage.Empty)
  3281.   then
  3282.     begin
  3283.       CalcDefaultFrameSize;
  3284.       SetControlRegion;
  3285.       SetBounds(Left, Top, FrameW, FrameH);
  3286.       RePaint;
  3287.       Exit;
  3288.     end;
  3289.   if (FIndex <> -1) and (FFrame > FramesCount)
  3290.   then FFrame := FramesCount;
  3291.   if FUseSkinCursor
  3292.   then
  3293.   if (CursorIndex <> -1) and (FIndex <> -1)
  3294.   then
  3295.     Cursor := FSD.StartCursorIndex + CursorIndex
  3296.   else
  3297.     Cursor := crDefault;
  3298.   if FIndex <> -1
  3299.   then
  3300.     begin
  3301.       UpDate := (Width <> FrameW) or (Height <> FrameH);
  3302.       SetBounds(Left, Top, FrameW, FrameH);
  3303.     end
  3304.   else
  3305.     UpDate := False;
  3306.   if not UpDate
  3307.   then
  3308.     begin
  3309.       SetControlRegion;
  3310.       RePaint;
  3311.     end;
  3312. end;
  3313. procedure TspFrameSkinControl.CreateControlDefaultImage;
  3314. var
  3315.   R: TRect;
  3316. begin
  3317.   if FDefaultImage.Empty
  3318.   then
  3319.     begin
  3320.       with B.Canvas do
  3321.       begin
  3322.         R := ClientRect;
  3323.         Brush.Color := clBtnFace;
  3324.         FillRect(R);
  3325.       end;
  3326.       Frame3D(B.Canvas, R, clBtnShadow, clBtnShadow, 1);
  3327.     end
  3328.   else
  3329.     begin
  3330.       CalcDefaultFrameSize;
  3331.       if B.Width <> FrameW then B.Width := FrameW;
  3332.       if B.Height <> FrameH then B.Height := FrameH;
  3333.       case FramesPlacement of
  3334.          fpHorizontal:
  3335.            R := Rect((FFrame - 1) * FrameW, 0,
  3336.                       FFrame * FrameW, FrameH);
  3337.          fpVertical:
  3338.            R := Rect(0, (FFrame - 1) * FrameH,
  3339.                      FrameW, FFrame * FrameH);
  3340.       end;
  3341.       B.Canvas.CopyRect(Rect(0, 0, FrameW, FrameH), FDefaultImage.Canvas, R);
  3342.     end;
  3343. end;
  3344. procedure TspFrameSkinControl.CreateControlSkinImage;
  3345. var
  3346.   R: TRect;
  3347. begin
  3348.   if B.Width <> FrameW then B.Width := FrameW;
  3349.   if B.Height <> FrameH then B.Height := FrameH;
  3350.   case FramesPlacement of
  3351.     fpHorizontal:
  3352.        R := Rect(SkinRect.Left + (FFrame - 1) * FrameW, SkinRect.Top,
  3353.                  SkinRect.Left + FFrame * FrameW, SkinRect.Top + FrameH);
  3354.    fpVertical:
  3355.        R := Rect(SkinRect.Left, SkinRect.Top + (FFrame - 1) * FrameH,
  3356.                  SkinRect.Left + FrameW, SkinRect.Top + FFrame * FrameH);
  3357.   end;
  3358.   B.Canvas.CopyRect(Rect(0, 0, FrameW, FrameH), Picture.Canvas, R);
  3359. end;
  3360. procedure TspFrameSkinControl.SetControlRegion;
  3361. var
  3362.   TempRgn: HRgn;
  3363. begin
  3364.   if (FIndex = -1) and not FDefaultMask.Empty
  3365.   then
  3366.     begin
  3367.       TempRgn := FRgn;
  3368.       CreateSkinSimplyRegion(FRgn, FDefaultMask);
  3369.       SetWindowRgn(Handle, FRgn, True);
  3370.       if TempRgn <> 0 then DeleteObject(TempRgn);
  3371.     end
  3372.   else  
  3373.   if ((MaskPicture = nil) or (FIndex = -1)) and (FRgn <> 0)
  3374.   then
  3375.     begin
  3376.       SetWindowRgn(Handle, 0, True);
  3377.       DeleteObject(FRgn);
  3378.       FRgn := 0;
  3379.     end
  3380.   else
  3381.     if (MaskPicture <> nil) and (FIndex <> -1)
  3382.     then
  3383.       begin
  3384.         TempRgn := FRgn;
  3385.         CreateSkinSimplyRegion(FRgn, MaskPicture);
  3386.         SetWindowRgn(Handle, FRgn, True);
  3387.         if TempRgn <> 0 then DeleteObject(TempRgn);
  3388.       end;
  3389. end;
  3390. procedure TspFrameSkinControl.SetFrame;
  3391. begin
  3392.   if (FIndex = -1) and FDefaultImage.Empty then Exit;
  3393.   if Value < 1 then Value := 1 else
  3394.   if Value > FramesCount then Value := FramesCount;
  3395.   if FFrame <> Value
  3396.   then
  3397.     begin
  3398.       FFrame := Value;
  3399.       RePaint;
  3400.     end;
  3401. end;
  3402. constructor TspSkinSwitch.Create;
  3403. begin
  3404.   inherited Create(AOwner);
  3405.   Width := 25;
  3406.   Height := 50;
  3407.   FMouseIn := False;
  3408.   FAnimateTimer := TTimer.Create(Self);
  3409.   FAnimateTimer.Interval := 50;
  3410.   FAnimateTimer.Enabled := False;
  3411.   FAnimateTimer.OnTimer := DoAnimate;
  3412. end;
  3413. destructor TspSkinSwitch.Destroy;
  3414. begin
  3415.   FAnimateTimer.Free;
  3416.   inherited;
  3417. end;
  3418. procedure TspSkinSwitch.DoAnimate;
  3419. begin
  3420.   if (FIndex = -1) and FDefaultImage.Empty then Exit;
  3421.   if State = swOff
  3422.   then
  3423.     begin
  3424.       if Frame > 0 then Frame := Frame - 1 else Stop;
  3425.     end
  3426.   else
  3427.     begin
  3428.       if Frame < FramesCount then Frame := Frame + 1 else Stop;
  3429.     end;
  3430. end;
  3431. procedure TspSkinSwitch.Start;
  3432. begin
  3433.   FAnimateTimer.Enabled := True;
  3434. end;
  3435. procedure TspSkinSwitch.Stop;
  3436. begin
  3437.   FAnimateTimer.Enabled := False;
  3438. end;
  3439. procedure TspSkinSwitch.CMMouseEnter;
  3440. begin
  3441.   inherited;
  3442.   FMouseIn := True;
  3443. end;
  3444. procedure TspSkinSwitch.CMMouseLeave;
  3445. begin
  3446.   inherited;
  3447.   FMouseIn := False;
  3448. end;
  3449. procedure TspSkinSwitch.MouseUp(Button: TMouseButton; Shift: TShiftState;
  3450.                                 X, Y: Integer);
  3451. begin
  3452.   if (Button = mbLeft) and FMouseIn
  3453.   then
  3454.     begin
  3455.       if State = swOff then State := swOn else State := swOff;
  3456.     end;
  3457.   inherited;
  3458. end;
  3459. procedure TspSkinSwitch.ChangeSkinData;
  3460. begin
  3461.   inherited;
  3462.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3463.   then
  3464.     if FState = swOn
  3465.     then Frame := FramesCount
  3466.     else Frame := 1;
  3467. end;
  3468. procedure TspSkinSwitch.ChangeState;
  3469. begin
  3470.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3471.   then
  3472.     begin
  3473.       if FramesCount = 2
  3474.       then
  3475.         begin
  3476.           if FState = swOn
  3477.           then Frame := 2
  3478.           else Frame := 1;
  3479.         end
  3480.       else
  3481.         Start;  
  3482.     end
  3483.   else
  3484.     RePaint;
  3485. end;
  3486. procedure TspSkinSwitch.SetState;
  3487. begin
  3488.   FState := Value;
  3489.   ChangeState(Value);
  3490.   if not (csDesigning in ComponentState)
  3491.   then
  3492.     if Assigned(FOnChange) then FOnChange(Self);
  3493. end;
  3494. procedure TspSkinSwitch.SetTimerInterval;
  3495. begin
  3496.   FAnimateTimer.Interval := Value;
  3497. end;
  3498. function TspSkinSwitch.GetTimerInterval;
  3499. begin
  3500.   Result := FAnimateTimer.Interval;
  3501. end;
  3502. constructor TspSkinAnimate.Create(AOwner: TComponent);
  3503. begin
  3504.   inherited Create(AOwner);
  3505.   FAnimateTimer := TTimer.Create(Self);
  3506.   FAnimateTimer.Interval := 50;
  3507.   FAnimateTimer.Enabled := False;
  3508.   FAnimateTimer.OnTimer := DoAnimate;
  3509.   Width := 50;
  3510.   Height := 50;
  3511. end;
  3512. destructor TspSkinAnimate.Destroy;
  3513. begin
  3514.   FAnimateTimer.Enabled := False;
  3515.   FAnimateTimer.Free;
  3516.   inherited;
  3517. end;
  3518. procedure TspSkinAnimate.SetActive;
  3519. begin
  3520.   FActive := Value;
  3521.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3522.   then
  3523.     if FActive then Start else Stop;
  3524. end;
  3525. procedure TspSkinAnimate.SetTimerInterval;
  3526. begin
  3527.   FAnimateTimer.Interval := Value;
  3528. end;
  3529. function TspSkinAnimate.GetTimerInterval;
  3530. begin
  3531.   Result := FAnimateTimer.Interval;
  3532. end;
  3533. procedure TspSkinAnimate.DoAnimate;
  3534. begin
  3535.   if (FIndex = -1) and FDefaultImage.Empty then Exit;
  3536.   if FButtonMode and not FMouseIn
  3537.   then
  3538.     begin
  3539.       if Frame > 0 then Frame := Frame - 1 else Stop;
  3540.     end
  3541.   else
  3542.     begin
  3543.       if Frame = FramesCount
  3544.       then
  3545.         begin
  3546.           if FCycleMode then Frame := 0
  3547.         end
  3548.       else
  3549.         begin
  3550.           if Frame < FramesCount then Frame := Frame + 1 else Stop;
  3551.         end;
  3552.     end;
  3553. end;
  3554. procedure TspSkinAnimate.CMMouseEnter(var Message: TMessage);
  3555. begin
  3556.   inherited;
  3557.   if (FIndex = -1) and FDefaultImage.Empty then Exit;
  3558.   FMouseIn := True;
  3559.   if FButtonMode then Start;
  3560. end;
  3561. procedure TspSkinAnimate.CMMouseLeave(var Message: TMessage);
  3562. begin
  3563.   inherited;
  3564.   if (FIndex = -1) and FDefaultImage.Empty then Exit;
  3565.   FMouseIn := False;
  3566.   if FButtonMode then Start;
  3567. end;
  3568. procedure TspSkinAnimate.Start;
  3569. begin
  3570.   if not FCycleMode and not FButtonMode then FFrame := 1;
  3571.   FAnimateTimer.Enabled := True;
  3572.   if Assigned(FOnStart) then FOnStart(Self);
  3573. end;
  3574. procedure TspSkinAnimate.Stop;
  3575. begin
  3576.   FAnimateTimer.Enabled := False;
  3577.   if Assigned(FOnStop) then FOnStop(Self);
  3578. end;
  3579. constructor TspSkinFrameGauge.Create;
  3580. begin
  3581.   inherited;
  3582.   FMinValue := 0;
  3583.   FMaxValue := 100;
  3584.   FValue := 50;
  3585.   Width := 50;
  3586.   Height := 50;
  3587. end;
  3588. procedure TspSkinFrameGauge.ChangeSkinData;
  3589. begin
  3590.   inherited;
  3591.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3592.   then CalcFrame;
  3593. end;
  3594. procedure TspSkinFrameGauge.CalcFrame;
  3595. var
  3596.   FValInc: Integer;
  3597. begin
  3598.   FValInc := (FMaxValue - FMinValue) div (FramesCount - 1);
  3599.   Frame := Abs(FValue - FMinValue) div FValInc + 1;
  3600. end;
  3601. procedure TspSkinFrameGauge.SetMinValue;
  3602. begin
  3603.   FMinValue := AValue;
  3604.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3605.   then
  3606.     begin
  3607.       if FValue < FMinValue then FValue := FMinValue;
  3608.       CalcFrame;
  3609.     end;
  3610. end;
  3611. procedure TspSkinFrameGauge.SetMaxValue;
  3612. begin
  3613.   FMaxValue := AValue;
  3614.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3615.   then
  3616.     begin
  3617.       if FValue > FMaxValue then FValue := FMaxValue;
  3618.       CalcFrame;
  3619.     end;
  3620. end;
  3621. procedure TspSkinFrameGauge.SetValue;
  3622. begin
  3623.   if (FValue = AValue) or (AValue > FMaxValue) or
  3624.      (AValue < FMinValue) then Exit;
  3625.   FValue := AValue;
  3626.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty) then CalcFrame;
  3627. end;
  3628. constructor TspSkinFrameRegulator.Create;
  3629. begin
  3630.   inherited;
  3631.   FMinValue := 0;
  3632.   FMaxValue := 100;
  3633.   FValue := 50;
  3634.   Width := 50;
  3635.   Height := 50;
  3636.   FDown := False;
  3637.   FFrame := 1;
  3638.   Kind := rkRound;
  3639. end;
  3640. procedure TspSkinFrameRegulator.SetDefaultKind;
  3641. begin
  3642.   FDefaultKind := Value;
  3643.   Kind := FDefaultKind;
  3644. end;
  3645. procedure TspSkinFrameRegulator.CalcDefaultFrameSize;
  3646. begin
  3647.   inherited;
  3648.   Kind := FDefaultKind;
  3649. end;
  3650. procedure TspSkinFrameRegulator.ChangeSkinData;
  3651. begin
  3652.   inherited;
  3653.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty) then CalcFrame;
  3654. end;
  3655. procedure TspSkinFrameRegulator.CalcValue;
  3656. var
  3657.   Offset: Integer;
  3658.   Plus: Boolean;
  3659.   FW: Integer;
  3660.   FC: Integer;
  3661. begin
  3662.   if (FIndex = -1) and not FDefaultImage.Empty then CalcDefaultFrameSize;
  3663.   FW := 0;
  3664.   case Kind of
  3665.     rkRound: if FrameW > FrameH then FW := FrameH else FW := FrameW;
  3666.     rkVertical: FW := FrameH;
  3667.     rkHorizontal: FW := FrameW;
  3668.   end;
  3669.   if FramesCount - 1 > 0 then FC := FramesCount - 1 else FC := 1;
  3670.   FPixInc := FW div FC;
  3671.   FValInc := (FMaxValue - FMinValue) div FC;
  3672.   if FPixInc = 0 then FPixInc := 1;
  3673.   if FValInc = 0 then FValInc := 1;
  3674.   Plus := CurV >= StartV;
  3675.   if Plus
  3676.   then Offset := CurV - StartV
  3677.   else Offset := StartV - CurV;
  3678.   if Offset >= FPixInc
  3679.   then
  3680.     begin
  3681.       StartV := CurV;
  3682.       if Plus
  3683.       then TempValue := TempValue + FValInc
  3684.       else TempValue := TempValue - FValInc;
  3685.       if TempValue < FMinValue then TempValue := FMinValue;
  3686.       if TempValue > FMaxValue then TempValue := FMaxValue;
  3687.       Value := TempValue;
  3688.     end;
  3689. end;
  3690. procedure TspSkinFrameRegulator.CalcFrame;
  3691. var
  3692.   FC: Integer;
  3693. begin
  3694.   if (FIndex = -1) and not FDefaultImage.Empty then CalcDefaultFrameSize;
  3695.   if FramesCount - 1 > 0 then FC := FramesCount - 1 else FC := 1;
  3696.   FValInc := (FMaxValue - FMinValue) div FC;
  3697.   Frame := Abs(FValue - FMinValue) div FValInc + 1;
  3698. end;
  3699. procedure TspSkinFrameRegulator.SetMinValue;
  3700. begin
  3701.   FMinValue := AValue;
  3702.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3703.   then
  3704.     begin
  3705.       if FValue < FMinValue then FValue := FMinValue;
  3706.       CalcFrame;
  3707.     end;
  3708. end;
  3709. procedure TspSkinFrameRegulator.SetMaxValue;
  3710. begin
  3711.   FMaxValue := AValue;
  3712.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty)
  3713.   then
  3714.     begin
  3715.       if FValue > FMaxValue then FValue := FMaxValue;
  3716.       CalcFrame;
  3717.     end;
  3718. end;
  3719. procedure TspSkinFrameRegulator.SetValue;
  3720. begin
  3721.   if (FValue = AValue) or (AValue > FMaxValue) or
  3722.      (AValue < FMinValue) then Exit;
  3723.   FValue := AValue;
  3724.   if (FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty) then CalcFrame;
  3725.   if Assigned(FOnChange) then FOnChange(Self);
  3726. end;
  3727. procedure TspSkinFrameRegulator.GetSkinData; 
  3728. begin
  3729.   inherited;
  3730.   if (FIndex <> -1) 
  3731.   then
  3732.     if TspDataSkinControl(FSD.CtrlList.Items[FIndex]) is TspDataSkinFrameRegulator
  3733.     then
  3734.       with TspDataSkinFrameRegulator(FSD.CtrlList.Items[FIndex]) do
  3735.       begin
  3736.         Self.Kind := Kind;
  3737.       end;
  3738. end;
  3739. procedure TspSkinFrameRegulator.MouseDown;
  3740. begin
  3741.   FDown := True;
  3742.   TempValue := FValue;
  3743.   case Kind of
  3744.     rkRound: StartV := X - Y;
  3745.     rkVertical: StartV := -Y;
  3746.     rkHorizontal: StartV := X;
  3747.   end;
  3748.   inherited;
  3749. end;
  3750. procedure TspSkinFrameRegulator.MouseUp;
  3751. begin
  3752.   FDown := False;
  3753.   inherited;
  3754. end;
  3755. procedure TspSkinFrameRegulator.MouseMove;
  3756. begin
  3757.   if FDown and ((FIndex <> -1) or ((FIndex = -1) and not FDefaultImage.Empty))
  3758.   then
  3759.     begin
  3760.       case Kind of
  3761.         rkRound: CurV := X - Y;
  3762.         rkVertical: CurV := -Y;
  3763.         rkHorizontal: CurV := X;
  3764.       end;
  3765.       CalcValue;
  3766.     end;
  3767.   inherited;
  3768. end;
  3769. constructor TspSkinCustomControl.Create;
  3770. begin
  3771.   inherited Create(AOwner);
  3772.   FDefaultWidth := 0;
  3773.   FDefaultHeight := 0;
  3774.   FDefaultFont := TFont.Create;
  3775.   FDefaultFont.OnChange := OnDefaultFontChange;
  3776.   with FDefaultFont do
  3777.   begin
  3778.     Name := 'Arial';
  3779.     Style := [];
  3780.     Height := 14;
  3781.   end;
  3782.   FUseSkinFont := True;
  3783. end;
  3784. destructor TspSkinCustomControl.Destroy;
  3785. begin
  3786.   if FRgn <> 0
  3787.   then
  3788.     begin
  3789.       DeleteObject(FRgn);
  3790.       FRgn := 0;
  3791.     end;
  3792.   FDefaultFont.Free;
  3793.   inherited Destroy;
  3794. end;
  3795. procedure TspSkinCustomControl.SetDefaultWidth;
  3796. begin
  3797.   FDefaultWidth := Value;
  3798.   if (FIndex = -1) and (FDefaultWidth > 0) then Width := FDefaultWidth;
  3799. end;
  3800. procedure TspSkinCustomControl.SetDefaultHeight;
  3801. begin
  3802.   FDefaultHeight := Value;
  3803.   if (FIndex = -1) and (FDefaultHeight > 0) then Height := FDefaultHeight;
  3804. end;
  3805. procedure TspSkinCustomControl.DefaultFontChange;
  3806. begin
  3807. end;
  3808. procedure TspSkinCustomControl.SetDefaultFont;
  3809. begin
  3810.   FDefaultFont.Assign(Value);
  3811.   DefaultFontChange;
  3812. end;
  3813. procedure TspSkinCustomControl.OnDefaultFontChange;
  3814. begin
  3815.   DefaultFontChange;
  3816.   if FIndex = -1 then RePaint;
  3817. end;
  3818. procedure TspSkinCustomControl.CreateControlDefaultImage;
  3819. var
  3820.   R: TRect;
  3821. begin
  3822.   with B.Canvas do
  3823.   begin
  3824.     Brush.Color := clBtnFace;
  3825.     R := ClientRect;
  3826.     FillRect(R);
  3827.   end;
  3828. end;
  3829. procedure TspSkinCustomControl.ChangeSkinData;
  3830. var
  3831.   W, H: Integer;
  3832.   UpDate: Boolean;
  3833. begin
  3834.   GetSkinData;
  3835.   if FUseSkinCursor
  3836.   then
  3837.   if CursorIndex <> -1
  3838.   then
  3839.     Cursor := FSD.StartCursorIndex + CursorIndex
  3840.   else
  3841.     Cursor := crDefault;
  3842.   W := Width;
  3843.   H := Height;
  3844.   if FIndex <> -1
  3845.   then
  3846.     begin
  3847.       CalcSize(W, H);
  3848.       Update := (W <> Width) or (H <> Height);
  3849.       if W <> Width then Width := W;
  3850.       if H <> Height then Height := H;
  3851.     end
  3852.   else
  3853.     begin
  3854.       UpDate := False;
  3855.       if FDefaultWidth > 0 then Width := FDefaultWidth;
  3856.       if FDefaultHeight > 0 then Height := FDefaultHeight;
  3857.     end;
  3858.   if (not UpDate) or (FIndex = -1)
  3859.   then
  3860.     begin
  3861.       SetControlRegion;
  3862.       RePaint;
  3863.     end;
  3864.     
  3865. end;
  3866. procedure TspSkinCustomControl.SetBounds;
  3867. var
  3868.   UpDate: Boolean;
  3869. begin
  3870.   GetSkinData;
  3871.   UpDate := ((Width <> AWidth) or (Height <> AHeight)) and (FIndex <> -1);
  3872.   if UpDate
  3873.   then
  3874.     begin
  3875.       CalcSize(AWidth, AHeight);
  3876.       if ResizeMode = 0 then NewClRect := ClRect;
  3877.     end;
  3878.   inherited;
  3879.   if UpDate
  3880.   then
  3881.     begin
  3882.       SetControlRegion;
  3883.       RePaint;
  3884.     end;
  3885. end;
  3886. procedure TspSkinCustomControl.CalcSize;
  3887. var
  3888.   XO, YO: Integer;
  3889. begin
  3890.   if ResizeMode > 0
  3891.   then
  3892.     begin
  3893.       XO := W - RectWidth(SkinRect);
  3894.       YO := H - RectHeight(SkinRect);
  3895.       NewLTPoint := LTPt;
  3896.       case ResizeMode of
  3897.         1:
  3898.           begin
  3899.             NewRTPoint := Point(RTPt.X + XO, RTPt.Y);
  3900.             NewLBPoint := Point(LBPt.X, LBPt.Y + YO);
  3901.             NewRBPoint := Point(RBPt.X + XO, RBPt.Y + YO);
  3902.             NewClRect := Rect(CLRect.Left, ClRect.Top,
  3903.               CLRect.Right + XO, ClRect.Bottom + YO);
  3904.           end;
  3905.         2:
  3906.           begin
  3907.             H := RectHeight(SkinRect);
  3908.             NewRTPoint := Point(RTPt.X + XO, RTPt.Y );
  3909.             NewClRect := ClRect;
  3910.             Inc(NewClRect.Right, XO);
  3911.           end;
  3912.         3:
  3913.           begin
  3914.             W := RectWidth(SkinRect);
  3915.             NewLBPoint := Point(LBPt.X, LBPt.Y + YO);
  3916.             NewClRect := ClRect;
  3917.             Inc(NewClRect.Bottom, YO);
  3918.           end;
  3919.       end;
  3920.     end
  3921.   else
  3922.     if (FIndex <> -1) and (ResizeMode = 0)
  3923.     then
  3924.       begin
  3925.         W := RectWidth(SkinRect);
  3926.         H := RectHeight(SkinRect);
  3927.         NewClRect := CLRect;
  3928.       end;
  3929. end;
  3930. procedure TspSkinCustomControl.CreateControlSkinImage;
  3931. begin
  3932.   CreateSkinControlImage(B, Picture, SkinRect);
  3933. end;
  3934. procedure TspSkinCustomControl.CreateSkinControlImage;
  3935. begin
  3936.   case ResizeMode of
  3937.     0:
  3938.       begin
  3939.         B.Width := RectWidth(R);
  3940.         B.Height := RectHeight(R);
  3941.         B.Canvas.CopyRect(Rect(0, 0, B.Width, B.Height), SB.Canvas, R);
  3942.       end;
  3943.     1: CreateSkinImage(LTPt, RTPt, LBPt, RBPt, CLRect,
  3944.          NewLtPoint, NewRTPoint, NewLBPoint, NewRBPoint, NewCLRect,
  3945.          B, SB, R, Width, Height, True);
  3946.     2: CreateHSkinImage(LTPt.X, RectWidth(SkinRect) - RTPt.X,
  3947.           B, SB, R, Width, Height);
  3948.     3: CreateVSkinImage(LTPt.Y, RectHeight(SkinRect) - LBPt.Y,
  3949.           B, SB, R, Width, Height);
  3950.   end;
  3951. end;
  3952. function TspSkinCustomControl.GetResizeMode;
  3953. begin
  3954.   if IsNullRect(SkinRect)
  3955.   then
  3956.     Result := -1
  3957.   else   
  3958.   if (RBPt.X <> 0) and (RBPt.Y <> 0)
  3959.   then
  3960.     Result := 1
  3961.   else
  3962.   if (RTPt.X <> 0) or (RTPT.Y <> 0)
  3963.   then
  3964.     Result := 2
  3965.   else
  3966.   if (LBPt.X <> 0) or (LBPt.Y <> 0)
  3967.   then
  3968.     Result := 3
  3969.   else
  3970.     Result := 0;  
  3971. end;
  3972. function TspSkinCustomControl.GetNewRect;
  3973. var
  3974.   XO, YO: Integer;
  3975.   LeftTop, LeftBottom, RightTop, RightBottom: TRect;
  3976. function CorrectResizeRect: TRect;
  3977. var
  3978.   NR: TRect;
  3979. begin
  3980.   NR := R;
  3981.   if PointInRect(LeftTop, R.TopLeft) and
  3982.      PointInRect(RightBottom, R.BottomRight)
  3983.   then
  3984.     begin
  3985.       Inc(NR.Right, XO);
  3986.       Inc(NR.Bottom, YO);
  3987.     end
  3988.   else
  3989.   if PointInRect(LeftTop, R.TopLeft) and
  3990.      PointInRect(RightTop, R.BottomRight)
  3991.   then
  3992.     Inc(NR.Right, XO)
  3993.   else
  3994.     if PointInRect(LeftBottom, R.TopLeft) and
  3995.        PointInRect(RightBottom, R.BottomRight)
  3996.     then
  3997.       begin
  3998.         Inc(NR.Right, XO);
  3999.         OffsetRect(NR, 0, YO);
  4000.       end
  4001.     else
  4002.       if PointInRect(LeftTop, R.TopLeft) and
  4003.          PointInRect(LeftBottom, R.BottomRight)
  4004.       then
  4005.         Inc(NR.Bottom, YO)
  4006.       else
  4007.         if PointInRect(RightTop, R.TopLeft) and
  4008.            PointInRect(RightBottom, R.BottomRight)
  4009.         then
  4010.           begin
  4011.             OffsetRect(NR, XO, 0);
  4012.             Inc(NR.Bottom, YO);
  4013.           end;
  4014.   Result := NR;
  4015. end;
  4016. begin
  4017.   XO := Width - RectWidth(SkinRect);
  4018.   YO := Height - RectHeight(SkinRect);
  4019.   Result := R;
  4020.   case ResizeMode of
  4021.     1:
  4022.       begin
  4023.         LeftTop := Rect(0, 0, LTPt.X, LTPt.Y);
  4024.         LeftBottom := Rect(0, LBPt.Y, LBPt.X, RectHeight(SkinRect));
  4025.         RightTop := Rect(RTPt.X, 0, RectWidth(SkinRect), RTPt.Y);
  4026.         RightBottom := Rect(RBPt.X, RBPt.Y,
  4027.           RectWidth(SkinRect), RectHeight(SkinRect));
  4028.         Result := R;
  4029.         if RectInRect(R, LeftTop)
  4030.         then Result := R
  4031.         else
  4032.         if RectInRect(R, RightTop)
  4033.         then OffsetRect(Result, XO, 0)
  4034.         else
  4035.         if RectInRect(R, LeftBottom)
  4036.         then OffsetRect(Result, 0, YO)
  4037.         else
  4038.         if RectInRect(R, RightBottom)
  4039.         then
  4040.           OffsetRect(Result,  XO, YO)
  4041.         else