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

Delphi控件源码

开发平台:

Delphi

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