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

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************************}
  2. {                                                                   }
  3. {       Almediadev Visual Component Lifbrary                        }
  4. {       BusinessSkinForm                                            }
  5. {       Version 1.98                                                }
  6. {                                                                   }
  7. {       Copyright (c) 2000-2003 Almediadev                          }
  8. {       ALL RIGHTS RESERVED                                         }
  9. {                                                                   }
  10. {       Home:  http://www.almdev.com                                }
  11. {       Support: support@almdev.com                                 }
  12. {                                                                   }
  13. {*******************************************************************}
  14. unit bsSkinBoxCtrls;
  15. {$P+,S-,W-,R-}
  16. {$WARNINGS OFF}
  17. {$HINTS OFF}
  18. interface
  19. uses
  20.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  21.   Menus, ExtCtrls, bsSkinData, StdCtrls, bsSkinCtrls, CommCtrl, ComCtrls, Mask,
  22.   ImgList, bsCalendar;
  23. type
  24.   TbsDrawSkinItemEvent = procedure(Cnvs: TCanvas; Index: Integer;
  25.     ItemWidth, ItemHeight: Integer; TextRect: TRect; State: TOwnerDrawState) of object;
  26.   TbsCBButtonX = record
  27.     R: TRect;
  28.     MouseIn: Boolean;
  29.     Down: Boolean;
  30.   end;
  31.   TbsOnEditCancelMode = procedure(C: TControl) of object;
  32.   TbsCustomEdit = class(TCustomMaskEdit)
  33.   protected
  34.     FOnUp: TNotifyEvent;
  35.     FOnDown: TNotifyEvent;
  36.     FOnKillFocus: TNotifyEvent;
  37.     FOnEditCancelMode: TbsOnEditCancelMode;
  38.     FDown: Boolean;
  39.     FReadOnly: Boolean;
  40.     FEditTransparent: Boolean;
  41.     procedure SetEditTransparent(Value: Boolean);
  42.     procedure WMSETFOCUS(var Message: TMessage); message WM_SETFOCUS;
  43.     procedure WMKILLFOCUS(var Message: TMessage); message WM_KILLFOCUS;
  44.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  45.     procedure CNCtlColorEdit(var Message:TWMCTLCOLOREDIT); message  CN_CTLCOLOREDIT;
  46.     procedure CreateParams(var Params: TCreateParams); override;
  47.     procedure Change; override;
  48.     procedure WMCHAR(var Message:TWMCHAR); message WM_CHAR;
  49.     procedure WMSetText(var Message:TWMSetText); message WM_SETTEXT;
  50.     procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
  51.     procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;
  52.     procedure WMMove(var Message: TMessage); message WM_MOVE;
  53.     procedure WMCut(var Message: TMessage); message WM_Cut;
  54.     procedure WMPaste(var Message: TMessage); message WM_PASTE;
  55.     procedure WMClear(var Message: TMessage); message WM_CLEAR;
  56.     procedure WMUndo(var Message: TMessage); message WM_UNDO;
  57.     procedure WMLButtonDown(var Message: TMessage); message WM_LBUTTONDOWN;
  58.     procedure WMLButtonUp(var Message: TMessage); message WM_LBUTTONUP;
  59.     procedure WMMOUSEMOVE(var Message: TMessage); message WM_MOUSEMOVE;
  60.     procedure WMSetFont(var Message: TWMSetFont); message WM_SETFONT;
  61.     procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
  62.   public
  63.     { Public declarations }
  64.     constructor Create(AOwner: TComponent); override;
  65.     procedure Invalidate; override;
  66.     property ReadOnly read FReadOnly write FReadOnly;
  67.     property EditTransparent: Boolean read FEditTransparent write SetEditTransparent;
  68.     property OnUp: TNotifyEvent read FOnUp write FOnUp;
  69.     property OnDown: TNotifyEvent read FOnDown write FOnDown;
  70.     property OnEditCancelMode: TbsOnEditCancelMode
  71.       read FOnEditCancelMode write FOnEditCancelMode; 
  72.   published
  73.     { Published declarations }
  74.   end;
  75.   TbsSkinNumEdit = class(TbsCustomEdit)
  76.   protected
  77.     FOnUpClick: TNotifyEvent;
  78.     FOnDownClick: TNotifyEvent;
  79.     FEditorEnabled: Boolean;
  80.     function IsValidChar(Key: Char): Boolean;
  81.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  82.     procedure KeyPress(var Key: Char); override;
  83.     procedure WMMOUSEWHEEL(var Message: TMessage); message WM_MOUSEWHEEL;
  84.   public
  85.     Float: Boolean;
  86.     constructor Create(AOwner: TComponent);
  87.     property OnUpClick: TNotifyEvent read FOnUpClick write FOnUpClick;
  88.     property OnDownClick: TNotifyEvent read FOnDownClick write FOnDownClick;
  89.     property EditorEnabled: Boolean read FEditorEnabled write FEditorEnabled default True;
  90.   end;
  91.   TbsSkinCustomEdit = class(TbsCustomEdit)
  92.   protected
  93.     FOnButtonClick: TNotifyEvent;
  94.     FButtonRect: TRect;
  95.     FButtonMode: Boolean;
  96.     FButtonDown: Boolean;
  97.     FButtonActive: Boolean;
  98.     FEditRect: TRect;
  99.     FMouseIn: Boolean;
  100.     FIndex: Integer;
  101.     FSD: TbsSkinData;
  102.     FSkinDataName: String;
  103.     Picture: TBitMap;
  104.     FOnMouseEnter, FOnMouseLeave: TNotifyEvent;
  105.     FDefaultFont: TFont;
  106.     FUseSkinFont: Boolean;
  107.     FDefaultWidth: Integer;
  108.     FDefaultHeight: Integer;
  109.     FAlignment: TAlignment;
  110.     procedure SetAlignment(Value: TAlignment);
  111.     procedure SetDefaultWidth(Value: Integer);
  112.     procedure SetDefaultHeight(Value: Integer);
  113.     procedure OnDefaultFontChange(Sender: TObject);
  114.     procedure SetDefaultFont(Value: TFont);
  115.     procedure CalcRects;
  116.     procedure SetButtonMode(Value: Boolean);
  117.     procedure SetPasswordChar(Value: Char);
  118.     function GetPasswordChar: Char;
  119.     procedure SetSkinData(Value: TbsSkinData); virtual;
  120.     procedure Notification(AComponent: TComponent;
  121.       Operation: TOperation); override;
  122.     procedure GetSkinData;
  123.     procedure CreateParams(var Params: TCreateParams); override;
  124.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  125.     procedure WMNCPAINT(var Message: TMessage); message WM_NCPAINT;
  126.     procedure WMNCLBUTTONDOWN(var Message: TWMNCLBUTTONDOWN); message WM_NCLBUTTONDOWN;
  127.     procedure WMNCLBUTTONDBCLK(var Message: TWMNCLBUTTONDOWN); message WM_NCLBUTTONDBLCLK;
  128.     procedure WMNCLBUTTONUP(var Message: TWMNCLBUTTONUP); message WM_NCLBUTTONUP;
  129.     procedure WMNCMOUSEMOVE(var Message: TWMNCMOUSEMOVE); message WM_NCMOUSEMOVE;
  130.     procedure WMMOUSEMOVE(var Message: TWMNCMOUSEMOVE); message WM_MOUSEMOVE;
  131.     procedure WMNCHITTEST(var Message: TWMNCHITTEST); message WM_NCHITTEST;
  132.     procedure WMSETFOCUS(var Message: TMessage); message WM_SETFOCUS;
  133.     procedure WMKILLFOCUS(var Message: TMessage); message WM_KILLFOCUS;
  134.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  135.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  136.     procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  137.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  138.   public
  139.     //
  140.     LOffset, ROffset: Integer;
  141.     ClRect: TRect;
  142.     SkinRect, ActiveSkinRect: TRect;
  143.     FontName: String;
  144.     FontStyle: TFontStyles;
  145.     FontHeight: Integer;
  146.     FontColor, DisabledFontColor: TColor;
  147.     ActiveFontColor: TColor;
  148.     ButtonRect: TRect;
  149.     ActiveButtonRect: TRect;
  150.     DownButtonRect: TRect;
  151.     //
  152.     procedure DrawSkinEdit(C: TCanvas; ADrawText: Boolean);
  153.     constructor Create(AOwner: TComponent); override;
  154.     destructor Destroy; override;
  155.     procedure ChangeSkinData; virtual;
  156.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  157.     procedure Invalidate; override;
  158.     property BorderStyle;
  159.     //
  160.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  161.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  162.     property DefaultWidth: Integer read FDefaultWidth write SetDefaultWidth;
  163.     property DefaultHeight: Integer read FDefaultHeight write SetDefaultHeight;
  164.     property ButtonMode: Boolean read FButtonMode write SetButtonMode;
  165.     property SkinData: TbsSkinData read FSD write SetSkinData;
  166.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  167.     //
  168.     property EditPasswordChar: Char read GetPasswordChar write SetPasswordChar;
  169.     property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
  170.     property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  171.     property ReadOnly;
  172.     property Align;
  173.     property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
  174.     property Font;
  175.     property Anchors;
  176.     property AutoSelect;
  177.     property BiDiMode;
  178.     property CharCase;
  179.     property Constraints;
  180.     property DragCursor;
  181.     property DragKind;
  182.     property DragMode;
  183.     property Enabled;
  184.     property HideSelection;
  185.     property ImeMode;
  186.     property ImeName;
  187.     property MaxLength;
  188.     property OEMConvert;
  189.     property ParentBiDiMode;
  190.     property ParentColor;
  191.     property ParentCtl3D;
  192.     property ParentFont;
  193.     property ParentShowHint;
  194.     property PopupMenu;
  195.     property ShowHint;
  196.     property TabOrder;
  197.     property TabStop;
  198.     property Text;
  199.     property Visible;
  200.     property OnButtonClick: TNotifyEvent read FOnButtonClick
  201.                                          write FOnButtonClick;
  202.     property OnChange;
  203.     property OnClick;
  204.     property OnDblClick;
  205.     property OnDragDrop;
  206.     property OnDragOver;
  207.     property OnEndDock;
  208.     property OnEndDrag;
  209.     property OnEnter;
  210.     property OnExit;
  211.     property OnKeyDown;
  212.     property OnKeyPress;
  213.     property OnKeyUp;
  214.     property OnMouseDown;
  215.     property OnMouseMove;
  216.     property OnMouseUp;
  217.     property OnStartDock;
  218.     property OnStartDrag;
  219.   end;
  220.   TbsSkinEdit = class(TbsSkinCustomEdit)
  221.   published
  222.     property DefaultFont;
  223.     property UseSkinFont;
  224.     property DefaultWidth;
  225.     property DefaultHeight;
  226.     property ButtonMode;
  227.     property SkinData;
  228.     property SkinDataName;
  229.     property EditPasswordChar;
  230.     property OnMouseEnter;
  231.     property OnMouseLeave;
  232.     property ReadOnly;
  233.     property Align;
  234.     property Alignment;
  235.     property Font;
  236.     property Anchors;
  237.     property AutoSelect;
  238.     property BiDiMode;
  239.     property CharCase;
  240.     property Constraints;
  241.     property DragCursor;
  242.     property DragKind;
  243.     property DragMode;
  244.     property Enabled;
  245.     property HideSelection;
  246.     property ImeMode;
  247.     property ImeName;
  248.     property MaxLength;
  249.     property OEMConvert;
  250.     property ParentBiDiMode;
  251.     property ParentColor;
  252.     property ParentCtl3D;
  253.     property ParentFont;
  254.     property ParentShowHint;
  255.     property PopupMenu;
  256.     property ShowHint;
  257.     property TabOrder;
  258.     property TabStop;
  259.     property Text;
  260.     property Visible;
  261.     property OnButtonClick;
  262.     property OnChange;
  263.     property OnClick;
  264.     property OnDblClick;
  265.     property OnDragDrop;
  266.     property OnDragOver;
  267.     property OnEndDock;
  268.     property OnEndDrag;
  269.     property OnEnter;
  270.     property OnExit;
  271.     property OnKeyDown;
  272.     property OnKeyPress;
  273.     property OnKeyUp;
  274.     property OnMouseDown;
  275.     property OnMouseMove;
  276.     property OnMouseUp;
  277.     property OnStartDock;
  278.     property OnStartDrag;
  279.   end;
  280.   TbsSkinMemo = class(TMemo)
  281.   protected
  282.     FBitMapBG: Boolean;
  283.     FReadOnly: Boolean;
  284.     FMouseIn: Boolean;
  285.     FIndex: Integer;
  286.     FSD: TbsSkinData;
  287.     FSkinDataName: String;
  288.     Picture: TBitMap;
  289.     FOnMouseEnter, FOnMouseLeave: TNotifyEvent;
  290.     FVScrollBar: TbsSkinScrollBar;
  291.     FDown: Boolean;
  292.     FDefaultFont: TFont;
  293.     FUseSkinFont: Boolean;
  294.     procedure OnDefaultFontChange(Sender: TObject);
  295.     procedure SetDefaultFont(Value: TFont);
  296.     procedure SkinNCPaint(C: TCanvas);
  297.     procedure SkinFramePaint(C: TCanvas);
  298.     procedure SetBitMapBG(Value: Boolean);
  299.     procedure UpDateScrollRange;
  300.     procedure SetVScrollBar(Value: TbsSkinScrollBar);
  301.     procedure OnVScrollBarChange(Sender: TObject);
  302.     procedure SetSkinData(Value: TbsSkinData);
  303.     procedure Notification(AComponent: TComponent;
  304.       Operation: TOperation); override;
  305.     procedure Change; override; 
  306.     procedure GetSkinData;
  307.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  308.     procedure CNCtlColorEdit(var Message:TWMCTLCOLOREDIT); message  CN_CTLCOLOREDIT;
  309.     procedure WMCHAR(var Message:TMessage); message WM_CHAR;
  310.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  311.     procedure CreateParams(var Params: TCreateParams); override;
  312.     procedure WMNCPAINT(var Message: TWMNCPAINT); message WM_NCPAINT;
  313.     procedure WMSETFOCUS(var Message: TMessage); message WM_SETFOCUS;
  314.     procedure WMKILLFOCUS(var Message: TMessage); message WM_KILLFOCUS;
  315.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  316.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  317.     procedure WMMove(var Msg: TWMMove); message WM_MOVE;
  318.     procedure WMSize(var Msg: TWMSize); message WM_SIZE;
  319.     procedure WMLBUTTONDOWN(var Message: TMessage); message WM_LBUTTONDOWN;
  320.     procedure WMLBUTTONUP(var Message: TMessage); message WM_LBUTTONUP;
  321.     procedure WMMOUSEMOVE(var Message: TMessage); message WM_MOUSEMOVE;
  322.     procedure WMMOUSEWHEEL(var Message: TMessage); message WM_MOUSEWHEEL;
  323.     procedure WMSetText(var Message:TWMSetText); message WM_SETTEXT;
  324.     procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
  325.     procedure WMCut(var Message: TMessage); message WM_Cut;
  326.     procedure WMPaste(var Message: TMessage); message WM_PASTE;
  327.     procedure WMClear(var Message: TMessage); message WM_CLEAR;
  328.     procedure WMUndo(var Message: TMessage); message WM_UNDO;
  329.     procedure WMVSCROLL(var Message: TWMVScroll); message WM_VSCROLL;
  330.     procedure WMHSCROLL(var Message: TWMHScroll); message WM_HSCROLL;
  331.     procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  332.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  333.   public
  334.     LTPoint, RTPoint, LBPoint, RBPoint: TPoint;
  335.     ClRect: TRect;
  336.     SkinRect, ActiveSkinRect: TRect;
  337.     FontName: String;
  338.     FontStyle: TFontStyles;
  339.     FontHeight: Integer;
  340.     FontColor: TColor;
  341.     ActiveFontColor: TColor;
  342.     BGColor: TColor;
  343.     ActiveBGColor: TColor;
  344.     //
  345.     constructor Create(AOwner: TComponent); override;
  346.     destructor Destroy; override;
  347.     procedure ChangeSkinData;
  348.     procedure Invalidate; override;
  349.     property BorderStyle;
  350.     property ScrollBars;
  351.   published
  352.     //
  353.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  354.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  355.     property BitMapBG: Boolean read FBitMapBG write SetBitMapBG;
  356.     property VScrollBar: TbsSkinScrollBar read FVScrollBar
  357.                                           write SetVScrollBar;
  358.     property SkinData: TbsSkinData read FSD write SetSkinData;
  359.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  360.     //
  361.     property ReadOnly read FReadOnly write FReadOnly;
  362.     property Align;
  363.     property Alignment;
  364.     property Anchors;
  365.     property BiDiMode;
  366.     property Constraints;
  367.     property DragCursor;
  368.     property DragKind;
  369.     property DragMode;
  370.     property Enabled;
  371.     property Font;
  372.     property HideSelection;
  373.     property ImeMode;
  374.     property ImeName;
  375.     property Lines;
  376.     property MaxLength;
  377.     property OEMConvert;
  378.     property ParentBiDiMode;
  379.     property ParentColor;
  380.     property ParentCtl3D;
  381.     property ParentFont;
  382.     property ParentShowHint;
  383.     property PopupMenu;
  384.     property ShowHint;
  385.     property TabOrder;
  386.     property TabStop;
  387.     property Visible;
  388.     property WantReturns;
  389.     property WantTabs;
  390.     property WordWrap;
  391.     property OnChange;
  392.     property OnClick;
  393.     property OnDblClick;
  394.     property OnDragDrop;
  395.     property OnDragOver;
  396.     property OnEndDock;
  397.     property OnEndDrag;
  398.     property OnEnter;
  399.     property OnExit;
  400.     property OnKeyDown;
  401.     property OnKeyPress;
  402.     property OnKeyUp;
  403.     property OnMouseDown;
  404.     property OnMouseMove;
  405.     property OnMouseUp;
  406.     property OnStartDock;
  407.     property OnStartDrag;
  408.     property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
  409.     property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  410.   end;
  411.   TbsSkinMemo2 = class(TMemo)
  412.   protected
  413.     FMouseIn: Boolean;
  414.     FIndex: Integer;
  415.     FSD: TbsSkinData;
  416.     FSkinDataName: String;
  417.     FOnMouseEnter, FOnMouseLeave: TNotifyEvent;
  418.     FVScrollBar: TbsSkinScrollBar;
  419.     FHScrollBar: TbsSkinScrollBar;
  420.     FDown: Boolean;
  421.     FDefaultFont: TFont;
  422.     FUseSkinFont: Boolean;
  423.     procedure OnDefaultFontChange(Sender: TObject);
  424.     procedure SetDefaultFont(Value: TFont);
  425.     procedure UpDateScrollRange;
  426.     procedure SetVScrollBar(Value: TbsSkinScrollBar);
  427.     procedure SetHScrollBar(Value: TbsSkinScrollBar);
  428.     procedure OnVScrollBarChange(Sender: TObject);
  429.     procedure OnHScrollBarChange(Sender: TObject);
  430.     procedure SetSkinData(Value: TbsSkinData);
  431.     procedure Notification(AComponent: TComponent;
  432.       Operation: TOperation); override;
  433.     procedure Change; override;
  434.     procedure GetSkinData;
  435.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  436.     procedure CNCtlColorEdit(var Message:TWMCTLCOLOREDIT); message  CN_CTLCOLOREDIT;
  437.     procedure WMCHAR(var Message:TMessage); message WM_CHAR;
  438.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  439.     procedure CreateParams(var Params: TCreateParams); override;
  440.     procedure WMSETFOCUS(var Message: TMessage); message WM_SETFOCUS;
  441.     procedure WMKILLFOCUS(var Message: TMessage); message WM_KILLFOCUS;
  442.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  443.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  444.     procedure WMMove(var Msg: TWMMove); message WM_MOVE;
  445.     procedure WMSize(var Msg: TWMSize); message WM_SIZE;
  446.     procedure WMLBUTTONDOWN(var Message: TMessage); message WM_LBUTTONDOWN;
  447.     procedure WMLBUTTONUP(var Message: TMessage); message WM_LBUTTONUP;
  448.     procedure WMMOUSEMOVE(var Message: TMessage); message WM_MOUSEMOVE;
  449.     procedure WMMOUSEWHEEL(var Message: TMessage); message WM_MOUSEWHEEL;
  450.     procedure WMSetText(var Message:TWMSetText); message WM_SETTEXT;
  451.     procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
  452.     procedure WMCut(var Message: TMessage); message WM_Cut;
  453.     procedure WMPaste(var Message: TMessage); message WM_PASTE;
  454.     procedure WMClear(var Message: TMessage); message WM_CLEAR;
  455.     procedure WMUndo(var Message: TMessage); message WM_UNDO;
  456.     procedure WMVSCROLL(var Message: TWMVScroll); message WM_VSCROLL;
  457.     procedure WMHSCROLL(var Message: TWMHScroll); message WM_HSCROLL;
  458.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  459.   public
  460.     FontName: String;
  461.     FontStyle: TFontStyles;
  462.     FontHeight: Integer;
  463.     FontColor: TColor;
  464.     ActiveFontColor: TColor;
  465.     BGColor: TColor;
  466.     ActiveBGColor: TColor;
  467.     //
  468.     constructor Create(AOwner: TComponent); override;
  469.     destructor Destroy; override;
  470.     procedure ChangeSkinData;
  471.     procedure Invalidate; override;
  472.     property BorderStyle;
  473.     property ScrollBars;
  474.   published
  475.     //
  476.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  477.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  478.     property VScrollBar: TbsSkinScrollBar read FVScrollBar
  479.                                           write SetVScrollBar;
  480.     property HScrollBar: TbsSkinScrollBar read FHScrollBar
  481.                                           write SetHScrollBar;
  482.     property SkinData: TbsSkinData read FSD write SetSkinData;
  483.     property SkinDataName: String read FSkinDataName write FSkinDataName;
  484.     //
  485.     property ReadOnly;
  486.     property Align;
  487.     property Alignment;
  488.     property Anchors;
  489.     property BiDiMode;
  490.     property Constraints;
  491.     property DragCursor;
  492.     property DragKind;
  493.     property DragMode;
  494.     property Enabled;
  495.     property Font;
  496.     property HideSelection;
  497.     property ImeMode;
  498.     property ImeName;
  499.     property Lines;
  500.     property MaxLength;
  501.     property OEMConvert;
  502.     property ParentBiDiMode;
  503.     property ParentColor;
  504.     property ParentCtl3D;
  505.     property ParentFont;
  506.     property ParentShowHint;
  507.     property PopupMenu;
  508.     property ShowHint;
  509.     property TabOrder;
  510.     property TabStop;
  511.     property Visible;
  512.     property WantReturns;
  513.     property WantTabs;
  514.     property WordWrap;
  515.     property OnChange;
  516.     property OnClick;
  517.     property OnDblClick;
  518.     property OnDragDrop;
  519.     property OnDragOver;
  520.     property OnEndDock;
  521.     property OnEndDrag;
  522.     property OnEnter;
  523.     property OnExit;
  524.     property OnKeyDown;
  525.     property OnKeyPress;
  526.     property OnKeyUp;
  527.     property OnMouseDown;
  528.     property OnMouseMove;
  529.     property OnMouseUp;
  530.     property OnStartDock;
  531.     property OnStartDrag;
  532.     property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
  533.     property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  534.   end;
  535.   TbsSkinCustomListBox = class;
  536.   TbsListBox = class(TListBox)
  537.   protected
  538.     FHorizontalExtentValue: Integer;
  539.     function GetState(AItemID: Integer): TOwnerDrawState;
  540.     procedure PaintBGWH(Cnvs: TCanvas; AW, AH, AX, AY: Integer);
  541.     procedure PaintBG(DC: HDC);
  542.     procedure PaintList(DC: HDC);
  543.     procedure PaintColumnsList(DC: HDC);
  544.     procedure CreateParams(var Params: TCreateParams); override;
  545.     procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
  546.     procedure WndProc(var Message: TMessage); override;
  547.     procedure DrawDefaultItem(Cnvs: TCanvas; itemID: Integer; rcItem: TRect;
  548.                            State: TOwnerDrawState);
  549.     procedure DrawSkinItem(Cnvs: TCanvas; itemID: Integer; rcItem: TRect;
  550.                            State: TOwnerDrawState);
  551.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  552.     procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
  553.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  554.     procedure PaintWindow(DC: HDC); override;
  555.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  556.       X, Y: Integer); override;
  557.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  558.       X, Y: Integer); override;
  559.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  560.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  561.     procedure KeyPress(var Key: Char); override;
  562.     procedure Click; override;
  563.     procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
  564.     procedure CMExit(var Message: TCMGotFocus); message CM_EXIT;
  565.     procedure CreateWnd; override;
  566.   public
  567.     SkinListBox: TbsSkinCustomListBox;
  568.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  569.     property HorizontalExtentValue: Integer
  570.       read FHorizontalExtentValue
  571.       write FHorizontalExtentValue;
  572.     constructor Create(AOwner: TComponent); override;
  573.     destructor Destroy; override;
  574.   end;
  575.   TbsSkinCustomListBox = class(TbsSkinCustomControl)
  576.   protected
  577.     //
  578.     FHorizontalExtent: Boolean;
  579.     FStopUpDateHScrollBar: Boolean;
  580.     //
  581.     FRowCount: Integer;
  582.     FGlyph: TBitMap;
  583.     FNumGlyphs: TbsSkinPanelNumGlyphs;
  584.     FSpacing: Integer;
  585.     FImages: TCustomImageList;
  586.     FImageIndex: Integer;
  587.     FOnUpButtonClick, FOnDownButtonClick, FOnCheckButtonClick: TNotifyEvent;
  588.     FDefaultItemHeight: Integer;
  589.     FDefaultCaptionHeight: Integer;
  590.     FDefaultCaptionFont: TFont;
  591.     FOnDrawItem: TbsDrawSkinItemEvent;
  592.     NewClRect: TRect;
  593.     ListRect: TRect;
  594.     FCaptionMode: Boolean;
  595.     FAlignment: TAlignment;
  596.     Buttons: array[0..2] of TbsCBButtonX;
  597.     OldActiveButton, ActiveButton, CaptureButton: Integer;
  598.     NewCaptionRect: TRect;
  599.     FOnListBoxClick: TNotifyEvent;
  600.     FOnListBoxDblClick: TNotifyEvent;
  601.     FOnListBoxMouseDown: TMouseEvent;
  602.     FOnListBoxMouseMove: TMouseMoveEvent;
  603.     FOnListBoxMouseUp: TMouseEvent;
  604.     FOnListBoxKeyDown: TKeyEvent;
  605.     FOnListBoxKeyPress: TKeyPressEvent;
  606.     FOnListBoxKeyUp: TKeyEvent;
  607.     TimerMode: Integer;
  608.     WaitMode: Boolean;
  609.     function GetFullItemWidth(Index: Integer; ACnvs: TCanvas): Integer; virtual;
  610.     procedure SetHorizontalExtent(Value: Boolean);
  611.     function  GetColumns: Integer;
  612.     procedure SetColumns(Value: Integer);
  613.     procedure SetRowCount(Value: Integer);
  614.     procedure SetImages(Value: TCustomImageList);
  615.     procedure SetImageIndex(Value: Integer);
  616.     procedure SetGlyph(Value: TBitMap);
  617.     procedure SetNumGlyphs(Value: TbsSkinPanelNumGlyphs);
  618.     procedure SetSpacing(Value: Integer);
  619.     procedure StartTimer;
  620.     procedure StopTimer;
  621.     procedure ButtonDown(I: Integer; X, Y: Integer);
  622.     procedure ButtonUp(I: Integer; X, Y: Integer);
  623.     procedure ButtonEnter(I: Integer);
  624.     procedure ButtonLeave(I: Integer);
  625.     procedure DrawButton(Cnvs: TCanvas; i: Integer);
  626.     procedure TestActive(X, Y: Integer);
  627.     //
  628.     procedure ListBoxMouseDown(Button: TMouseButton; Shift: TShiftState;
  629.                                X, Y: Integer); virtual;
  630.     procedure ListBoxMouseMove(Shift: TShiftState; X, Y: Integer); virtual;
  631.     procedure ListBoxMouseUp(Button: TMouseButton; Shift: TShiftState;
  632.                              X, Y: Integer); virtual;
  633.     procedure ListBoxClick; virtual;
  634.     procedure ListBoxDblClick; virtual;
  635.     procedure ListBoxKeyDown(var Key: Word; Shift: TShiftState); virtual;
  636.     procedure ListBoxKeyUp(var Key: Word; Shift: TShiftState); virtual;
  637.     procedure ListBoxKeyPress(var Key: Char); virtual;
  638.     procedure ListBoxEnter; virtual;
  639.     procedure ListBoxExit; virtual;
  640.     //
  641.     procedure ShowScrollBar;
  642.     procedure HideScrollBar;
  643.     procedure ShowHScrollBar;
  644.     procedure HideHScrollBar;
  645.     procedure GetSkinData; override;
  646.     procedure CalcRects;
  647.     procedure SBChange(Sender: TObject);
  648.     procedure HSBChange(Sender: TObject);
  649.     procedure CreateParams(var Params: TCreateParams); override;
  650.     procedure WMSIZE(var Message: TWMSIZE); message WM_SIZE;
  651.     procedure WMTimer(var Message: TWMTimer); message WM_Timer;
  652.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  653.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  654.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  655.     //
  656.     procedure DefaultFontChange; override;
  657.     procedure OnDefaultCaptionFontChange(Sender: TObject);
  658.     procedure SetDefaultCaptionHeight(Value: Integer);
  659.     procedure SetDefaultCaptionFont(Value: TFont);
  660.     procedure SetDefaultItemHeight(Value: Integer);
  661.     procedure SetCaptionMode(Value: Boolean);
  662.     procedure SetAlignment(Value: TAlignment);
  663.     procedure SetItems(Value: TStrings);
  664.     function GetItems: TStrings;
  665.     function GetItemIndex: Integer;
  666.     procedure SetItemIndex(Value: Integer);
  667.     function GetMultiSelect: Boolean;
  668.     procedure SetMultiSelect(Value: Boolean);
  669.     function GetListBoxFont: TFont;
  670.     procedure SetListBoxFont(Value: TFont);
  671.     function GetListBoxTabOrder: TTabOrder;
  672.     procedure SetListBoxTabOrder(Value: TTabOrder);
  673.     function GetListBoxTabStop: Boolean;
  674.     procedure SetListBoxTabStop(Value: Boolean);
  675.     function GetListBoxDragMode: TDragMode;
  676.     procedure SetListBoxDragMode(Value: TDragMode);
  677.     function GetListBoxDragKind: TDragKind;
  678.     procedure SetListBoxDragKind(Value: TDragKind);
  679.     function GetListBoxDragCursor: TCursor;
  680.     procedure SetListBoxDragCursor(Value: TCursor);
  681.     //
  682.     function GetCanvas: TCanvas;
  683.     function GetExtandedSelect: Boolean;
  684.     procedure SetExtandedSelect(Value: Boolean);
  685.     function GetSelCount: Integer;
  686.     function GetSelected(Index: Integer): Boolean;
  687.     procedure SetSelected(Index: Integer; Value: Boolean);
  688.     function GetSorted: Boolean;
  689.     procedure SetSorted(Value: Boolean);
  690.     function GetTopIndex: Integer;
  691.     procedure SetTopIndex(Value: Integer);
  692.     function GetListBoxPopupMenu: TPopupMenu;
  693.     procedure SetListBoxPopupMenu(Value: TPopupMenu);
  694.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  695.       X, Y: Integer); override;
  696.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  697.       X, Y: Integer); override;
  698.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  699.     procedure CreateControlDefaultImage(B: TBitMap); override;
  700.     procedure CreateControlSkinImage(B: TBitMap); override;
  701.     procedure ListBoxWProc(var Message: TMessage; var Handled: Boolean); virtual;
  702.     procedure ListBoxCreateWnd; virtual;
  703.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  704.   public
  705.     ScrollBar: TbsSkinScrollBar;
  706.     HScrollBar: TbsSkinScrollBar;
  707.     ListBox: TbsListBox;
  708.     FontName: String;
  709.     FontStyle: TFontStyles;
  710.     FontHeight: Integer;
  711.     SItemRect, ActiveItemRect, FocusItemRect: TRect;
  712.     ItemLeftOffset, ItemRightOffset: Integer;
  713.     ItemTextRect: TRect;
  714.     FontColor, ActiveFontColor, FocusFontColor: TColor;
  715.     CaptionRect: TRect;
  716.     CaptionFontName: String;
  717.     CaptionFontStyle: TFontStyles;
  718.     CaptionFontHeight: Integer;
  719.     CaptionFontColor: TColor;
  720.     UpButtonRect, ActiveUpButtonRect, DownUpButtonRect: TRect;
  721.     DownButtonRect, ActiveDownButtonRect, DownDownButtonRect: TRect;
  722.     CheckButtonRect, ActiveCheckButtonRect, DownCheckButtonRect: TRect;
  723.     VScrollBarName, HScrollBarName, BothScrollBarName: String;
  724.     constructor Create(AOwner: TComponent); override;
  725.     destructor Destroy; override;
  726.     procedure ChangeSkinData; override;
  727.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  728.     procedure UpDateScrollBar;
  729.     function CalcHeight(AItemsCount: Integer): Integer;
  730.     //
  731.     procedure Clear;
  732.     function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer;
  733.     function ItemRect(Item: Integer): TRect;
  734.     //
  735.     property Columns: Integer read GetColumns write SetColumns;
  736.     property Selected[Index: Integer]: Boolean read GetSelected write SetSelected;
  737.     property ListBoxCanvas: TCanvas read GetCanvas;
  738.     property SelCount: Integer read GetSelCount;
  739.     property TopIndex: Integer read GetTopIndex write SetTopIndex;
  740.     //
  741.     property DefaultCaptionHeight: Integer
  742.       read FDefaultCaptionHeight  write SetDefaultCaptionHeight;
  743.     property DefaultCaptionFont: TFont
  744.      read FDefaultCaptionFont  write SetDefaultCaptionFont;
  745.     property CaptionMode: Boolean read FCaptionMode
  746.                                          write SetCaptionMode;
  747.     property Alignment: TAlignment read FAlignment write SetAlignment
  748.       default taLeftJustify;
  749.     property DefaultItemHeight: Integer read FDefaultItemHeight
  750.                                         write SetDefaultItemHeight;
  751.     property Items: TStrings read GetItems write SetItems;
  752.     property ItemIndex: Integer read GetItemIndex write SetItemIndex;
  753.     property MultiSelect: Boolean read GetMultiSelect write SetMultiSelect;
  754.     property ListBoxFont: TFont read GetListBoxFont write SetListBoxFont;
  755.     property ListBoxTabOrder: TTabOrder read GetListBoxTabOrder write SetListBoxTabOrder;
  756.     property ListBoxTabStop: Boolean read GetListBoxTabStop write SetListBoxTabStop;
  757.     property ExtandedSelect: Boolean read GetExtandedSelect write SetExtandedSelect;
  758.     property Sorted: boolean read GetSorted write SetSorted;
  759.     property ListBoxPopupMenu: TPopupMenu read GetListBoxPopupMenu write SetListBoxPopupMenu;
  760.     property  HorizontalExtent: Boolean
  761.       read FHorizontalExtent
  762.       write SetHorizontalExtent;
  763.     property ListBoxDragMode: TDragMode read GetListBoxDragMode write SetListBoxDragMode;
  764.     property ListBoxDragKind: TDragKind read GetListBoxDragKind write SetListBoxDragKind;
  765.     property ListBoxDragCursor: TCursor read GetListBoxDragCursor write SetListBoxDragCursor;  
  766.     //
  767.     property Caption;
  768.     property Font;
  769.     property Align;
  770.     property DockSite;
  771.     property DragCursor;
  772.     property DragKind;
  773.     property DragMode;
  774.     property Enabled;
  775.     property ParentShowHint;
  776.     property PopupMenu;
  777.     property ShowHint;
  778.     property TabOrder;
  779.     property TabStop;
  780.     property Visible;
  781.     property RowCount: Integer read FRowCount write SetRowCount;
  782.     property Images: TCustomImageList read FImages write SetImages;
  783.     property ImageIndex: Integer read FImageIndex write SetImageIndex;
  784.     property Glyph: TBitMap read FGlyph write SetGlyph;
  785.     property NumGlyphs: TbsSkinPanelNumGlyphs read FNumGlyphs write SetNumGlyphs;
  786.     property Spacing: Integer read FSpacing write SetSpacing;
  787.     property OnClick;
  788.     property OnUpButtonClick: TNotifyEvent read FOnUpButtonClick
  789.                                            write FOnUpButtonClick;
  790.     property OnDownButtonClick: TNotifyEvent read FOnDownButtonClick
  791.                                            write FOnDownButtonClick;
  792.     property OnCheckButtonClick: TNotifyEvent read FOnCheckButtonClick
  793.                                            write FOnCheckButtonClick;
  794.     property OnCanResize;
  795.     property OnConstrainedResize;
  796.     property OnDockDrop;
  797.     property OnDockOver;
  798.     property OnDblClick;
  799.     property OnDragDrop;
  800.     property OnDragOver;
  801.     property OnEndDock;
  802.     property OnEndDrag;
  803.     property OnEnter;
  804.     property OnExit;
  805.     property OnGetSiteInfo;
  806.     property OnMouseDown;
  807.     property OnMouseMove;
  808.     property OnMouseUp;
  809.     property OnResize;
  810.     property OnStartDock;
  811.     property OnStartDrag;
  812.     property OnUnDock;
  813.     property OnListBoxClick: TNotifyEvent read FOnListBoxClick write FOnListBoxClick;
  814.     property OnListBoxDblClick: TNotifyEvent read FOnListBoxDblClick write FOnListBoxDblClick;
  815.     property OnListBoxMouseDown: TMouseEvent read FOnListBoxMouseDown write
  816.      FOnListBoxMouseDown;
  817.     property OnListBoxMouseMove: TMouseMoveEvent read FOnListBoxMouseMove
  818.       write FOnListBoxMouseMove;
  819.     property OnListBoxMouseUp: TMouseEvent read FOnListBoxMouseUp
  820.       write FOnListBoxMouseUp;
  821.     property OnListBoxKeyDown: TKeyEvent read FOnListBoxKeyDown write FOnListBoxKeyDown;
  822.     property OnListBoxKeyPress: TKeyPressEvent read FOnListBoxKeyPress write FOnListBoxKeyPress;
  823.     property OnListBoxKeyUp: TKeyEvent read FOnListBoxKeyUp write FOnListBoxKeyUp;
  824.     property OnDrawItem: TbsDrawSkinItemEvent read FOnDrawItem write FOnDrawItem;
  825.   end;
  826.   TbsSkinListBox = class(TbsSkinCustomListBox)
  827.   published
  828.     property HorizontalExtent;
  829.     property Columns;
  830.     property RowCount;
  831.     property Images;
  832.     property ImageIndex;
  833.     property Glyph;
  834.     property NumGlyphs;
  835.     property Spacing;
  836.     property CaptionMode;
  837.     property DefaultCaptionHeight;
  838.     property DefaultCaptionFont;
  839.     property Alignment;
  840.     property DefaultItemHeight;
  841.     property Items;
  842.     property ItemIndex;
  843.     property MultiSelect;
  844.     property ListBoxFont;
  845.     property ListBoxTabOrder;
  846.     property ListBoxTabStop;
  847.     property ListBoxDragMode;
  848.     property ListBoxDragKind;
  849.     property ListBoxDragCursor;
  850.     property ExtandedSelect;
  851.     property Sorted;
  852.     property ListBoxPopupMenu;
  853.     //
  854.     property Caption;
  855.     property Font;
  856.     property Align;
  857.     property DockSite;
  858.     property DragCursor;
  859.     property DragKind;
  860.     property DragMode;
  861.     property Enabled;
  862.     property ParentShowHint;
  863.     property PopupMenu;
  864.     property ShowHint;
  865.     property TabOrder;
  866.     property TabStop;
  867.     property OnClick;
  868.     property Visible;
  869.     property OnUpButtonClick;
  870.     property OnDownButtonClick;
  871.     property OnCheckButtonClick;
  872.     property OnCanResize;
  873.     property OnConstrainedResize;
  874.     property OnDockDrop;
  875.     property OnDockOver;
  876.     property OnDblClick;
  877.     property OnDragDrop;
  878.     property OnDragOver;
  879.     property OnEndDock;
  880.     property OnEndDrag;
  881.     property OnEnter;
  882.     property OnExit;
  883.     property OnGetSiteInfo;
  884.     property OnMouseDown;
  885.     property OnMouseMove;
  886.     property OnMouseUp;
  887.     property OnResize;
  888.     property OnStartDock;
  889.     property OnStartDrag;
  890.     property OnUnDock;
  891.     property OnListBoxClick;
  892.     property OnListBoxDblClick;
  893.     property OnListBoxMouseDown;
  894.     property OnListBoxMouseMove;
  895.     property OnListBoxMouseUp;
  896.     property OnListBoxKeyDown;
  897.     property OnListBoxKeyPress;
  898.     property OnListBoxKeyUp;
  899.     property OnDrawItem;
  900.   end;
  901.   TbsSkinScrollBox = class(TbsSkinCustomControl)
  902.   protected
  903.     FInCheckScrollBars: Boolean;
  904.     FDown: Boolean;
  905.     FVScrollBar: TbsSkinScrollBar;
  906.     FHScrollBar: TbsSkinScrollBar;
  907.     FOldVScrollBarPos: Integer;
  908.     FOldHScrollBarPos: Integer;
  909.     FVSizeOffset: Integer;
  910.     FHSizeOffset: Integer;
  911.     FBorderStyle: TbsSkinBorderStyle;
  912.     procedure SetBorderStyle(Value: TbsSkinBorderStyle);
  913.     procedure SetVScrollBar(Value: TbsSkinScrollBar);
  914.     procedure SetHScrollBar(Value: TbsSkinScrollBar);
  915.     procedure VScrollControls(AOffset: Integer);
  916.     procedure HScrollControls(AOffset: Integer);
  917.     procedure OnHScrollBarChange(Sender: TObject);
  918.     procedure OnVScrollBarChange(Sender: TObject);
  919.     procedure OnHScrollBarLastChange(Sender: TObject);
  920.     procedure OnVScrollBarLastChange(Sender: TObject);
  921.     procedure Notification(AComponent: TComponent;
  922.      Operation: TOperation); override;
  923.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  924.     procedure WMNCPAINT(var Message: TWMNCPAINT); message WM_NCPAINT;
  925.     procedure PaintFrame(C: TCanvas);
  926.     procedure WMSize(var Msg: TWMSize); message WM_SIZE;
  927.     procedure CreateParams(var Params: TCreateParams); override;
  928.     procedure GetSkinData; override;
  929.     procedure CreateControlDefaultImage(B: TBitMap); override;
  930.     procedure ChangeSkinData; override;
  931.     procedure AdjustClientRect(var Rect: TRect); override;
  932.     procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
  933.   public
  934.     BGPictureIndex: Integer;
  935.     procedure HScroll(APosition: Integer);
  936.     procedure VScroll(APosition: Integer);
  937.     constructor Create(AOwner: TComponent); override;
  938.     destructor Destroy; override;
  939.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  940.     procedure Paint; override;
  941.     procedure GetHRange;
  942.     procedure GetVRange;
  943.     procedure UpDateScrollRange; 
  944.   published
  945.     property HScrollBar: TbsSkinScrollBar read FHScrollBar
  946.                                           write SetHScrollBar;
  947.     property VScrollBar: TbsSkinScrollBar read FVScrollBar
  948.                                           write SetVScrollBar;
  949.     property BorderStyle: TbsSkinBorderStyle
  950.       read FBorderStyle write SetBorderStyle;
  951.     property Align;
  952.     property DockSite;
  953.     property DragCursor;
  954.     property DragKind;
  955.     property DragMode;
  956.     property Enabled;
  957.     property ParentShowHint;
  958.     property PopupMenu;
  959.     property ShowHint;
  960.     property TabOrder;
  961.     property TabStop;
  962.     property Visible;
  963.     property OnCanResize;
  964.     property OnClick;
  965.     property OnConstrainedResize;
  966.     property OnDockDrop;
  967.     property OnDockOver;
  968.     property OnDblClick;
  969.     property OnDragDrop;
  970.     property OnDragOver;
  971.     property OnEndDock;
  972.     property OnEndDrag;
  973.     property OnEnter;
  974.     property OnExit;
  975.     property OnGetSiteInfo;
  976.     property OnMouseDown;
  977.     property OnMouseMove;
  978.     property OnMouseUp;
  979.     property OnResize;
  980.     property OnStartDock;
  981.     property OnStartDrag;
  982.     property OnUnDock;
  983.   end;
  984.   TCloseUpEvent = procedure (Sender: TObject; Accept: Boolean) of object;
  985.   TPopupAlign = (epaRight, epaLeft);
  986.   TbsCBItem = record
  987.     R: TRect;
  988.     State: TOwnerDrawState;
  989.   end;
  990.   TbsSkinCustomComboBoxStyle = (bscbEditStyle, bscbFixedStyle);
  991.   TbsPopupListBox = class(TbsSkinListBox)
  992.   private
  993.     FOldAlphaBlend: Boolean;
  994.     FOldAlphaBlendValue: Byte;
  995.     procedure WMMouseActivate(var Message: TMessage); message WM_MOUSEACTIVATE;
  996.   protected
  997.     procedure CreateParams(var Params: TCreateParams); override;
  998.   public
  999.     constructor Create(AOwner: TComponent); override;
  1000.     procedure Hide;
  1001.     procedure Show(Origin: TPoint);
  1002.   end;
  1003.   TbsSkinCustomComboBox = class(TbsSkinCustomControl)
  1004.   protected
  1005.     FAlphaBlend: Boolean;
  1006.     FAlphaBlendAnimation: Boolean;
  1007.     FAlphaBlendValue: Byte;
  1008.     
  1009.     FStyle: TbsSkinCustomComboBoxStyle;
  1010.     FOnChange: TNotifyEvent;
  1011.     FOnClick: TNotifyEvent;
  1012.     FOnCloseUp: TNotifyEvent;
  1013.     FOnListBoxDrawItem: TbsDrawSkinItemEvent;
  1014.     FOnComboBoxDrawItem: TbsDrawSkinItemEvent;
  1015.     FMouseIn: Boolean;
  1016.     FOldItemIndex: Integer;
  1017.     FDropDownCount: Integer;
  1018.     FLBDown: Boolean;
  1019.     FListBoxWindowProc: TWndMethod;
  1020.     FEditWindowProc: TWndMethod;
  1021.     //
  1022.     FListBox: TbsPopupListBox;
  1023.     //
  1024.     CBItem: TbsCBItem;
  1025.     Button: TbsCBButtonX;
  1026.     FEdit: TbsCustomEdit;
  1027.     FromEdit: Boolean;
  1028.     function GetHorizontalExtent: Boolean;
  1029.     procedure SetHorizontalExtent(Value: Boolean);
  1030.     function GetImages: TCustomImageList;
  1031.     function GetImageIndex: Integer;
  1032.     procedure SetImages(Value: TCustomImageList);
  1033.     procedure SetImageIndex(Value: Integer);
  1034.     function GetListBoxDefaultFont: TFont;
  1035.     procedure SetListBoxDefaultFont(Value: TFont);
  1036.     function GetListBoxUseSkinFont: Boolean;
  1037.     procedure SetListBoxUseSkinFont(Value: Boolean);
  1038.     function GetListBoxDefaultCaptionFont: TFont;
  1039.     procedure SetListBoxDefaultCaptionFont(Value: TFont);
  1040.     function GetListBoxDefaultItemHeight: Integer;
  1041.     procedure SetListBoxDefaultItemHeight(Value: Integer);
  1042.     function GetListBoxCaptionAlignment: TAlignment;
  1043.     procedure SetListBoxCaptionAlignment(Value: TAlignment);
  1044.     procedure CheckButtonClick(Sender: TObject);
  1045.     procedure SetListBoxCaption(Value: String);
  1046.     function  GetListBoxCaption: String;
  1047.     procedure SetListBoxCaptionMode(Value: Boolean);
  1048.     function  GetListBoxCaptionMode: Boolean;
  1049.     procedure EditCancelMode(C: TControl);
  1050.     procedure ListBoxDrawItem(Cnvs: TCanvas; Index: Integer;
  1051.       ItemWidth, ItemHeight: Integer; TextRect: TRect; State: TOwnerDrawState);
  1052.     function GetSorted: Boolean;
  1053.     procedure SetSorted(Value: Boolean);
  1054.     procedure SetStyle(Value: TbsSkinCustomComboBoxStyle);
  1055.     procedure DrawDefaultItem(Cnvs: TCanvas);
  1056.     procedure DrawSkinItem(Cnvs: TCanvas);
  1057.     function GetItemIndex: Integer;
  1058.     procedure SetItemIndex(Value: Integer);
  1059.     procedure ListBoxWindowProcHook(var Message: TMessage);
  1060.     procedure EditWindowProcHook(var Message: TMessage); virtual;
  1061.     procedure SetItems(Value: TStrings);
  1062.     function GetItems: TStrings;
  1063.     procedure SetListBoxDrawItem(Value: TbsDrawSkinItemEvent);
  1064.     procedure SetDropDownCount(Value: Integer);
  1065.     procedure EditChange(Sender: TObject);
  1066.     procedure EditUp(AChange: Boolean);
  1067.     procedure EditDown(AChange: Boolean);
  1068.     procedure EditUp1(AChange: Boolean);
  1069.     procedure EditDown1(AChange: Boolean);
  1070.     procedure EditPageUp1(AChange: Boolean);
  1071.     procedure EditPageDown1(AChange: Boolean);
  1072.     procedure ShowEditor;
  1073.     procedure HideEditor;
  1074.     procedure DrawButton(C: TCanvas);
  1075.     procedure CalcRects;
  1076.     procedure WMSETFOCUS(var Message: TMessage); message WM_SETFOCUS;
  1077.     procedure WMKILLFOCUS(var Message: TWMKILLFOCUS); message WM_KILLFOCUS;
  1078.     procedure WMSIZE(var Message: TWMSIZE); message WM_SIZE;
  1079.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  1080.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  1081.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  1082.     procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
  1083.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  1084.       X, Y: Integer); override;
  1085.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1086.       X, Y: Integer); override;
  1087.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1088.     procedure ListBoxMouseDown(Sender: TObject; Button: TMouseButton;
  1089.               Shift: TShiftState; X, Y: Integer);
  1090.     procedure ListBoxMouseMove(Sender: TObject; Shift: TShiftState;
  1091.               X, Y: Integer);
  1092.     procedure ListBoxMouseUp(Sender: TObject; Button: TMouseButton;
  1093.               Shift: TShiftState; X, Y: Integer);
  1094.     procedure GetSkinData; override;
  1095.     procedure WMMOUSEWHEEL(var Message: TMessage); message WM_MOUSEWHEEL;
  1096.     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
  1097.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  1098.     procedure CMWantSpecialKey(var Msg: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
  1099.     procedure DefaultFontChange; override;
  1100.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1101.     procedure CreateControlSkinImage(B: TBitMap); override;
  1102.     procedure Change; virtual;
  1103.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1104.   public
  1105.     FontName: String;
  1106.     FontStyle: TFontStyles;
  1107.     FontHeight: Integer;
  1108.     SItemRect, FocusItemRect: TRect;
  1109.     ItemLeftOffset, ItemRightOffset: Integer;
  1110.     ItemTextRect: TRect;
  1111.     FontColor, FocusFontColor: TColor;
  1112.     ButtonRect,
  1113.     ActiveButtonRect,
  1114.     DownButtonRect, UnEnabledButtonRect: TRect;
  1115.     ListBoxName: String;
  1116.     constructor Create(AOwner: TComponent); override;
  1117.     destructor Destroy; override;
  1118.     procedure ChangeSkinData; override;
  1119.     procedure CloseUp(Value: Boolean);
  1120.     procedure DropDown;
  1121.     function IsPopupVisible: Boolean;
  1122.     function CanCancelDropDown: Boolean;
  1123.     procedure Invalidate; override;
  1124.   public
  1125.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  1126.     property AlphaBlendAnimation: Boolean
  1127.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  1128.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  1129.     property Images: TCustomImageList read GetImages write SetImages;
  1130.     property ImageIndex: Integer read GetImageIndex write SetImageIndex;
  1131.     property ListBoxCaption: String read GetListBoxCaption
  1132.                                     write SetListBoxCaption;
  1133.     property ListBoxCaptionMode: Boolean read GetListBoxCaptionMode
  1134.                                     write SetListBoxCaptionMode;
  1135.     property ListBoxDefaultFont: TFont
  1136.       read GetListBoxDefaultFont write SetListBoxDefaultFont;
  1137.     property ListBoxUseSkinFont: Boolean
  1138.       read GetListBoxUseSkinFont write SetListBoxUseSkinFont;
  1139.     property ListBoxDefaultCaptionFont: TFont
  1140.       read GetListBoxDefaultCaptionFont write SetListBoxDefaultCaptionFont;
  1141.     property ListBoxDefaultItemHeight: Integer
  1142.       read GetListBoxDefaultItemHeight write SetListBoxDefaultItemHeight;
  1143.     property ListBoxCaptionAlignment: TAlignment
  1144.       read GetListBoxCaptionAlignment write SetListBoxCaptionAlignment;
  1145.     property Enabled;
  1146.     property PopupMenu;
  1147.     property ShowHint;
  1148.     property TabOrder;
  1149.     property Visible;
  1150.     //
  1151.     property Text;
  1152.     property Align;
  1153.     property Items: TStrings read GetItems write SetItems;
  1154.     property ItemIndex: Integer read GetItemIndex write SetItemIndex;
  1155.     property DropDownCount: Integer read FDropDownCount write SetDropDownCount;
  1156.     property HorizontalExtent: Boolean
  1157.       read GetHorizontalExtent write SetHorizontalExtent; 
  1158.     property Font;
  1159.     property Sorted: boolean read GetSorted write SetSorted;
  1160.     property Style: TbsSkinCustomComboBoxStyle read FStyle write SetStyle;
  1161.     property OnListBoxDrawItem: TbsDrawSkinItemEvent
  1162.       read FOnListBoxDrawItem write SetListBoxDrawItem;
  1163.     property OnComboBoxDrawItem: TbsDrawSkinItemEvent
  1164.       read FOnComboBoxDrawItem write FOnComboBoxDrawItem;
  1165.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  1166.     property OnClick: TNotifyEvent read FOnClick write FOnClick;
  1167.     property OnCloseUp: TNotifyEvent read FOnCloseUp write FOnCloseUp;
  1168.   end;
  1169.   TbsSkinComboBox = class(TbsSkinCustomComboBox)
  1170.   published
  1171.     property AlphaBlend;
  1172.     property AlphaBlendValue;
  1173.     property AlphaBlendAnimation;
  1174.     property ListBoxUseSkinFont;
  1175.     property Images;
  1176.     property ImageIndex;
  1177.     property ListBoxCaption;
  1178.     property ListBoxCaptionMode;
  1179.     property ListBoxDefaultFont;
  1180.     property ListBoxDefaultCaptionFont;
  1181.     property ListBoxDefaultItemHeight;
  1182.     property ListBoxCaptionAlignment;
  1183.     property Enabled;
  1184.     property PopupMenu;
  1185.     property ShowHint;
  1186.     property TabOrder;
  1187.     property TabStop;
  1188.     property Visible;
  1189.     //
  1190.     property Text;
  1191.     property Align;
  1192.     property Items;
  1193.     property ItemIndex;
  1194.     property DropDownCount;
  1195.     property HorizontalExtent;
  1196.     property Font;
  1197.     property Sorted;
  1198.     property Style;
  1199.     property OnListBoxDrawItem;
  1200.     property OnComboBoxDrawItem;
  1201.     property OnChange;
  1202.     property OnClick;
  1203.     property OnCloseUp;
  1204.   end;
  1205.   TbsColorBoxStyles = (bscbStandardColors, bscbExtendedColors, bscbSystemColors,
  1206.                        bscbIncludeNone, bscbIncludeDefault, bscbCustomColor,
  1207.                        bscbPrettyNames);
  1208.   TbsColorBoxStyle = set of TbsColorBoxStyles;
  1209.   TbsSkinColorComboBox = class(TbsSkinCustomComboBox)
  1210.   private
  1211.     FShowNames: Boolean;
  1212.     FExStyle: TbsColorBoxStyle;
  1213.     FNeedToPopulate: Boolean;
  1214.     FListSelected: Boolean;
  1215.     FDefaultColorColor: TColor;
  1216.     FNoneColorColor: TColor;
  1217.     FSelectedColor: TColor;
  1218.     procedure SetShowNames(Value: Boolean);
  1219.     function GetColor(Index: Integer): TColor;
  1220.     function GetColorName(Index: Integer): string;
  1221.     function GetSelected: TColor;
  1222.     procedure SetSelected(const AColor: TColor);
  1223.     procedure ColorCallBack(const AName: string);
  1224.     procedure SetDefaultColorColor(const Value: TColor);
  1225.     procedure SetNoneColorColor(const Value: TColor);
  1226.     procedure SetExStyle(AStyle: TbsColorBoxStyle);
  1227.   protected
  1228.     procedure DrawColorItem(Cnvs: TCanvas; Index: Integer;
  1229.       ItemWidth, ItemHeight: Integer; TextRect: TRect; State: TOwnerDrawState);
  1230.     procedure CreateWnd; override;
  1231.     function PickCustomColor: Boolean; virtual;
  1232.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  1233.     procedure OnLBCloseUp(Sender: TObject);
  1234.   public
  1235.     constructor Create(AOwner: TComponent); override;
  1236.     property Colors[Index: Integer]: TColor read GetColor;
  1237.     property ColorNames[Index: Integer]: string read GetColorName;
  1238.     procedure PopulateList;
  1239.   published
  1240.     property AlphaBlend;
  1241.     property AlphaBlendValue;
  1242.     property ListBoxCaption;
  1243.     property ListBoxCaptionMode;
  1244.     property Enabled;
  1245.     property PopupMenu;
  1246.     property ShowHint;
  1247.     property TabOrder;
  1248.     property Visible;
  1249.     //
  1250.     property Align;
  1251.     property ItemIndex;
  1252.     property DropDownCount;
  1253.     property Font;
  1254.     property Sorted;
  1255.     property ExStyle: TbsColorBoxStyle read FExStyle write SetExStyle
  1256.       default [bscbStandardColors, bscbExtendedColors, bscbSystemColors];
  1257.     property Selected: TColor read GetSelected write SetSelected default clBlack;
  1258.     property DefaultColorColor: TColor read FDefaultColorColor write SetDefaultColorColor default clBlack;
  1259.     property NoneColorColor: TColor read FNoneColorColor write SetNoneColorColor default clBlack;
  1260.     property ShowNames: Boolean read FShowNames write SetShowNames;
  1261.     property OnClick;
  1262.     property OnChange;
  1263.   end;
  1264.   TbsFontDevice = (fdScreen, fdPrinter, fdBoth);
  1265.   TbsFontListOption = (foAnsiOnly, foTrueTypeOnly, foFixedPitchOnly,
  1266.     foNoOEMFonts, foOEMFontsOnly, foScalableOnly, foNoSymbolFonts);
  1267.   TbsFontListOptions = set of TbsFontListOption;
  1268.   TbsSkinFontComboBox = class(TbsSkinCustomComboBox)
  1269.   protected
  1270.     FDevice: TbsFontDevice;
  1271.     FUpdate: Boolean;
  1272.     FUseFonts: Boolean;
  1273.     FOptions: TbsFontListOptions;
  1274.     procedure SetFontName(const NewFontName: TFontName);
  1275.     function GetFontName: TFontName;
  1276.     function GetTrueTypeOnly: Boolean;
  1277.     procedure SetDevice(Value: TbsFontDevice);
  1278.     procedure SetOptions(Value: TbsFontListOptions);
  1279.     procedure SetTrueTypeOnly(Value: Boolean);
  1280.     procedure SetUseFonts(Value: Boolean);
  1281.     procedure Reset;
  1282.     procedure WMFontChange(var Message: TMessage); message WM_FONTCHANGE;
  1283.     procedure DrawLBFontItem(Cnvs: TCanvas; Index: Integer;
  1284.       ItemWidth, ItemHeight: Integer; TextRect: TRect; State: TOwnerDrawState);
  1285.     procedure DrawCBFontItem(Cnvs: TCanvas; Index: Integer;
  1286.       ItemWidth, ItemHeight: Integer; TextRect: TRect; State: TOwnerDrawState);
  1287.     procedure CreateWnd; override;
  1288.     procedure DrawTT(Cnvs: TCanvas; X, Y: Integer; C: TColor);
  1289.   public
  1290.     constructor Create(AOwner: TComponent); override;
  1291.     procedure PopulateList;
  1292.   published
  1293.     property AlphaBlend;
  1294.     property AlphaBlendValue;
  1295.     property ListBoxCaption;
  1296.     property ListBoxCaptionMode;
  1297.     property Enabled;
  1298.     property PopupMenu;
  1299.     property ShowHint;
  1300.     property TabOrder;
  1301.     property Visible;
  1302.     //
  1303.     property Align;
  1304.     property ItemIndex;
  1305.     property DropDownCount;
  1306.     property Font;
  1307.     property Sorted;
  1308.     property Style;
  1309.     property OnChange;
  1310.     property OnClick;
  1311.     //
  1312.     property Device: TbsFontDevice read FDevice write SetDevice default fdScreen;
  1313.     property FontName: TFontName read GetFontName write SetFontName;
  1314.     property Options: TbsFontListOptions read FOptions write SetOptions default [];
  1315.     property TrueTypeOnly: Boolean read GetTrueTypeOnly write SetTrueTypeOnly
  1316.       stored False; 
  1317.     property UseFonts: Boolean read FUseFonts write SetUseFonts default False;
  1318.   end;
  1319.   TbsValueType = (vtInteger, vtFloat);
  1320.   TbsSkinSpinEdit = class(TbsSkinCustomControl)
  1321.   private
  1322.     StopCheck: Boolean;
  1323.     FDecimal: Byte;
  1324.     FMinValue, FMaxValue, FIncrement: Double;
  1325.     FromEdit: Boolean;
  1326.     FValueType: TbsValueType;
  1327.     FOnChange: TNotifyEvent;
  1328.     FValue: Double;
  1329.     OldActiveButton, ActiveButton, CaptureButton: Integer;
  1330.     TimerMode: Integer;
  1331.     WaitMode: Boolean;
  1332.     procedure StartTimer;
  1333.     procedure StopTimer;
  1334.     procedure SetValue(AValue: Double);
  1335.     procedure SetMinValue(AValue: Double);
  1336.     procedure SetMaxValue(AValue: Double);
  1337.     procedure SetEditorEnabled(AValue: Boolean);
  1338.     function  GetEditorEnabled: Boolean;
  1339.     procedure SetMaxLength(AValue: Integer);
  1340.     function  GetMaxLength: Integer;
  1341.     procedure SetValueType(NewType: TbsValueType);
  1342.     procedure SetDecimal(NewValue: Byte);
  1343.    protected
  1344.     Buttons: array[0..1] of TbsCBButtonX;
  1345.     FOnEditKeyDown: TKeyEvent;
  1346.     FOnEditKeyPress: TKeyPressEvent;
  1347.     FOnEditKeyUp: TKeyEvent;
  1348.     FOnEditEnter: TNotifyEvent;
  1349.     FOnEditExit: TNotifyEvent;
  1350.     procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); virtual;
  1351.     procedure EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); virtual;
  1352.     procedure EditKeyPress(Sender: TObject; var Key: Char); virtual;
  1353.     procedure EditEnter(Sender: TObject); virtual;
  1354.     procedure EditExit(Sender: TObject); virtual;
  1355.     procedure UpClick(Sender: TObject);
  1356.     procedure DownClick(Sender: TObject);
  1357.     function CheckValue (NewValue: Double): Double;
  1358.     procedure EditChange(Sender: TObject);
  1359.     procedure ButtonDown(I: Integer; X, Y: Integer);
  1360.     procedure ButtonUp(I: Integer; X, Y: Integer);
  1361.     procedure ButtonEnter(I: Integer);
  1362.     procedure ButtonLeave(I: Integer);
  1363.     procedure TestActive(X, Y: Integer);
  1364.     procedure CalcRects;
  1365.     procedure DrawButton(Cnvs: TCanvas; i: Integer);
  1366.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  1367.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  1368.     procedure WMSIZE(var Message: TWMSIZE); message WM_SIZE;
  1369.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  1370.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  1371.       X, Y: Integer); override;
  1372.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1373.       X, Y: Integer); override;
  1374.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1375.     procedure WMTimer(var Message: TWMTimer); message WM_Timer;
  1376.     procedure GetSkinData; override;
  1377.     procedure DefaultFontChange; override;
  1378.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1379.     procedure CreateControlSkinImage(B: TBitMap); override;
  1380.     procedure Change; virtual;
  1381.   public
  1382.     FontName: String;
  1383.     FontStyle: TFontStyles;
  1384.     FontHeight: Integer;
  1385.     FontColor: TColor;
  1386.     UpButtonRect, ActiveUpButtonRect, DownUpButtonRect: TRect;
  1387.     DownButtonRect, ActiveDownButtonRect, DownDownButtonRect: TRect;
  1388.     //
  1389.     FEdit: TbsSkinNumEdit;
  1390.     constructor Create(AOwner: TComponent); override;
  1391.     destructor Destroy; override;
  1392.     procedure Invalidate; override;
  1393.     function IsNumText(AText: String): Boolean;
  1394.     procedure ChangeSkinData; override;
  1395.     property Text;
  1396.     procedure SimpleSetValue(AValue: Double);
  1397.   published
  1398.     property ValueType: TbsValueType read FValueType write SetValueType;
  1399.     property Decimal: Byte read FDecimal write SetDecimal default 2;
  1400.     property Align;
  1401.     property MinValue: Double read FMinValue write SetMinValue;
  1402.     property MaxValue: Double read FMaxValue write SetMaxValue;
  1403.     property Value: Double read FValue write SetValue;
  1404.     property Increment: Double read FIncrement write FIncrement;
  1405.     property EditorEnabled: Boolean read GetEditorEnabled write SetEditorEnabled;
  1406.     property MaxLength: Integer read GetMaxLength write SetMaxLength;
  1407.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  1408.     property OnEditKeyDown: TKeyEvent read FOnEditKeyDown write FOnEditKeyDown;
  1409.     property OnEditKeyPress: TKeyPressEvent read FOnEditKeyPress write FOnEditKeyPress;
  1410.     property OnEditKeyUp: TKeyEvent read FOnEditKeyUp write FOnEditKeyUp;
  1411.     property OnEditEnter: TNotifyEvent read FOnEditEnter write FOnEditEnter;
  1412.     property OnEditExit: TNotifyEvent read FOnEditExit write FOnEditExit;
  1413.   end;
  1414.   TbsSkinCheckListBox = class;
  1415.   TbsCheckListBox = class(TListBox)
  1416.   protected
  1417.     FSaveStates: TList;
  1418.     FOnClickCheck: TNotifyEvent;
  1419.     procedure SkinDrawCheckImage(X, Y: Integer; Cnvs: TCanvas; IR: TRect; DestCnvs: TCanvas);
  1420.     procedure PaintBGWH(Cnvs: TCanvas; AW, AH, AX, AY: Integer);
  1421.     function CreateWrapper(Index: Integer): TObject;
  1422.     function GetWrapper(Index: Integer): TObject;
  1423.     function HaveWrapper(Index: Integer): Boolean;
  1424.     function ExtractWrapper(Index: Integer): TObject;
  1425.     procedure InvalidateCheck(Index: Integer);
  1426.     procedure SetChecked(Index: Integer; Checked: Boolean);
  1427.     function GetChecked(Index: Integer): Boolean;
  1428.     procedure SetState(Index: Integer; AState: TCheckBoxState);
  1429.     function GetState(Index: Integer): TCheckBoxState;
  1430.     function GetState1(AItemID: Integer): TOwnerDrawState;
  1431.     procedure ToggleClickCheck(Index: Integer);
  1432.     procedure DeleteString(Index: Integer); override;
  1433.     procedure ResetContent; override;
  1434.     procedure SetItemData(Index: Integer; AData: LongInt); override;
  1435.     function GetItemData(Index: Integer): LongInt; override;
  1436.     procedure PaintBG(DC: HDC);
  1437.     procedure PaintList(DC: HDC);
  1438.     procedure PaintColumnsList(DC: HDC);
  1439.     procedure CreateParams(var Params: TCreateParams); override;
  1440.     procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
  1441.     procedure WndProc(var Message: TMessage); override;
  1442.     procedure DrawDefaultItem(Cnvs: TCanvas; itemID: Integer; rcItem: TRect;
  1443.                            State1: TOwnerDrawState);
  1444.     procedure DrawSkinItem(Cnvs: TCanvas; itemID: Integer; rcItem: TRect;
  1445.                            State1: TOwnerDrawState);
  1446.     procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
  1447.     procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
  1448.     procedure WMNCCALCSIZE(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  1449.     procedure PaintWindow(DC: HDC); override;
  1450.     procedure WMDestroy(var Msg : TWMDestroy);message WM_DESTROY;
  1451.     procedure DestroyWnd; override;
  1452.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  1453.       X, Y: Integer); override;
  1454.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1455.       X, Y: Integer); override;
  1456.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1457.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  1458.     procedure KeyPress(var Key: Char); override;
  1459.     procedure Click; override;
  1460.     procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
  1461.     procedure CMExit(var Message: TCMGotFocus); message CM_EXIT;
  1462.     procedure CreateWnd; override;
  1463.    public
  1464.     SkinListBox: TbsSkinCheckListBox;
  1465.     constructor Create(AOwner: TComponent); override;
  1466.     destructor Destroy; override;
  1467.     property Checked[Index: Integer]: Boolean read GetChecked write SetChecked;
  1468.     property State[Index: Integer]: TCheckBoxState read GetState write SetState;
  1469.     property OnClickCheck: TNotifyEvent read FOnClickCheck write FOnClickCheck;
  1470.   end;
  1471.   TbsSkinCheckListBox = class(TbsSkinCustomControl)
  1472.   protected
  1473.     FRowCount: Integer;
  1474.     FImages: TCustomImageList;
  1475.     FImageIndex: Integer;
  1476.     FGlyph: TBitMap;
  1477.     FNumGlyphs: TbsSkinPanelNumGlyphs;
  1478.     FSpacing: Integer;
  1479.     FOnUpButtonClick, FOnDownButtonClick, FOnCheckButtonClick: TNotifyEvent;
  1480.     FOnClickCheck: TNotifyEvent;
  1481.     FDefaultItemHeight: Integer;
  1482.     FOnDrawItem: TbsDrawSkinItemEvent;
  1483.     NewClRect: TRect;
  1484.     ListRect: TRect;
  1485.     FDefaultCaptionHeight: Integer;
  1486.     FDefaultCaptionFont: TFont;
  1487.     FOnListBoxClick: TNotifyEvent;
  1488.     FOnListBoxDblClick: TNotifyEvent;
  1489.     FOnListBoxMouseDown: TMouseEvent;
  1490.     FOnListBoxMouseMove: TMouseMoveEvent;
  1491.     FOnListBoxMouseUp: TMouseEvent;
  1492.     FOnListBoxKeyDown: TKeyEvent;
  1493.     FOnListBoxKeyPress: TKeyPressEvent;
  1494.     FOnListBoxKeyUp: TKeyEvent;
  1495.     FCaptionMode: Boolean;
  1496.     FAlignment: TAlignment;
  1497.     Buttons: array[0..2] of TbsCBButtonX;
  1498.     OldActiveButton, ActiveButton, CaptureButton: Integer;
  1499.     NewCaptionRect: TRect;
  1500.     TimerMode: Integer;
  1501.     WaitMode: Boolean;
  1502.     function  GetColumns: Integer;
  1503.     procedure SetColumns(Value: Integer);
  1504.     procedure SetOnClickCheck(const Value: TNotifyEvent);
  1505.     procedure SetRowCount(Value: Integer);
  1506.     procedure SetImages(Value: TCustomImageList);
  1507.     procedure SetImageIndex(Value: Integer);
  1508.     procedure SetGlyph(Value: TBitMap);
  1509.     procedure SetNumGlyphs(Value: TbsSkinPanelNumGlyphs);
  1510.     procedure SetSpacing(Value: Integer);
  1511.     procedure StartTimer;
  1512.     procedure StopTimer;
  1513.     procedure ButtonDown(I: Integer; X, Y: Integer);
  1514.     procedure ButtonUp(I: Integer; X, Y: Integer);
  1515.     procedure ButtonEnter(I: Integer);
  1516.     procedure ButtonLeave(I: Integer);
  1517.     procedure TestActive(X, Y: Integer);
  1518.     procedure DrawButton(Cnvs: TCanvas; i: Integer);
  1519.     procedure ListBoxOnClickCheck(Sender: TObject);
  1520.     
  1521.     procedure SetChecked(Index: Integer; Checked: Boolean);
  1522.     function GetChecked(Index: Integer): Boolean;
  1523.     procedure SetState(Index: Integer; AState: TCheckBoxState);
  1524.     function GetState(Index: Integer): TCheckBoxState;
  1525.     procedure ListBoxMouseDown(Button: TMouseButton; Shift: TShiftState;
  1526.                                X, Y: Integer); virtual;
  1527.     procedure ListBoxMouseMove(Shift: TShiftState; X, Y: Integer); virtual;
  1528.     procedure ListBoxMouseUp(Button: TMouseButton; Shift: TShiftState;
  1529.                              X, Y: Integer); virtual;
  1530.     procedure ListBoxClick; virtual;
  1531.     procedure ListBoxDblClick; virtual;
  1532.     procedure ListBoxKeyDown(var Key: Word; Shift: TShiftState); virtual;
  1533.     procedure ListBoxKeyUp(var Key: Word; Shift: TShiftState); virtual;
  1534.     procedure ListBoxKeyPress(var Key: Char); virtual;
  1535.     procedure ListBoxEnter; virtual;
  1536.     procedure ListBoxExit; virtual;
  1537.     //
  1538.     procedure ShowScrollBar;
  1539.     procedure HideScrollBar;
  1540.     //
  1541.     procedure GetSkinData; override;
  1542.     procedure CalcRects;
  1543.     procedure SBChange(Sender: TObject);
  1544.     procedure CreateParams(var Params: TCreateParams); override;
  1545.     procedure WMSIZE(var Message: TWMSIZE); message WM_SIZE;
  1546.     procedure WMTimer(var Message: TWMTimer); message WM_Timer;
  1547.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  1548.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  1549.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  1550.     //
  1551.     procedure OnDefaultCaptionFontChange(Sender: TObject);
  1552.     procedure SetDefaultCaptionHeight(Value: Integer);
  1553.     procedure SetDefaultCaptionFont(Value: TFont);
  1554.     procedure SetDefaultItemHeight(Value: Integer);
  1555.     procedure SetCaptionMode(Value: Boolean);
  1556.     procedure SetAlignment(Value: TAlignment);
  1557.     procedure SetItems(Value: TStrings);
  1558.     function GetItems: TStrings;
  1559.     function GetItemIndex: Integer;
  1560.     procedure SetItemIndex(Value: Integer);
  1561.     function GetMultiSelect: Boolean;
  1562.     procedure SetMultiSelect(Value: Boolean);
  1563.     function GetListBoxFont: TFont;
  1564.     procedure SetListBoxFont(Value: TFont);
  1565.     function GetListBoxTabOrder: TTabOrder;
  1566.     procedure SetListBoxTabOrder(Value: TTabOrder);
  1567.     function GetListBoxTabStop: Boolean;
  1568.     procedure SetListBoxTabStop(Value: Boolean);
  1569.     //
  1570.     function GetCanvas: TCanvas;
  1571.     function GetExtandedSelect: Boolean;
  1572.     procedure SetExtandedSelect(Value: Boolean);
  1573.     function GetSelCount: Integer;
  1574.     function GetSelected(Index: Integer): Boolean;
  1575.     procedure SetSelected(Index: Integer; Value: Boolean);
  1576.     function GetSorted: Boolean;
  1577.     procedure SetSorted(Value: Boolean);
  1578.     function GetTopIndex: Integer;
  1579.     procedure SetTopIndex(Value: Integer);
  1580.     function GetListBoxPopupMenu: TPopupMenu;
  1581.     procedure SetListBoxPopupMenu(Value: TPopupMenu);
  1582.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  1583.       X, Y: Integer); override;
  1584.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1585.       X, Y: Integer); override;
  1586.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1587.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1588.     procedure CreateControlSkinImage(B: TBitMap); override;
  1589.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1590.     function GetListBoxDragMode: TDragMode;
  1591.     procedure SetListBoxDragMode(Value: TDragMode);
  1592.     function GetListBoxDragKind: TDragKind;
  1593.     procedure SetListBoxDragKind(Value: TDragKind);
  1594.     function GetListBoxDragCursor: TCursor;
  1595.     procedure SetListBoxDragCursor(Value: TCursor);
  1596.   public
  1597.     ScrollBar: TbsSkinScrollBar;
  1598.     ListBox: TbsCheckListBox;
  1599.     FontName: String;
  1600.     FontStyle: TFontStyles;
  1601.     FontHeight: Integer;
  1602.     SItemRect, ActiveItemRect, FocusItemRect: TRect;
  1603.     ItemLeftOffset, ItemRightOffset: Integer;
  1604.     ItemTextRect: TRect;
  1605.     FontColor, ActiveFontColor, FocusFontColor: TColor;
  1606.     UnCheckImageRect, CheckImageRect: TRect;
  1607.     ItemCheckRect: TRect;
  1608.     CaptionRect: TRect;
  1609.     CaptionFontName: String;
  1610.     CaptionFontStyle: TFontStyles;
  1611.     CaptionFontHeight: Integer;
  1612.     CaptionFontColor: TColor;
  1613.     UpButtonRect, ActiveUpButtonRect, DownUpButtonRect: TRect;
  1614.     DownButtonRect, ActiveDownButtonRect, DownDownButtonRect: TRect;
  1615.     CheckButtonRect, ActiveCheckButtonRect, DownCheckButtonRect: TRect;
  1616.     VScrollBarName, HScrollBarName: String;
  1617.     constructor Create(AOwner: TComponent); override;
  1618.     destructor Destroy; override;
  1619.     property Checked[Index: Integer]: Boolean read GetChecked write SetChecked;
  1620.     property State[Index: Integer]: TCheckBoxState read GetState write SetState;
  1621.     procedure ChangeSkinData; override;
  1622.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  1623.     procedure UpDateScrollBar;
  1624.     function CalcHeight(AItemsCount: Integer): Integer;
  1625.     //
  1626.     procedure Clear;
  1627.     function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer;
  1628.     function ItemRect(Item: Integer): TRect;
  1629.     //
  1630.     property Selected[Index: Integer]: Boolean read GetSelected write SetSelected;
  1631.     property ListBoxCanvas: TCanvas read GetCanvas;
  1632.     property SelCount: Integer read GetSelCount;
  1633.     property TopIndex: Integer read GetTopIndex write SetTopIndex;
  1634.   published
  1635.     property Columns: Integer read GetColumns write SetColumns;
  1636.     property CaptionMode: Boolean read FCaptionMode
  1637.                                          write SetCaptionMode;
  1638.     property DefaultCaptionHeight: Integer
  1639.       read FDefaultCaptionHeight  write SetDefaultCaptionHeight;
  1640.     property DefaultCaptionFont: TFont
  1641.      read FDefaultCaptionFont  write SetDefaultCaptionFont;
  1642.     property Alignment: TAlignment read FAlignment write SetAlignment
  1643.       default taLeftJustify;
  1644.     property DefaultItemHeight: Integer read FDefaultItemHeight
  1645.                                         write SetDefaultItemHeight;
  1646.     property Items: TStrings read GetItems write SetItems;
  1647.     property ItemIndex: Integer read GetItemIndex write SetItemIndex;
  1648.     property MultiSelect: Boolean read GetMultiSelect write SetMultiSelect;
  1649.     property ListBoxFont: TFont read GetListBoxFont write SetListBoxFont;
  1650.     property ListBoxTabOrder: TTabOrder read GetListBoxTabOrder write SetListBoxTabOrder;
  1651.     property ListBoxTabStop: Boolean read GetListBoxTabStop write SetListBoxTabStop;
  1652.     property ListBoxDragMode: TDragMode read GetListBoxDragMode write SetListBoxDragMode;
  1653.     property ListBoxDragKind: TDragKind read GetListBoxDragKind write SetListBoxDragKind;
  1654.     property ListBoxDragCursor: TCursor read GetListBoxDragCursor write SetListBoxDragCursor;
  1655.     property ExtandedSelect: Boolean read GetExtandedSelect write SetExtandedSelect;
  1656.     property Sorted: boolean read GetSorted write SetSorted;
  1657.     property ListBoxPopupMenu: TPopupMenu read GetListBoxPopupMenu write SetListBoxPopupMenu;
  1658.     //
  1659.     property Caption;
  1660.     property Font;
  1661.     property Align;
  1662.     property DockSite;
  1663.     property DragCursor;
  1664.     property DragKind;
  1665.     property DragMode;
  1666.     property Enabled;
  1667.     property ParentShowHint;
  1668.     property PopupMenu;
  1669.     property ShowHint;
  1670.     property TabOrder;
  1671.     property TabStop;
  1672.     property Visible;
  1673.     property Images: TCustomImageList read FImages write SetImages;
  1674.     property ImageIndex: Integer read FImageIndex write SetImageIndex;
  1675.     property Glyph: TBitMap read FGlyph write SetGlyph;
  1676.     property NumGlyphs: TbsSkinPanelNumGlyphs read FNumGlyphs write SetNumGlyphs;
  1677.     property Spacing: Integer read FSpacing write SetSpacing;
  1678.     property RowCount: Integer read FRowCount write SetRowCount;
  1679.     property OnClick;
  1680.     property OnUpButtonClick: TNotifyEvent read FOnUpButtonClick
  1681.                                            write FOnUpButtonClick;
  1682.     property OnDownButtonClick: TNotifyEvent read FOnDownButtonClick
  1683.                                            write FOnDownButtonClick;
  1684.     property OnCheckButtonClick: TNotifyEvent read FOnCheckButtonClick
  1685.                                            write FOnCheckButtonClick;
  1686.     property OnCanResize;
  1687.     property OnConstrainedResize;
  1688.     property OnDockDrop;
  1689.     property OnDockOver;
  1690.     property OnDblClick;
  1691.     property OnDragDrop;
  1692.     property OnDragOver;
  1693.     property OnEndDock;
  1694.     property OnEndDrag;
  1695.     property OnEnter;
  1696.     property OnExit;
  1697.     property OnGetSiteInfo;
  1698.     property OnMouseDown;
  1699.     property OnMouseMove;
  1700.     property OnMouseUp;
  1701.     property OnResize;
  1702.     property OnStartDock;
  1703.     property OnStartDrag;
  1704.     property OnUnDock;
  1705.     property OnClickCheck: TNotifyEvent read FOnClickCheck write SetOnClickCheck;
  1706.     property OnListBoxClick: TNotifyEvent read FOnListBoxClick write FOnListBoxClick;
  1707.     property OnListBoxDblClick: TNotifyEvent read FOnListBoxDblClick write FOnListBoxDblClick;
  1708.     property OnListBoxMouseDown: TMouseEvent read FOnListBoxMouseDown write
  1709.      FOnListBoxMouseDown;
  1710.     property OnListBoxMouseMove: TMouseMoveEvent read FOnListBoxMouseMove
  1711.       write FOnListBoxMouseMove;
  1712.     property OnListBoxMouseUp: TMouseEvent read FOnListBoxMouseUp
  1713.       write FOnListBoxMouseUp;
  1714.     property OnListBoxKeyDown: TKeyEvent read FOnListBoxKeyDown write FOnListBoxKeyDown;
  1715.     property OnListBoxKeyPress: TKeyPressEvent read FOnListBoxKeyPress write FOnListBoxKeyPress;
  1716.     property OnListBoxKeyUp: TKeyEvent read FOnListBoxKeyUp write FOnListBoxKeyUp;
  1717.     property OnDrawItem: TbsDrawSkinItemEvent read FOnDrawItem write FOnDrawItem;
  1718.   end;
  1719.   TbsSkinUpDown = class(TbsSkinCustomControl)
  1720.   protected
  1721.     FOrientation: TUDOrientation;
  1722.     Buttons: array[0..1] of TbsCBButtonX;
  1723.     OldActiveButton, ActiveButton, CaptureButton: Integer;
  1724.     TimerMode: Integer;
  1725.     WaitMode: Boolean;
  1726.     //
  1727.     FOnUpButtonClick: TNotifyEvent;
  1728.     FOnDownButtonClick: TNotifyEvent;
  1729.     FOnChange: TNotifyEvent;
  1730.     FIncrement: Integer;
  1731.     FPosition: Integer;
  1732.     FMin: Integer;
  1733.     FMax: Integer;
  1734.     procedure SetOrientation(Value: TUDOrientation);
  1735.     procedure StartTimer;
  1736.     procedure StopTimer;
  1737.     procedure WMTimer(var Message: TWMTimer); message WM_Timer;
  1738.     procedure ButtonDown(I: Integer; X, Y: Integer);
  1739.     procedure ButtonUp(I: Integer; X, Y: Integer);
  1740.     procedure ButtonEnter(I: Integer);
  1741.     procedure ButtonLeave(I: Integer);
  1742.     procedure DrawButton(Cnvs: TCanvas; i: Integer);
  1743.     procedure TestActive(X, Y: Integer);
  1744.     procedure CalcRects;
  1745.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  1746.       X, Y: Integer); override;
  1747.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1748.       X, Y: Integer); override;
  1749.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1750.     procedure SetIncrement(Value: Integer);
  1751.     procedure SetPosition(Value: Integer);
  1752.     procedure SetMin(Value: Integer);
  1753.     procedure SetMax(Value: Integer);
  1754.     procedure GetSkinData; override;
  1755.     procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  1756.     procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  1757.     procedure WMSIZE(var Message: TWMSIZE); message WM_SIZE;
  1758.     procedure CreateControlDefaultImage(B: TBitMap); override;
  1759.     procedure CreateControlSkinImage(B: TBitMap); override;
  1760.   public
  1761.     UpButtonRect, ActiveUpButtonRect, DownUpButtonRect: TRect;
  1762.     DownButtonRect, ActiveDownButtonRect, DownDownButtonRect: TRect;
  1763.     constructor Create(AOwner: TComponent); override;
  1764.     destructor Destroy; override;
  1765.   published
  1766.     property Orientation: TUDOrientation read FOrientation
  1767.                                          write SetOrientation;
  1768.     property Increment: Integer read FIncrement write SetIncrement;
  1769.     property Position: Integer read FPosition write SetPosition;
  1770.     property Min: Integer read FMin write SetMin;
  1771.     property Max: Integer read FMax write SetMax;
  1772.     property OnChange: TNotifyEvent read FOnChange write FOnChange;
  1773.     property OnUpButtonClick: TNotifyEvent read FOnUpButtonClick
  1774.                                            write FOnUpButtonClick;
  1775.     property OnDownButtonClick: TNotifyEvent read FOnDownButtonClick
  1776.                                            write FOnDownButtonClick;
  1777.   end;
  1778.   TbsSkinDateEdit = class;
  1779.   TbsSkinPopupMonthCalendar = class(TbsSkinMonthCalendar)
  1780.   protected
  1781.     procedure WMMouseActivate(var Message: TMessage); message WM_MOUSEACTIVATE;
  1782.     procedure CreateParams(var Params: TCreateParams); override;
  1783.   public
  1784.     constructor Create(AOwner: TComponent); override;
  1785.   end;
  1786.   TbsSkinDateEdit = class(TbsSkinCustomEdit)
  1787.   private
  1788.     StopCheck: Boolean;
  1789.     FAlphaBlend: Boolean;
  1790.     FAlphaBlendValue: Byte;
  1791.     FAlphaBlendAnimation: Boolean;
  1792.     FTodayDefault: Boolean;
  1793.   protected
  1794.     FMonthCalendar: TbsSkinPopupMonthCalendar;
  1795.     FOnDateChange: TNotifyEvent;
  1796.     procedure Loaded; override;
  1797.     procedure SetTodayDefault(Value: Boolean);
  1798.     function GetCalendarFont: TFont;
  1799.     procedure SetCalendarFont(Value: TFont);
  1800.     function GetCalendarWidth: Integer;
  1801.     procedure SetCalendarWidth(Value: Integer);
  1802.     function GetCalendarHeight: Integer;
  1803.     procedure SetCalendarHeight(Value: Integer);
  1804.     function GetDate: TDate;
  1805.     procedure SetDate(Value: TDate);
  1806.     procedure DropDown;
  1807.     procedure CloseUp(AcceptValue: Boolean);
  1808.     procedure ButtonClick(Sender: TObject);
  1809.     procedure CalendarClick(Sender: TObject);
  1810.     procedure WndProc(var Message: TMessage); override;
  1811.     procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
  1812.     function IsValidChar(Key: Char): Boolean;
  1813.     procedure CheckValidDate;
  1814.     procedure Change; override;
  1815.     procedure KeyPress(var Key: Char); override;
  1816.     function IsValidText(S: String): Boolean;
  1817.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  1818.     procedure CheckSelect;
  1819.     //
  1820.     function GetFirstDayOfWeek: TbsDaysOfWeek;
  1821.     procedure SetFirstDayOfWeek(Value: TbsDaysOfWeek);
  1822.     //
  1823.   public
  1824.     constructor Create(AOwner: TComponent); override;
  1825.     destructor Destroy; override;
  1826.   published
  1827.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  1828.     property AlphaBlendAnimation: Boolean
  1829.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  1830.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  1831.     property Date: TDate read GetDate write SetDate;
  1832.     property TodayDefault: Boolean read FTodayDefault write SetTodayDefault; 
  1833.     property CalendarWidth: Integer read GetCalendarWidth write SetCalendarWidth;
  1834.     property CalendarHeight: Integer read GetCalendarHeight write SetCalendarHeight;
  1835.     property CalendarFont: TFont read GetCalendarFont write SetCalendarFont;
  1836.     property FirstDayOfWeek: TbsDaysOfWeek
  1837.       read GetFirstDayOfWeek write SetFirstDayOfWeek;
  1838.     property OnDateChange: TNotifyEvent
  1839.       read FOnDateChange write FOnDateChange;
  1840.     property DefaultFont;
  1841.     property DefaultWidth;
  1842.     property DefaultHeight;
  1843.     property ButtonMode;
  1844.     property SkinData;
  1845.     property SkinDataName;
  1846.     property EditPasswordChar;
  1847.     property OnMouseEnter;
  1848.     property OnMouseLeave;
  1849.     property ReadOnly;
  1850.     property Align;
  1851.     property Alignment;
  1852.     property Font;
  1853.     property Anchors;
  1854.     property AutoSelect;
  1855.     property BiDiMode;
  1856.     property CharCase;
  1857.     property Constraints;
  1858.     property DragCursor;
  1859.     property DragKind;
  1860.     property DragMode;
  1861.     property Enabled;
  1862.     property HideSelection;
  1863.     property ImeMode;
  1864.     property ImeName;
  1865.     property MaxLength;
  1866.     property OEMConvert;
  1867.     property ParentBiDiMode;
  1868.     property ParentColor;
  1869.     property ParentCtl3D;
  1870.     property ParentFont;
  1871.     property ParentShowHint;
  1872.     property PopupMenu;
  1873.     property ShowHint;
  1874.     property TabOrder;
  1875.     property TabStop;
  1876.     property Text;
  1877.     property Visible;
  1878.     property OnButtonClick;
  1879.     property OnChange;
  1880.     property OnClick;
  1881.     property OnDblClick;
  1882.     property OnDragDrop;
  1883.     property OnDragOver;
  1884.     property OnEndDock;
  1885.     property OnEndDrag;
  1886.     property OnEnter;
  1887.     property OnExit;
  1888.     property OnKeyDown;
  1889.     property OnKeyPress;
  1890.     property OnKeyUp;
  1891.     property OnMouseDown;
  1892.     property OnMouseMove;
  1893.     property OnMouseUp;
  1894.     property OnStartDock;
  1895.     property OnStartDrag;
  1896.   end;
  1897.   TbsSkinTrackEdit = class;
  1898.   TbsSkinPopupTrackBar = class(TbsSkinTrackBar)
  1899.   protected
  1900.     procedure WMMouseActivate(var Message: TMessage); message WM_MOUSEACTIVATE;
  1901.     procedure CreateParams(var Params: TCreateParams); override;
  1902.   public
  1903.     TrackEdit: TbsSkinTrackEdit;
  1904.     constructor Create(AOwner: TComponent); override;
  1905.   end;
  1906.   TbsSkinTrackEdit = class(TbsSkinCustomEdit)
  1907.   private
  1908.     FTrackBarSkinDataName: String;
  1909.     StopCheck: Boolean;
  1910.     FMinValue, FMaxValue, FValue: Integer;
  1911.     FAlphaBlend: Boolean;
  1912.     FAlphaBlendValue: Byte;
  1913.     FAlphaBlendAnimation: Boolean;
  1914.     FPopupTrackBar: TbsSkinPopupTrackBar;
  1915.     procedure SetValue(AValue: Integer);
  1916.     procedure SetMinValue(AValue: Integer);
  1917.     procedure SetMaxValue(AValue: Integer);
  1918.     procedure ButtonClick(Sender: TObject);
  1919.     procedure TrackBarChange(Sender: TObject);
  1920.     procedure DropDown;
  1921.     procedure CloseUp;
  1922.   protected
  1923.     function CheckValue(NewValue: Integer): Integer;
  1924.     procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  1925.     procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
  1926.     procedure KeyPress(var Key: Char); override;
  1927.     function IsValidChar(Key: Char): Boolean;
  1928.     procedure Change; override;
  1929.     procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
  1930.     property Text;
  1931.   public
  1932.     constructor Create(AOwner: TComponent); override;
  1933.     destructor Destroy; override;
  1934.     function IsNumText(AText: String): Boolean;
  1935.   published
  1936.     property TrackBarSkinDataName: String
  1937.       read FTrackBarSkinDataName write FTrackBarSkinDataName;
  1938.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  1939.     property AlphaBlendAnimation: Boolean
  1940.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  1941.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  1942.     property MinValue: Integer read FMinValue write SetMinValue;
  1943.     property MaxValue: Integer read FMaxValue write SetMaxValue;
  1944.     property Value: Integer read FValue write SetValue;
  1945.     property DefaultFont;
  1946.     property DefaultWidth;
  1947.     property DefaultHeight;
  1948.     property ButtonMode;
  1949.     property SkinData;
  1950.     property SkinDataName;
  1951.     property EditPasswordChar;
  1952.     property OnMouseEnter;
  1953.     property OnMouseLeave;
  1954.     property ReadOnly;
  1955.     property Align;
  1956.     property Font;
  1957.     property Anchors;
  1958.     property AutoSelect;
  1959.     property BiDiMode;
  1960.     property CharCase;
  1961.     property Constraints;
  1962.     property DragCursor;
  1963.     property DragKind;
  1964.     property DragMode;
  1965.     property Enabled;
  1966.     property HideSelection;
  1967.     property ImeMode;
  1968.     property ImeName;
  1969.     property MaxLength;
  1970.     property OEMConvert;
  1971.     property ParentBiDiMode;
  1972.     property ParentColor;
  1973.     property ParentCtl3D;
  1974.     property ParentFont;
  1975.     property ParentShowHint;
  1976.     property PopupMenu;
  1977.     property ShowHint;
  1978.     property TabOrder;
  1979.     property TabStop;
  1980.     property Visible;
  1981.     property OnButtonClick;
  1982.     property OnChange;
  1983.     property OnClick;
  1984.     property OnDblClick;
  1985.     property OnDragDrop;
  1986.     property OnDragOver;
  1987.     property OnEndDock;
  1988.     property OnEndDrag;
  1989.     property OnEnter;
  1990.     property OnExit;
  1991.     property OnKeyDown;
  1992.     property OnKeyPress;
  1993.     property OnKeyUp;
  1994.     property OnMouseDown;
  1995.     property OnMouseMove;
  1996.     property OnMouseUp;
  1997.     property OnStartDock;
  1998.     property OnStartDrag;
  1999.   end;
  2000.   TbsSkinMaskEdit = class(TbsSkinEdit)
  2001.   published
  2002.     property Anchors;
  2003.     property AutoSelect;
  2004.     property AutoSize;
  2005.     property BiDiMode;
  2006.     property BorderStyle;
  2007.     property CharCase;
  2008.     property Color;
  2009.     property Constraints;
  2010.     property Ctl3D;
  2011.     property DragCursor;
  2012.     property DragKind;
  2013.     property DragMode;
  2014.     property Enabled;
  2015.     property EditMask;
  2016.     property Font;
  2017.     property ImeMode;
  2018.     property ImeName;
  2019.     property MaxLength;
  2020.     property ParentBiDiMode;
  2021.     property ParentColor;
  2022.     property ParentCtl3D;
  2023.     property ParentFont;
  2024.     property ParentShowHint;
  2025.     property PasswordChar;
  2026.     property PopupMenu;
  2027.     property ReadOnly;
  2028.     property ShowHint;
  2029.     property TabOrder;
  2030.     property TabStop;
  2031.     property Visible;
  2032.     property OnChange;
  2033.     property OnClick;
  2034.     property OnDblClick;
  2035.     property OnDragDrop;
  2036.     property OnDragOver;
  2037.     property OnEndDock;
  2038.     property OnEndDrag;
  2039.     property OnEnter;
  2040.     property OnExit;
  2041.     property OnKeyDown;
  2042.     property OnKeyPress;
  2043.     property OnKeyUp;
  2044.     property OnMouseDown;
  2045.     property OnMouseMove;
  2046.     property OnMouseUp;
  2047.     property OnStartDock;
  2048.     property OnStartDrag;
  2049.   end;
  2050.   TbsSkinTimeEdit = class(TbsSkinMaskEdit)
  2051.   private
  2052.     fShowMSec: Boolean;
  2053.     procedure SetShowMilliseconds(const Value: Boolean);
  2054.     procedure SetMilliseconds(const Value: integer);
  2055.     function GetMilliseconds: integer;
  2056.     procedure SetTime(const Value: string);
  2057.     function GetTime: string;
  2058.     function IsValidTime(const AHour, AMinute, ASecond, AMilliSecond: Word): Boolean;
  2059.     function IsValidChar(Key: Char): Boolean;
  2060.     procedure CheckSpace(var S: String);
  2061.   protected
  2062.     procedure HandleOnKeyPress(Sender: TObject; var Key: Char);
  2063.   public
  2064.     constructor Create(AOwner: TComponent); override;
  2065.     procedure DecodeTime(var Hour, Min, Sec, MSec: Word);
  2066.     procedure EncodeTime(Hour, Min, Sec, MSec: Word);
  2067.     property ShowMSec: Boolean read fShowMSec write SetShowMilliseconds;
  2068.     property Milliseconds: integer read GetMilliseconds write SetMilliseconds;
  2069.     property Time: string read GetTime write SetTime;
  2070.   end;
  2071. implementation
  2072. Uses bsUtils, Consts, Printers;
  2073. const
  2074.   WS_EX_LAYERED = $80000;
  2075. //=========== TbsSkinUpDown ===============
  2076. constructor TbsSkinUpDown.Create;
  2077. begin
  2078.   inherited;
  2079.   SkinDataName := 'hupdown';
  2080.   FMin := 0;
  2081.   FMax := 100;
  2082.   FIncrement := 1;
  2083.   FPosition := 0;
  2084.   Width := 25;
  2085.   Height := 50;
  2086.   ActiveButton := -1;
  2087.   OldActiveButton := -1;
  2088.   CaptureButton := -1;
  2089.   TimerMode := 0;
  2090.   WaitMode := False;
  2091. end;
  2092. destructor TbsSkinUpDown.Destroy;
  2093. begin
  2094.   inherited;
  2095. end;
  2096. procedure TbsSkinUpDown.SetOrientation;
  2097. begin
  2098.   FOrientation := Value;
  2099.   RePaint;
  2100.   if (csDesigning in ComponentState) and not
  2101.      (csLoading in ComponentState)
  2102.   then
  2103.     begin
  2104.       if FOrientation = udHorizontal
  2105.       then FSkinDataName := 'hupdown'
  2106.       else FSkinDataName := 'vupdown';
  2107.     end;
  2108. end;
  2109. procedure TbsSkinUpDown.CreateControlSkinImage;
  2110. var
  2111.   i: Integer;
  2112. begin
  2113.   inherited;
  2114.   for i := 0 to 1 do DrawButton(B.Canvas, i);
  2115. end;
  2116. procedure TbsSkinUpDown.WMSIZE;
  2117. begin
  2118.   inherited;
  2119.   CalcRects;
  2120. end;
  2121. procedure TbsSkinUpDown.CreateControlDefaultImage;
  2122. var
  2123.   i: Integer;
  2124. begin
  2125.   CalcRects;
  2126.   for i := 0 to 1 do DrawButton(B.Canvas, i);
  2127. end;
  2128. procedure TbsSkinUpDown.CMMouseEnter;
  2129. begin
  2130.   ActiveButton := -1;
  2131.   OldActiveButton := -1;
  2132.   inherited;
  2133. end;
  2134. procedure TbsSkinUpDown.CMMouseLeave;
  2135. var
  2136.   i: Integer;
  2137. begin
  2138.   inherited;
  2139.   for i := 0 to 1 do
  2140.     if Buttons[i].MouseIn
  2141.     then
  2142.        begin
  2143.          Buttons[i].MouseIn := False;
  2144.          RePaint;
  2145.        end;
  2146. end;
  2147. procedure TbsSkinUpDown.DrawButton;
  2148. var
  2149.   C: TColor;
  2150.   R1: TRect;
  2151. begin
  2152.   if FIndex = -1
  2153.   then
  2154.     with Buttons[i] do
  2155.     begin
  2156.       R1 := R;
  2157.       if Down and MouseIn
  2158.       then
  2159.         begin
  2160.           Frame3D(Cnvs, R1, BS_XP_BTNFRAMECOLOR, BS_XP_BTNFRAMECOLOR, 1);
  2161.           Cnvs.Brush.Color := BS_XP_BTNDOWNCOLOR;
  2162.           Cnvs.FillRect(R1);
  2163.         end
  2164.       else
  2165.         if MouseIn
  2166.         then
  2167.           begin
  2168.             Frame3D(Cnvs, R1, BS_XP_BTNFRAMECOLOR, BS_XP_BTNFRAMECOLOR, 1);
  2169.             Cnvs.Brush.Color := BS_XP_BTNACTIVECOLOR;
  2170.             Cnvs.FillRect(R1);
  2171.           end
  2172.         else
  2173.           begin
  2174.             Frame3D(Cnvs, R1, clBtnShadow, clBtnShadow, 1);
  2175.             Cnvs.Brush.Color := clBtnFace;
  2176.             Cnvs.FillRect(R1);
  2177.           end;
  2178.       C := clBlack;
  2179.       if FOrientation = udVertical
  2180.       then
  2181.         case i of
  2182.           0: DrawArrowImage(Cnvs, R, C, 3);
  2183.           1: DrawArrowImage(Cnvs, R, C, 4);
  2184.         end
  2185.       else
  2186.         case i of
  2187.           1: DrawArrowImage(Cnvs, R, C, 1);
  2188.           0: DrawArrowImage(Cnvs, R, C, 2);
  2189.         end
  2190.     end
  2191.   else
  2192.     with Buttons[i] do
  2193.     begin
  2194.       R1 := NullRect;
  2195.       case I of
  2196.         0:
  2197.           begin
  2198.             if Down and MouseIn
  2199.             then R1 := DownUpButtonRect
  2200.             else if MouseIn then R1 := ActiveUpButtonRect;
  2201.           end;
  2202.         1:
  2203.           begin
  2204.             if Down and MouseIn
  2205.             then R1 := DownDownButtonRect
  2206.             else if MouseIn then R1 := ActiveDownButtonRect;
  2207.           end
  2208.       end;
  2209.       if not IsNullRect(R1)
  2210.       then
  2211.         Cnvs.CopyRect(R, Picture.Canvas, R1);
  2212.     end;
  2213. end;
  2214. procedure TbsSkinUpDown.MouseDown;
  2215. begin
  2216.   TestActive(X, Y);
  2217.   if ActiveButton <> -1
  2218.   then
  2219.     begin
  2220.       CaptureButton := ActiveButton;
  2221.       ButtonDown(ActiveButton, X, Y);
  2222.     end;
  2223.   inherited;
  2224. end;
  2225. procedure TbsSkinUpDown.MouseUp;
  2226. begin
  2227.   if CaptureButton <> -1
  2228.   then ButtonUp(CaptureButton, X, Y);
  2229.   CaptureButton := -1;
  2230.   inherited;
  2231. end;
  2232. procedure TbsSkinUpDown.MouseMove;
  2233. begin
  2234.   TestActive(X, Y);
  2235.   inherited;
  2236. end;
  2237. procedure TbsSkinUpDown.TestActive(X, Y: Integer);
  2238. var
  2239.   i, j: Integer;
  2240. begin
  2241.   j := -1;
  2242.   OldActiveButton := ActiveButton;
  2243.   for i := 0 to 1 do
  2244.   begin
  2245.     if PointInRect(Buttons[i].R, Point(X, Y))
  2246.     then
  2247.       begin
  2248.         j := i;
  2249.         Break;
  2250.       end;
  2251.   end;
  2252.   ActiveButton := j;
  2253.   if (CaptureButton <> -1) and
  2254.      (ActiveButton <> CaptureButton) and (ActiveButton <> -1)
  2255.   then
  2256.     ActiveButton := -1;
  2257.   if (OldActiveButton <> ActiveButton)
  2258.   then
  2259.     begin
  2260.       if OldActiveButton <> - 1
  2261.       then
  2262.         ButtonLeave(OldActiveButton);
  2263.       if ActiveButton <> -1
  2264.       then
  2265.         ButtonEnter(ActiveButton);
  2266.     end;
  2267. end;
  2268. procedure TbsSkinUpDown.ButtonDown;
  2269. begin
  2270.   Buttons[i].MouseIn := True;
  2271.   Buttons[i].Down := True;
  2272.   RePaint;
  2273.   if FIncrement <> 0
  2274.   then
  2275.     begin
  2276.       case i of
  2277.         0: TimerMode := 2;
  2278.         1: TimerMode := 1;
  2279.       end;
  2280.       WaitMode := True;
  2281.       SetTimer(Handle, 1, 500, nil);
  2282.     end;  
  2283. end;
  2284. procedure TbsSkinUpDown.ButtonUp;
  2285. begin
  2286.   Buttons[i].Down := False;
  2287.   if ActiveButton <> i then Buttons[i].MouseIn := False;
  2288.   RePaint;
  2289.   if Buttons[i].MouseIn
  2290.   then
  2291.   case i of
  2292.     0:
  2293.       begin
  2294.         if FIncrement <> 0 then Position := Position + FIncrement;
  2295.         if Assigned(FOnUpButtonClick) then FOnUpButtonClick(Self);
  2296.       end;
  2297.      1:
  2298.        begin
  2299.          if FIncrement <> 0 then Position := Position - FIncrement;
  2300.          if Assigned(FOnDownButtonClick) then FOnDownButtonClick(Self);
  2301.        end;
  2302.   end;
  2303.   if FIncrement <> 0 then StopTimer;
  2304. end;
  2305. procedure TbsSkinUpDown.ButtonEnter(I: Integer);
  2306. begin
  2307.   Buttons[i].MouseIn := True;
  2308.   RePaint;
  2309.   if (FIncrement <> 0) and Buttons[i].Down then SetTimer(Handle, 1, 50, nil);
  2310. end;
  2311. procedure TbsSkinUpDown.ButtonLeave(I: Integer);
  2312. begin
  2313.   Buttons[i].MouseIn := False;
  2314.   RePaint;
  2315.   if (FIncrement <> 0) and Buttons[i].Down then KillTimer(Handle, 1);
  2316. end;
  2317. procedure TbsSkinUpDown.CalcRects;
  2318. var
  2319.   OX: Integer;
  2320.   NewClRect: TRect;
  2321. begin
  2322.   if FIndex = -1
  2323.   then
  2324.     begin
  2325.       if FOrientation = udVertical
  2326.       then
  2327.         begin
  2328.           Buttons[0].R := Rect(0, 0, Width, Height div 2);
  2329.           Buttons[1].R := Rect(0, Height div 2, Width, Height);
  2330.         end
  2331.       else
  2332.         begin
  2333.           Buttons[1].R := Rect(0, 0, Width div 2, Height);
  2334.           Buttons[0].R := Rect(Width div 2, 0, Width, Height);
  2335.         end;
  2336.     end
  2337.   else
  2338.     begin
  2339.       Buttons[0].R := UpButtonRect;
  2340.       Buttons[1].R := DownButtonRect;
  2341.     end;
  2342. end;
  2343. procedure TbsSkinUpDown.StartTimer;
  2344. begin
  2345.   KillTimer(Handle, 1);
  2346.   SetTimer(Handle, 1, 100, nil);
  2347. end;
  2348. procedure TbsSkinUpDown.StopTimer;
  2349. begin
  2350.   KillTimer(Handle, 1);
  2351.   TimerMode := 0;
  2352. end;
  2353. procedure TbsSkinUpDown.WMTimer;
  2354. var
  2355.   CanScroll: Boolean;
  2356. begin
  2357.   inherited;
  2358.   if WaitMode
  2359.   then
  2360.     begin
  2361.       WaitMode := False;
  2362.       StartTimer;
  2363.       Exit;
  2364.     end;
  2365.   case TimerMode of
  2366.     1: Position := Position - FIncrement;
  2367.     2: Position := Position + FIncrement;
  2368.   end;
  2369. end;
  2370. procedure TbsSkinUpDown.GetSkinData;
  2371. begin
  2372.   inherited;
  2373.   if FIndex <> -1
  2374.   then
  2375.     if TbsDataSkinControl(FSD.CtrlList.Items[FIndex]) is TbsDataSkinUpDownControl
  2376.     then
  2377.       with TbsDataSkinUpDownControl(FSD.CtrlList.Items[FIndex]) do
  2378.       begin
  2379.         Self.UpButtonRect := UpButtonRect;
  2380.         Self.ActiveUpButtonRect := ActiveUpButtonRect;
  2381.         Self.DownUpButtonRect := DownUpButtonRect;
  2382.         if IsNullRect(Self.DownUpButtonRect)
  2383.         then Self.DownUpButtonRect := Self.ActiveUpButtonRect;
  2384.         Self.DownButtonRect := DownButtonRect;
  2385.         Self.ActiveDownButtonRect := ActiveDownButtonRect;
  2386.         Self.DownDownButtonRect := DownDownButtonRect;
  2387.         if IsNullRect(Self.DownDownButtonRect)
  2388.         then Self.DownDownButtonRect := Self.ActiveDownButtonRect;
  2389.         LTPt := Point(0, 0);
  2390.         RTPt := Point(0, 0);
  2391.         LBPt := Point(0, 0);
  2392.         RBPt := Point(0, 0);
  2393.         ClRect := NullRect;
  2394.       end;
  2395.   CalcRects;    
  2396. end;
  2397. procedure TbsSkinUpDown.SetIncrement;
  2398. begin
  2399.   FIncrement := Value;
  2400. end;
  2401. procedure TbsSkinUpDown.SetPosition;
  2402. begin
  2403.   if (Value <= FMax) and (Value >= FMin)
  2404.   then
  2405.     begin
  2406.       FPosition := Value;
  2407.       if not (csDesigning in ComponentState) and Assigned(FOnChange)
  2408.       then
  2409.         FOnChange(Self);
  2410.     end;
  2411. end;
  2412. procedure TbsSkinUpDown.SetMin;
  2413. begin
  2414.   FMin := Value;
  2415.   if FPosition < FMin then FPosition := FMin;
  2416. end;
  2417. procedure TbsSkinUpDown.SetMax;
  2418. begin
  2419.   FMax := Value;
  2420.   if FPosition > FMax then FPosition := FMax;
  2421. end;
  2422. constructor TbsSkinSpinEdit.Create(AOwner: TComponent);
  2423. begin
  2424.   inherited;
  2425.   ControlStyle := [csCaptureMouse, csOpaque, csDoubleClicks, csAcceptsControls];
  2426.   ActiveButton := -1;
  2427.   OldActiveButton := -1;
  2428.   CaptureButton := -1;
  2429.   FValue := 0;
  2430.   FromEdit := False;
  2431.   FEdit := TbsSkinNumEdit.Create(Self);
  2432.   FEdit.Font.Assign(FDefaultFont);
  2433.   FIncrement := 1;
  2434.   FDecimal := 2;
  2435.   TimerMode := 0;
  2436.   WaitMode := False;
  2437.   FEdit.Parent := Self;
  2438.   FEdit.AutoSize := False;
  2439.   FEdit.Visible := True;
  2440.   FEdit.EditTransparent := False;
  2441.   FEdit.OnChange := EditChange;
  2442.   FEdit.OnUpClick := UpClick;
  2443.   FEdit.OnDownClick := DownClick;
  2444.   FEdit.OnKeyUp := EditKeyUp;
  2445.   FEdit.OnKeyDown := EditKeyDown;
  2446.   FEdit.OnKeyPress := EditKeyPress;
  2447.   FEdit.OnEnter := EditEnter;
  2448.   FEdit.OnExit := EditExit;
  2449.   StopCheck := True;
  2450.   Text := '0';
  2451.   StopCheck := False;
  2452.   Width := 120;
  2453.   Height := 20;
  2454.   FSkinDataName := 'spinedit';
  2455. end;
  2456. destructor TbsSkinSpinEdit.Destroy;
  2457. begin
  2458.   FEdit.Free;
  2459.   inherited;
  2460. end;
  2461. procedure TbsSkinSpinEdit.SetValueType(NewType: TbsValueType);
  2462. begin
  2463.   if FValueType <> NewType
  2464.   then
  2465.     begin
  2466.       FEdit.Float := ValueType = vtFloat;
  2467.       FValueType := NewType;
  2468.       if FValueType = vtInteger
  2469.       then
  2470.         begin
  2471.           FIncrement := Round(FIncrement);
  2472.           if FIncrement = 0 then FIncrement := 1;
  2473.         end;
  2474.   end;
  2475.   FEdit.Float := ValueType = vtFloat;
  2476. end;
  2477. procedure TbsSkinSpinEdit.SetDecimal(NewValue: Byte);
  2478. begin
  2479.   if FDecimal <> NewValue then begin
  2480.     FDecimal := NewValue;
  2481.   end;
  2482. end;
  2483. procedure TbsSkinSpinEdit.Change;
  2484. begin
  2485.   if Assigned(FOnChange) then FOnChange(Self);
  2486. end;
  2487. procedure TbsSkinSpinEdit.DefaultFontChange;
  2488. begin
  2489.   if (FIndex = -1) and (FEdit <> nil) then FEdit.Font.Assign(FDefaultFont);
  2490. end;
  2491. procedure TbsSkinSpinEdit.GetSkinData;
  2492. begin
  2493.   inherited;
  2494.   if FIndex <> -1
  2495.   then
  2496.     if TbsDataSkinControl(FSD.CtrlList.Items[FIndex]) is TbsDataSkinSpinEditControl
  2497.     then
  2498.       with TbsDataSkinSpinEditControl(FSD.CtrlList.Items[FIndex]) do
  2499.       begin
  2500.         Self.FontName := FontName;
  2501.         Self.FontStyle := FontStyle;
  2502.         Self.FontHeight := FontHeight;
  2503.         Self.FontColor := FontColor;
  2504.         Self.UpButtonRect := UpButtonRect;
  2505.         Self.ActiveUpButtonRect := ActiveUpButtonRect;
  2506.         Self.DownUpButtonRect := DownUpButtonRect;
  2507.         if IsNullRect(Self.DownUpButtonRect)
  2508.         then Self.DownUpButtonRect := Self.ActiveUpButtonRect;
  2509.         Self.DownButtonRect := DownButtonRect;
  2510.         Self.ActiveDownButtonRect := ActiveDownButtonRect;
  2511.         Self.DownDownButtonRect := DownDownButtonRect;
  2512.         if IsNullRect(Self.DownDownButtonRect)
  2513.         then Self.DownDownButtonRect := Self.ActiveDownButtonRect;
  2514.       end;
  2515. end;
  2516. procedure TbsSkinSpinEdit.ChangeSkinData;
  2517. begin
  2518.   inherited;
  2519.   if FIndex <> -1
  2520.   then
  2521.     with FEdit.Font do
  2522.     begin
  2523.       if FUseSkinFont
  2524.       then
  2525.         begin
  2526.           Style := FontStyle;
  2527.           Color := FontColor;
  2528.           Height := FontHeight;
  2529.           Name := FontName;
  2530.           CharSet := FDefaultFont.CharSet;
  2531.         end
  2532.       else
  2533.         begin
  2534.           Assign(FDefaultFont);
  2535.           Color := FontColor;
  2536.         end;
  2537.     end
  2538.   else
  2539.     FEdit.Font.Assign(FDefaultFont);
  2540.   if FIndex <> -1
  2541.   then
  2542.     begin
  2543.       FEdit.EditTransparent := True;
  2544.       Height := RectHeight(SkinRect);
  2545.     end
  2546.   else
  2547.     begin
  2548.       FEdit.EditTransparent := False;
  2549.     end;
  2550.   CalcRects;
  2551.   RePaint;
  2552. end;
  2553. procedure TbsSkinSpinEdit.EditEnter;
  2554. begin
  2555.   if Assigned(FOnEditEnter) then FOnEditEnter(Self);
  2556. end;
  2557. procedure TbsSkinSpinEdit.EditExit;
  2558. begin
  2559.   if Assigned(FOnEditExit) then FOnEditExit(Self);
  2560. end;
  2561. procedure TbsSkinSpinEdit.EditKeyDown;
  2562. begin
  2563.   if Assigned(FOnEditKeyDown) then FOnEditKeyDown(Self, Key, Shift);
  2564. end;
  2565. procedure TbsSkinSpinEdit.EditKeyUp;
  2566. begin
  2567.   if Assigned(FOnEditKeyUp) then FOnEditKeyUp(Self, Key, Shift);
  2568. end;
  2569. procedure TbsSkinSpinEdit.EditKeyPress;
  2570. begin
  2571.   if Assigned(FOnEditKeyPress) then FOnEditKeyPress(Self, Key);
  2572. end;
  2573. procedure TbsSkinSpinEdit.UpClick;
  2574. begin
  2575.   Value := Value + FIncrement;
  2576. end;
  2577. procedure TbsSkinSpinEdit.DownClick;
  2578. begin
  2579.   Value := Value - FIncrement;
  2580. end;
  2581. procedure TbsSkinSpinEdit.SetMaxLength;
  2582. begin
  2583.   FEdit.MaxLength := AValue;
  2584. end;
  2585. function  TbsSkinSpinEdit.GetMaxLength;
  2586. begin
  2587.   Result := FEdit.MaxLength;
  2588. end;
  2589. procedure TbsSkinSpinEdit.SetEditorEnabled;
  2590. begin
  2591.   FEdit.EditorEnabled := AValue;
  2592. end;
  2593. function  TbsSkinSpinEdit.GetEditorEnabled;
  2594. begin
  2595.   Result := FEdit.EditorEnabled;
  2596. end;
  2597. procedure TbsSkinSpinEdit.StartTimer;
  2598. begin
  2599.   KillTimer(Handle, 1);
  2600.   SetTimer(Handle, 1, 100, nil);
  2601. end;
  2602. procedure TbsSkinSpinEdit.StopTimer;
  2603. begin
  2604.   KillTimer(Handle, 1);
  2605.   TimerMode := 0;
  2606. end;
  2607. function TbsSkinSpinEdit.CheckValue;
  2608. begin
  2609.   Result := NewValue;
  2610.   if (FMaxValue <> FMinValue)
  2611.   then
  2612.     begin
  2613.       if NewValue < FMinValue then
  2614.       Result := FMinValue
  2615.       else if NewValue > FMaxValue then
  2616.       Result := FMaxValue;
  2617.     end;
  2618. end;
  2619. procedure TbsSkinSpinEdit.WMTimer;
  2620. var
  2621.   CanScroll: Boolean;
  2622. begin
  2623.   inherited;
  2624.   if WaitMode
  2625.   then
  2626.     begin
  2627.       WaitMode := False;
  2628.       StartTimer;
  2629.       Exit;
  2630.     end;
  2631.   case TimerMode of
  2632.     1: Value := Value - FIncrement;
  2633.     2: Value := Value + FIncrement;
  2634.   end;
  2635. end;
  2636. procedure TbsSkinSpinEdit.SetMinValue;
  2637. begin
  2638.   FMinValue := AValue;
  2639. end;
  2640. procedure TbsSkinSpinEdit.SetMaxValue;
  2641. begin
  2642.   FMaxValue := AValue;
  2643. end;
  2644. procedure TbsSkinSpinEdit.CMMouseEnter;
  2645. begin
  2646.   inherited;
  2647.   TestActive(-1, -1);
  2648. end;
  2649. function TbsSkinSpinEdit.IsNumText;
  2650. function GetMinus: Boolean;
  2651. var
  2652.   i: Integer;
  2653.   S: String;
  2654. begin
  2655.   S := AText;
  2656.   i := Pos('-', S);
  2657.   if i > 1
  2658.   then
  2659.     Result := False
  2660.   else
  2661.     begin
  2662.       Delete(S, i, 1);
  2663.       Result := Pos('-', S) = 0;
  2664.     end;
  2665. end;
  2666. function GetP: Boolean;
  2667. var
  2668.   i: Integer;
  2669.   S: String;
  2670. begin
  2671.   S := AText;
  2672.   i := Pos(DecimalSeparator, S);
  2673.   if i = 1
  2674.   then
  2675.     Result := False
  2676.   else
  2677.     begin
  2678.       Delete(S, i, 1);
  2679.       Result := Pos(DecimalSeparator, S) = 0;
  2680.     end;
  2681. end;
  2682. const
  2683.   EditChars = '01234567890-';
  2684. var
  2685.   i: Integer;
  2686.   S: String;
  2687. begin
  2688.   S := EditChars;
  2689.   Result := True;
  2690.   if ValueType = vtFloat
  2691.   then
  2692.     S := S + DecimalSeparator;
  2693.   if (Text = '') or (Text = '-')
  2694.   then
  2695.     begin
  2696.       Result := False;
  2697.       Exit;
  2698.     end;
  2699.   for i := 1 to Length(Text) do
  2700.   begin
  2701.     if Pos(Text[i], S) = 0
  2702.     then
  2703.       begin
  2704.         Result := False;
  2705.         Break;
  2706.       end;
  2707.   end;
  2708.   Result := Result and GetMinus;
  2709.   if ValueType = vtFloat
  2710.   then
  2711.     Result := Result and GetP;
  2712. end;
  2713. procedure TbsSkinSpinEdit.CMTextChanged;
  2714. var
  2715.   NewValue: Double;
  2716.   IsChecked: Boolean;
  2717. begin
  2718.   inherited;
  2719.   if (FEdit <> nil) and not FromEdit then FEdit.Text := Text;
  2720.   if not StopCheck and IsNumText(FEdit.Text)
  2721.   then
  2722.     begin
  2723.       if ValueType = vtFloat
  2724.       then NewValue := CheckValue(StrToFloat(FEdit.Text))
  2725.       else NewValue := CheckValue(StrToInt(FEdit.Text));
  2726.       if NewValue <> FValue
  2727.       then
  2728.         begin
  2729.           FValue := NewValue;
  2730.           Change;
  2731.         end;
  2732.       if (ValueType = vtFloat) and (NewValue <> StrToFloat(FEdit.Text))
  2733.       then
  2734.         FEdit.Text := FloatToStrF(Value, ffFixed, 15, FDecimal)
  2735.       else
  2736.       if (ValueType = vtInteger) and (NewValue <> StrToInt(FEdit.Text))
  2737.       then
  2738.         FEdit.Text := IntToStr(Round(Value));
  2739.     end;
  2740. end;
  2741. procedure TbsSkinSpinEdit.CMMouseLeave;
  2742. var
  2743.   i: Integer;
  2744. begin
  2745.   inherited;
  2746.   for i := 0 to 1 do
  2747.     if Buttons[i].MouseIn
  2748.     then
  2749.        begin
  2750.          Buttons[i].MouseIn := False;
  2751.          RePaint;
  2752.        end;
  2753. end;
  2754. procedure TbsSkinSpinEdit.EditChange;
  2755. begin
  2756.   FromEdit := True;
  2757.   Text := FEdit.Text;
  2758.   FromEdit := False;
  2759. end;
  2760. procedure TbsSkinSpinEdit.Invalidate;
  2761. begin
  2762.   inherited;
  2763.   if (FIndex <> -1) and (FEdit <> nil) then FEdit.Invalidate;
  2764. end;
  2765. procedure TbsSkinSpinEdit.WMSIZE;
  2766. begin
  2767.   inherited;
  2768.   CalcRects;
  2769. end;
  2770. procedure TbsSkinSpinEdit.TestActive(X, Y: Integer);
  2771. var
  2772.   i, j: Integer;
  2773. begin
  2774.   j := -1;
  2775.   OldActiveButton := ActiveButton;
  2776.   for i := 0 to 1 do
  2777.   begin
  2778.     if PtInRect(Buttons[i].R, Point(X, Y))
  2779.     then
  2780.       begin
  2781.         j := i;
  2782.         Break;
  2783.       end;
  2784.   end;
  2785.   ActiveButton := j;
  2786.   if (CaptureButton <> -1) and
  2787.      (ActiveButton <> CaptureButton) and (ActiveButton <> -1)
  2788.   then
  2789.     ActiveButton := -1;
  2790.   if (OldActiveButton <> ActiveButton)
  2791.   then
  2792.     begin
  2793.       if OldActiveButton <> - 1
  2794.       then
  2795.         ButtonLeave(OldActiveButton);
  2796.       if ActiveButton <> -1
  2797.       then
  2798.         ButtonEnter(ActiveButton);
  2799.     end;
  2800. end;
  2801. procedure TbsSkinSpinEdit.ButtonDown;
  2802. begin
  2803.   Buttons[i].MouseIn := True;
  2804.   Buttons[i].Down := True;
  2805.   RePaint;
  2806.   case i of
  2807.     0: TimerMode := 2;
  2808.     1: TimerMode := 1;
  2809.   end;
  2810.   WaitMode := True;
  2811.   SetTimer(Handle, 1, 500, nil);
  2812. end;
  2813. procedure TbsSkinSpinEdit.ButtonUp;
  2814. begin
  2815.   Buttons[i].Down := False;
  2816.   if ActiveButton <> i then Buttons[i].MouseIn := False;
  2817.   RePaint;
  2818.   if Buttons[i].MouseIn
  2819.   then
  2820.   case i of
  2821.     0: Value := Value + FIncrement;
  2822.     1: Value := Value - FIncrement;
  2823.   end;
  2824.   StopTimer;
  2825. end;
  2826. procedure TbsSkinSpinEdit.ButtonEnter(I: Integer);
  2827. begin
  2828.   Buttons[i].MouseIn := True;
  2829.   RePaint;
  2830.   if Buttons[i].Down then SetTimer(Handle, 1, 50, nil);
  2831. end;
  2832. procedure TbsSkinSpinEdit.ButtonLeave(I: Integer);
  2833. begin
  2834.   Buttons[i].MouseIn := False;
  2835.   RePaint;
  2836.   if Buttons[i].Down then KillTimer(Handle, 1);
  2837. end;
  2838. procedure TbsSkinSpinEdit.CalcRects;
  2839. const
  2840.   ButtonW = 15;
  2841. var
  2842.   OX: Integer;
  2843.   NewClRect: TRect;
  2844. begin
  2845.   if FIndex = -1
  2846.   then
  2847.     begin
  2848.       Buttons[0].R := Rect(Width - ButtonW - 2, 2, Width - 2, Height div 2);
  2849.       Buttons[1].R := Rect(Width - ButtonW - 2, Height div 2, Width - 2, Height - 2);
  2850.       FEdit.SetBounds(2, 2, Width - ButtonW - 4, Height - 4);
  2851.     end
  2852.   else
  2853.     begin
  2854.       OX := Width - RectWidth(SkinRect);
  2855.       Buttons[0].R := UpButtonRect;
  2856.       if Buttons[0].R.Left > RTPt.X
  2857.       then OffsetRect(Buttons[0].R, OX, 0);
  2858.       Buttons[1].R := DownButtonRect;
  2859.       if Buttons[1].R.Left > RTPt.X
  2860.       then OffsetRect(Buttons[1].R, OX, 0);
  2861.       NewClRect := Rect(ClRect.Left, ClRect.Top,
  2862.                         ClRect.Right + OX, ClRect.Bottom);
  2863.       FEdit.SetBounds(NewClRect.Left, NewClRect.Top,
  2864.                       RectWidth(NewClRect), RectHeight(NewClRect));
  2865.     end;
  2866. end;
  2867. procedure TbsSkinSpinEdit.SimpleSetValue(AValue: Double);
  2868. begin
  2869.   FValue := CheckValue(AValue);
  2870.   StopCheck := True;
  2871.   if ValueType = vtFloat
  2872.   then
  2873.     Text := FloatToStrF(CheckValue(AValue), ffFixed, 15, FDecimal)
  2874.   else
  2875.     Text := IntToStr(Round(CheckValue(AValue)));
  2876.   StopCheck := False;
  2877. end;
  2878. procedure TbsSkinSpinEdit.SetValue;
  2879. begin
  2880.   FValue := CheckValue(AValue);
  2881.   StopCheck := True;
  2882.   if ValueType = vtFloat
  2883.   then
  2884.     Text := FloatToStrF(CheckValue(AValue), ffFixed, 15, FDecimal)
  2885.   else
  2886.     Text := IntToStr(Round(CheckValue(AValue)));
  2887.   StopCheck := False;
  2888.   Change;
  2889. end;
  2890. procedure TbsSkinSpinEdit.CreateControlSkinImage;
  2891. var
  2892.   i: Integer;
  2893. begin
  2894.   inherited;
  2895.   for i := 0 to 1 do DrawButton(B.Canvas, i);
  2896. end;
  2897. procedure TbsSkinSpinEdit.DrawButton;
  2898. var
  2899.   C: TColor;
  2900.   kf: Double;
  2901.   R1: TRect;
  2902. begin
  2903.   if FIndex = -1
  2904.   then
  2905.     with Buttons[i] do
  2906.     begin
  2907.       R1 := R;
  2908.       if Down and MouseIn
  2909.       then
  2910.         begin
  2911.           Frame3D(Cnvs, R1, BS_XP_BTNFRAMECOLOR, BS_XP_BTNFRAMECOLOR, 1);
  2912.           Cnvs.Brush.Color := BS_XP_BTNDOWNCOLOR;
  2913.           Cnvs.FillRect(R1);
  2914.         end
  2915.       else
  2916.         if MouseIn
  2917.         then
  2918.           begin
  2919.             Frame3D(Cnvs, R1, BS_XP_BTNFRAMECOLOR, BS_XP_BTNFRAMECOLOR, 1);
  2920.             Cnvs.Brush.Color := BS_XP_BTNACTIVECOLOR;
  2921.             Cnvs.FillRect(R1);
  2922.           end
  2923.         else
  2924.           begin
  2925.             Cnvs.Brush.Color := clBtnFace;
  2926.             Cnvs.FillRect(R1);
  2927.           end;
  2928.       C := clBlack;
  2929.       case i of
  2930.         0: DrawArrowImage(Cnvs, R1, C, 3);
  2931.         1: DrawArrowImage(Cnvs, R1, C, 4);
  2932.       end;
  2933.     end
  2934.   else
  2935.     with Buttons[i] do
  2936.     begin
  2937.       R1 := NullRect;
  2938.       case I of
  2939.         0:
  2940.           begin
  2941.             if Down and MouseIn
  2942.             then R1 := DownUpButtonRect
  2943.             else if MouseIn then R1 := ActiveUpButtonRect;
  2944.           end;
  2945.         1:
  2946.           begin
  2947.             if Down and MouseIn
  2948.             then R1 := DownDownButtonRect
  2949.             else if MouseIn then R1 := ActiveDownButtonRect;
  2950.           end
  2951.       end;
  2952.       if not IsNullRect(R1)
  2953.       then
  2954.         Cnvs.CopyRect(R, Picture.Canvas, R1);
  2955.     end;
  2956. end;
  2957. procedure TbsSkinSpinEdit.CreateControlDefaultImage;
  2958. var
  2959.   R: TRect;
  2960.   i: Integer;
  2961. begin
  2962.   with B.Canvas do
  2963.   begin
  2964.     R := Rect(0, 0, Width, Height);
  2965.     Frame3D(B.Canvas, R, clBtnShadow, clBtnShadow, 1);
  2966.     Frame3D(B.Canvas, R, clBtnFace, clBtnFace, 1);
  2967.   end;
  2968.   for i := 0 to 1 do DrawButton(B.Canvas, i);
  2969. end;
  2970. procedure TbsSkinSpinEdit.MouseDown;
  2971. begin
  2972.   TestActive(X, Y);
  2973.   if ActiveButton <> -1
  2974.   then
  2975.     begin
  2976.       CaptureButton := ActiveButton;
  2977.       ButtonDown(ActiveButton, X, Y);
  2978.     end;
  2979.   inherited;
  2980. end;
  2981. procedure TbsSkinSpinEdit.MouseUp;
  2982. begin
  2983.   if CaptureButton <> -1
  2984.   then ButtonUp(CaptureButton, X, Y);
  2985.   CaptureButton := -1;
  2986.   inherited;
  2987. end;
  2988. procedure TbsSkinSpinEdit.MouseMove;
  2989. begin
  2990.   inherited;
  2991.   TestActive(X, Y);
  2992. end;
  2993. constructor TbsPopupListBox.Create(AOwner: TComponent);
  2994. begin
  2995.   inherited Create(AOwner);
  2996.   ControlStyle := ControlStyle + [csNoDesignVisible, csReplicatable,
  2997.     csAcceptsControls];
  2998.   Ctl3D := False;
  2999.   ParentCtl3D := False;
  3000.   Visible := False;
  3001.   FOldAlphaBlend := False;
  3002.   FOldAlphaBlendValue := 0;
  3003. end;
  3004. procedure TbsPopupListBox.CreateParams(var Params: TCreateParams);
  3005. begin
  3006.   inherited CreateParams(Params);
  3007.   with Params do begin
  3008.     Style := WS_POPUP or WS_CLIPCHILDREN;
  3009.     ExStyle := WS_EX_TOOLWINDOW;
  3010.     WindowClass.Style := WindowClass.Style or CS_SAVEBITS;
  3011.   end;
  3012. end;
  3013. procedure TbsPopupListBox.WMMouseActivate(var Message: TMessage);
  3014. begin
  3015.   Message.Result := MA_NOACTIVATE;
  3016. end;
  3017. procedure TbsPopupListBox.Hide;
  3018. begin
  3019.   SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or
  3020.     SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);
  3021.   Visible := False;
  3022. end;
  3023. procedure TbsPopupListBox.Show(Origin: TPoint);
  3024. var
  3025.   PLB: TbsSkinCustomComboBox;
  3026.   I: Integer;
  3027. begin
  3028.   //
  3029.   if CheckW2KWXP and (Owner is TbsSkinCustomComboBox)
  3030.   then
  3031.     begin
  3032.       PLB := TbsSkinCustomComboBox(Owner);
  3033.       if PLB.AlphaBlend and not FOldAlphaBlend
  3034.       then
  3035.         begin
  3036.           SetWindowLong(Handle, GWL_EXSTYLE,
  3037.                         GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  3038.         end
  3039.       else
  3040.       if not PLB.AlphaBlend and FOldAlphaBlend
  3041.       then
  3042.         begin
  3043.          SetWindowLong(Handle, GWL_EXSTYLE,
  3044.             GetWindowLong(Handle, GWL_EXSTYLE) and (not WS_EX_LAYERED));
  3045.         end;
  3046.       FOldAlphaBlend := PLB.AlphaBlend;
  3047.       if (FOldAlphaBlendValue <> PLB.AlphaBlendValue) and PLB.AlphaBlend
  3048.       then
  3049.         begin
  3050.           if PLB.AlphaBlendAnimation
  3051.           then
  3052.             begin
  3053.               SetAlphaBlendTransparent(Handle, 0);
  3054.               FOldAlphaBlendValue := 0;
  3055.             end
  3056.           else
  3057.             begin
  3058.               SetAlphaBlendTransparent(Handle, PLB.AlphaBlendValue);
  3059.               FOldAlphaBlendValue := PLB.AlphaBlendValue;
  3060.              end;
  3061.         end;
  3062.     end;
  3063.   //
  3064.   SetWindowPos(Handle, HWND_TOP, Origin.X, Origin.Y, 0, 0,
  3065.     SWP_NOACTIVATE or SWP_SHOWWINDOW or SWP_NOSIZE);
  3066.   Visible := True;
  3067.   if PLB.AlphaBlendAnimation and PLB.AlphaBlend and CheckW2KWXP
  3068.   then
  3069.     begin
  3070.       Application.ProcessMessages;
  3071.       I := 0;
  3072.       repeat
  3073.         Inc(i, 2);
  3074.         if i > PLB.AlphaBlendValue then i := PLB.AlphaBlendValue;
  3075.         SetAlphaBlendTransparent(Handle, i);
  3076.       until i >= PLB.FAlphaBlendValue;
  3077.     end;
  3078. end;
  3079. constructor TbsCustomEdit.Create(AOwner: TComponent);
  3080. begin
  3081.   inherited Create(AOwner);
  3082.   ControlStyle := ControlStyle + [csOpaque];
  3083.   FEditTransparent := False;
  3084. end;
  3085. procedure TbsCustomEdit.CMCancelMode;
  3086. begin
  3087.   inherited;
  3088.   if Assigned(FOnEditCancelMode)
  3089.   then FOnEditCancelMode(Message.Sender);
  3090. end;
  3091. procedure TbsCustomEdit.SetEditTransparent(Value: Boolean);
  3092. begin
  3093.   FEditTransparent := Value;
  3094.   ReCreateWnd;
  3095. end;
  3096. procedure TbsCustomEdit.WMSetFont;
  3097. begin
  3098.   inherited;
  3099.   SendMessage(Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLong(2, 0));
  3100. end;
  3101. procedure TbsCustomEdit.CreateParams(var Params: TCreateParams);
  3102. begin
  3103.   inherited CreateParams(Params);
  3104.   with Params do
  3105.   begin
  3106.     Style := Style and not WS_BORDER;
  3107.     ExStyle := ExStyle and not WS_EX_CLIENTEDGE;
  3108.     if FEditTransparent then ExStyle := ExStyle or WS_EX_TRANSPARENT;
  3109.   end;
  3110. end;
  3111. procedure TbsCustomEdit.WMCHAR;
  3112. begin
  3113.   if not FReadOnly then inherited;
  3114. end;
  3115. procedure TbsCustomEdit.CNCTLCOLOREDIT(var Message:TWMCTLCOLOREDIT);
  3116. begin
  3117.  if FEditTransparent
  3118.  then
  3119.    begin
  3120.      with Message do
  3121.      begin
  3122.        SetBkMode(ChildDC, Windows.Transparent);
  3123.        SetTextColor(ChildDC, Font.Color);
  3124.        Result := GetStockObject(HOLLOW_BRUSH);
  3125.      end
  3126.    end
  3127.  else
  3128.   inherited;
  3129. end;
  3130. procedure TbsCustomEdit.WMEraseBkgnd(var Message: TWMEraseBkgnd);
  3131. begin
  3132.   if FEditTransparent then Invalidate else inherited;
  3133. end;
  3134. procedure TbsCustomEdit.Invalidate;
  3135. var
  3136.   R: TRect;
  3137. begin
  3138.   if FEditTransparent
  3139.   then
  3140.     begin
  3141.       if Parent = nil then Exit;
  3142.       R := ClientRect;
  3143.       R.TopLeft := Parent.ScreenToClient(ClientToScreen(R.TopLeft));
  3144.       R.BottomRight := Parent.ScreenToClient(ClientToScreen(R.BottomRight));
  3145.       InvalidateRect(Parent.Handle, @R, True);
  3146.       RedrawWindow(Handle, nil, 0, RDW_FRAME + RDW_INVALIDATE);
  3147.     end
  3148.   else
  3149.     inherited;
  3150. end;
  3151. procedure TbsCustomEdit.Change;
  3152. begin
  3153.   inherited;
  3154.   if FEditTransparent then Invalidate;
  3155. end;
  3156. procedure TbsCustomEdit.WMKeyDown(var Message: TWMKeyDown);
  3157. begin
  3158.   if FReadOnly and (Message.CharCode = VK_DELETE) then Exit;
  3159.   inherited;
  3160.   if FEditTransparent then Invalidate;
  3161. end;
  3162. procedure TbsCustomEdit.WMKeyUp;
  3163. begin
  3164.   inherited;
  3165. end;
  3166. procedure TbsCustomEdit.WMSetText(var Message:TWMSetText);
  3167. begin
  3168.   inherited;
  3169.   if FEditTransparent then Invalidate;
  3170. end;
  3171. procedure TbsCustomEdit.WMMove(var Message: TMessage);
  3172. begin
  3173.   inherited;
  3174.   if FEditTransparent then Invalidate;
  3175. end;
  3176. procedure TbsCustomEdit.WMCut(var Message: TMessage);
  3177. begin
  3178.   if FReadOnly then Exit;
  3179.   inherited;
  3180.   if FEditTransparent then Invalidate;
  3181. end;
  3182. procedure TbsCustomEdit.WMPaste(var Message: TMessage);
  3183. begin
  3184.   if FReadOnly then Exit;
  3185.   inherited;
  3186.   if FEditTransparent then Invalidate;
  3187. end;
  3188. procedure TbsCustomEdit.WMClear(var Message: TMessage);
  3189. begin
  3190.   if FReadOnly then Exit;
  3191.   inherited;
  3192.   if FEditTransparent then Invalidate;
  3193. end;
  3194. procedure TbsCustomEdit.WMUndo(var Message: TMessage);
  3195. begin
  3196.   if FReadOnly then Exit;
  3197.   inherited;
  3198.   if FEditTransparent then Invalidate;
  3199. end;
  3200. procedure TbsCustomEdit.WMLButtonDown(var Message: TMessage);
  3201. begin
  3202.   inherited;
  3203.   FDown := True;
  3204.   if FEditTransparent then Invalidate;
  3205. end;
  3206. procedure TbsCustomEdit.WMSETFOCUS;
  3207. begin
  3208.   inherited;
  3209.   if FEditTransparent then Invalidate;
  3210. end;
  3211. procedure TbsCustomEdit.WMKILLFOCUS;
  3212. begin
  3213.   inherited;
  3214.   if FEditTransparent then Invalidate;
  3215. end;
  3216. procedure TbsCustomEdit.WMMOUSEMOVE;
  3217. begin
  3218.   inherited;
  3219.   if FDown and EditTransparent then Invalidate;
  3220. end;
  3221. procedure TbsCustomEdit.WMLButtonUp;
  3222. begin
  3223.   inherited;
  3224.   FDown := False;
  3225. end;
  3226. constructor TbsSkinNumEdit.Create(AOwner: TComponent);
  3227. begin
  3228.   inherited;
  3229.   FEditorEnabled := True;
  3230. end;
  3231. procedure TbsSkinNumEdit.WMMOUSEWHEEL;
  3232. begin
  3233.   if Message.WParam > 0
  3234.   then
  3235.     begin
  3236.       if Assigned(FOnDownClick) then FOnDownClick(Self);
  3237.     end
  3238.   else
  3239.     begin
  3240.       if Assigned(FOnUpClick) then FOnUpClick(Self);
  3241.     end;
  3242. end;
  3243. procedure TbsSkinNumEdit.KeyDown(var Key: Word; Shift: TShiftState);
  3244. begin
  3245.   if Key = VK_UP
  3246.   then
  3247.     begin
  3248.       if Assigned(FOnUpClick) then FOnUpClick(Self);
  3249.     end
  3250.   else
  3251.   if Key = VK_DOWN
  3252.   then
  3253.     begin
  3254.       if Assigned(FOnDownClick) then FOnDownClick(Self);
  3255.     end
  3256.   else
  3257.   inherited KeyDown(Key, Shift);
  3258. end;
  3259. procedure TbsSkinNumEdit.KeyPress(var Key: Char);
  3260. begin
  3261.   if not IsValidChar(Key) then
  3262.   begin
  3263.     Key := #0;
  3264.     MessageBeep(0)
  3265.   end;
  3266.   if Key <> #0 then inherited KeyPress(Key);
  3267. end;
  3268. function TbsSkinNumEdit.IsValidChar(Key: Char): Boolean;
  3269. begin
  3270.   if FLoat
  3271.   then
  3272.     Result := (Key in [DecimalSeparator, '-', '0'..'9']) or
  3273.     ((Key < #32) and (Key <> Chr(VK_RETURN)))
  3274.   else
  3275.     Result := (Key in ['-', '0'..'9']) or
  3276.      ((Key < #32) and (Key <> Chr(VK_RETURN)));
  3277.   if not FEditorEnabled and Result and ((Key >= #32) or
  3278.      (Key = Char(VK_BACK)) or (Key = Char(VK_DELETE)))
  3279.   then
  3280.     Result := False;
  3281. end;
  3282. const
  3283.   HTEDITBUTTON = HTSIZE + 2;
  3284.   HTEDITFRAME = HTSIZE + 3;
  3285. constructor TbsSkinCustomEdit.Create;
  3286. begin
  3287.   inherited Create(AOwner);
  3288.   ControlStyle := ControlStyle + [csOpaque];
  3289.   AutoSize := False;
  3290.   FIndex := -1;
  3291.   Font.Name := 'Arial';
  3292.   Font.Color := clWindowText;
  3293.   Font.Style := [];
  3294.   Font.Height := 14;
  3295.   Height := 20;
  3296.   BorderStyle := bsNone;
  3297.   Picture := nil;
  3298.   EditTransparent := True;
  3299.   FSkinDataName := 'edit';
  3300.   FDefaultFont := TFont.Create;
  3301.   FDefaultFont.OnChange := OnDefaultFontChange;
  3302.   FDefaultFont.Assign(Font);
  3303.   FDefaultWidth := 0;
  3304.   FDefaultHeight := 20;
  3305.   FUseSkinFont := True;
  3306. end;
  3307. destructor TbsSkinCustomEdit.Destroy;
  3308. begin
  3309.   FDefaultFont.Free;
  3310.   inherited;
  3311. end;
  3312. procedure TbsSkinCustomEdit.CMEnabledChanged;
  3313. begin
  3314.   inherited;
  3315.   Invalidate;
  3316. end;
  3317. procedure TbsSkinCustomEdit.SetAlignment(Value: TAlignment);
  3318. begin
  3319.   if FAlignment <> Value then
  3320.   begin
  3321.     FAlignment := Value;
  3322.     RecreateWnd;
  3323.   end;
  3324. end;
  3325. procedure TbsSkinCustomEdit.WMPaint;
  3326. var
  3327.   DC: HDC;
  3328.   FCanvas: TControlCanvas;
  3329.   PS: TPaintStruct;
  3330.   i, TX, TY: Integer;
  3331.   S: String;
  3332. begin
  3333.   if not Enabled
  3334.   then
  3335.     begin
  3336.       S := Text;
  3337.       if Self.EditPasswordChar <> #0
  3338.       then
  3339.         for i := 1 to Length(S) do S[i] := EditPasswordChar;
  3340.       GetSkinData;
  3341.       FCanvas := TControlCanvas.Create;
  3342.       DC := Message.DC;
  3343.       if DC = 0 then DC := BeginPaint(Handle, PS);
  3344.       FCanvas.Handle := DC;
  3345.       try
  3346.         with FCanvas do
  3347.         begin
  3348.           Brush.Style := bsClear;
  3349.           if (FIndex = -1) or not FUseSkinFont
  3350.           then
  3351.             begin
  3352.               Font := DefaultFont;
  3353.               Font.Color := clGrayText;
  3354.             end
  3355.           else
  3356.             begin
  3357.               Font.Name := FontName;
  3358.               Font.Height := FontHeight;
  3359.               Font.Color := DisabledFontColor;
  3360.               Font.Style := FontStyle;
  3361.               Font.CharSet := FDefaultFont.CharSet;
  3362.             end;
  3363.           TY := FEditRect.Top - 2;
  3364.           TX := FEditRect.Left;
  3365.           case Alignment of
  3366.             taCenter:
  3367.               TX := TX + RectWidth(FEditRect) div 2 - TextWidth(S) div 2 - 1;
  3368.             taRightJustify:
  3369.               TX := FEditRect.Right - 3 - TextWidth(S);
  3370.           end;
  3371.           TextRect(FEditRect, TX, TY, S);
  3372.         end;
  3373.       finally
  3374.         FCanvas.Handle := 0;
  3375.         if Message.DC = 0 then EndPaint(Handle, PS);
  3376.         FCanvas.Free;
  3377.       end;
  3378.     end
  3379.   else
  3380.     inherited;
  3381. end;
  3382. procedure TbsSkinCustomEdit.SetDefaultWidth;
  3383. begin
  3384.   FDefaultWidth := Value;
  3385.   if (FIndex = -1) and (FDefaultWidth > 0) then Width := FDefaultWidth;
  3386. end;
  3387. procedure TbsSkinCustomEdit.SetDefaultHeight;
  3388. begin
  3389.   FDefaultHeight := Value;
  3390.   if (FIndex = -1) and (FDefaultHeight > 0) then Height := FDefaultHeight;
  3391. end;
  3392. procedure TbsSkinCustomEdit.SetDefaultFont;
  3393. begin
  3394.   FDefaultFont.Assign(Value);
  3395.   if FIndex = -1 then Font.Assign(Value);
  3396. end;
  3397. procedure TbsSkinCustomEdit.OnDefaultFontChange(Sender: TObject);
  3398. begin
  3399.   if FIndex = -1 then Font.Assign(FDefaultFont);
  3400. end;
  3401. procedure TbsSkinCustomEdit.CalcRects;
  3402. var
  3403.   Off: Integer;
  3404. begin
  3405.   if FIndex = -1
  3406.   then
  3407.     begin
  3408.       if FButtonMode
  3409.       then
  3410.         begin
  3411.           FEditRect := Rect(2, 2, Width - 22, Height - 2);
  3412.           FButtonRect := Rect(Width - 20, 0, Width, Height);
  3413.         end
  3414.       else
  3415.         FEditRect := Rect(2, 2, Width - 2, Height - 2);
  3416.     end
  3417.   else
  3418.     begin
  3419.       Off := Width - RectWidth(SkinRect);
  3420.       FEditRect := ClRect;
  3421.       Inc(FEditRect.Right, Off);
  3422.       FButtonRect := ButtonRect;
  3423.       if ButtonRect.Left >= RectWidth(SkinRect) - ROffset
  3424.       then OffsetRect(FButtonRect, Off, 0);
  3425.     end;
  3426. end;
  3427. procedure TbsSkinCustomEdit.WMMOUSEMOVE;
  3428. begin
  3429.   inherited;
  3430.   if FButtonMode and FButtonActive
  3431.   then
  3432.     begin
  3433.       FButtonActive := False;
  3434.       Invalidate;
  3435.     end;
  3436. end;
  3437. procedure TbsSkinCustomEdit.WMNCHITTEST;
  3438. var
  3439.   P: TPoint;
  3440.   BR: TRect;
  3441.   ER: TRect;
  3442. begin
  3443.   if FButtonMode and not (csDesigning in ComponentState)
  3444.   then
  3445.     begin
  3446.       P.X := Message.XPos;
  3447.       P.Y := Message.YPos;
  3448.       P := ScreenToClient(P);
  3449.       CalcRects;
  3450.       BR := FButtonRect; Dec(BR.Left); Dec(BR.Top);
  3451.       ER := FEditRect; Dec(ER.Left); Dec(ER.Top);
  3452.       if PtInRect(BR, P)
  3453.       then
  3454.         Message.Result := HTEDITBUTTON
  3455.       else
  3456.         if not PtInRect(ER, P)
  3457.       then
  3458.         Message.Result := HTEDITFRAME
  3459.       else
  3460.         inherited;
  3461.     end
  3462.   else
  3463.     inherited;
  3464. end;
  3465. procedure TbsSkinCustomEdit.WMNCLBUTTONDBCLK;
  3466. begin
  3467.   if FButtonMode and (Message.HitTest = HTEDITBUTTON) and
  3468.      not (csDesigning in ComponentState)
  3469.   then
  3470.     begin
  3471.       FButtonDown := True;
  3472.       Invalidate;
  3473.     end
  3474.   else
  3475.     inherited;
  3476. end;
  3477. procedure TbsSkinCustomEdit.WMNCLBUTTONDOWN;
  3478. begin
  3479.   if FButtonMode and (Message.HitTest = HTEDITBUTTON) and
  3480.      not (csDesigning in ComponentState)
  3481.   then
  3482.     begin
  3483.       FButtonDown := True;
  3484.       Invalidate;
  3485.     end
  3486.   else
  3487.     inherited;
  3488. end;
  3489. procedure TbsSkinCustomEdit.WMNCLBUTTONUP;
  3490. begin
  3491.   if FButtonMode and (Message.HitTest = HTEDITBUTTON) and
  3492.      not (csDesigning in ComponentState)
  3493.   then
  3494.     begin
  3495.       FButtonDown := False;
  3496.       Invalidate;
  3497.       if not Focused then SetFocus;
  3498.       if Assigned(FOnButtonClick) then FOnButtonClick(Self);
  3499.     end
  3500.   else
  3501.     inherited;
  3502. end;
  3503. procedure TbsSkinCustomEdit.WMNCMOUSEMOVE;
  3504. begin
  3505.   if FButtonMode and not (csDesigning in ComponentState)
  3506.   then
  3507.     begin
  3508.       if Message.HitTest = HTEDITBUTTON
  3509.       then
  3510.         begin
  3511.           if not FButtonActive
  3512.           then
  3513.              begin
  3514.                FButtonActive := True;
  3515.                Invalidate;
  3516.              end
  3517.         end
  3518.       else
  3519.         begin
  3520.           if FButtonActive
  3521.           then
  3522.            begin
  3523.              FButtonActive := False;
  3524.              Invalidate;
  3525.            end;
  3526.            inherited;
  3527.          end
  3528.     end
  3529.   else
  3530.     inherited;
  3531. end;
  3532. procedure TbsSkinCustomEdit.SetButtonMode;
  3533. begin
  3534.   FButtonMode := Value;
  3535.   ReCreateWnd;
  3536.   if (csDesigning in ComponentState) and not
  3537.      (csLoading in ComponentState)
  3538.   then
  3539.     begin
  3540.       if FButtonMode
  3541.       then FSkinDataName := 'buttonedit'
  3542.       else FSkinDataName := 'edit';
  3543.     end;
  3544. end;
  3545. procedure TbsSkinCustomEdit.SetPasswordChar(Value: Char);
  3546. begin
  3547.   PasswordChar := Value;
  3548.   ReCreateWnd;
  3549. end;
  3550. function TbsSkinCustomEdit.GetPasswordChar;
  3551. begin
  3552.   Result := PasswordChar;
  3553. end;
  3554. procedure TbsSkinCustomEdit.Invalidate;
  3555. begin
  3556.   if Parent = nil then Exit;
  3557.   RedrawWindow(Handle, nil, 0, RDW_FRAME + RDW_INVALIDATE);
  3558. end;
  3559. procedure TbsSkinCustomEdit.WMSETFOCUS;
  3560. begin
  3561.   inherited;
  3562.   if not FMouseIn and (FIndex <> -1) then Font.Color := ActiveFontColor;
  3563. end;
  3564. procedure TbsSkinCustomEdit.WMKILLFOCUS;
  3565. begin
  3566.   inherited;
  3567.   if not FMouseIn and (FIndex <> -1) then Font.Color := FontColor;
  3568. end;
  3569. procedure TbsSkinCustomEdit.CMMouseEnter;
  3570. begin
  3571.   inherited;
  3572.   FMouseIn := True;
  3573.   if not Focused and (FIndex <> -1) then Font.Color := ActiveFontColor;
  3574.   if (not Focused) then Invalidate;
  3575.   if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
  3576. end;
  3577. procedure TbsSkinCustomEdit.CMMouseLeave;
  3578. begin
  3579.   inherited;
  3580.   FMouseIn := False;
  3581.   if not Focused and (FIndex <> -1) then Font.Color := FontColor;
  3582.   if not Focused then Invalidate;
  3583.   if FButtonDown or FButtonActive
  3584.   then
  3585.     begin
  3586.       FButtonActive := False;
  3587.       FButtonDown := False;
  3588.       Invalidate;
  3589.     end;
  3590.   if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
  3591. end;
  3592. procedure TbsSkinCustomEdit.SetBounds;
  3593. var
  3594.   UpDate: Boolean;
  3595. begin
  3596.   GetSkinData;
  3597.   UpDate := ((Width <> AWidth) or (Height <> AHeight)) and (FIndex <> -1);
  3598.   if UpDate then AHeight := RectHeight(SkinRect);
  3599.   inherited;
  3600.   Invalidate;
  3601. end;
  3602. procedure TbsSkinCustomEdit.WMNCCALCSIZE;
  3603. begin
  3604.   GetSkinData;
  3605.   if FIndex = -1
  3606.   then
  3607.     with Message.CalcSize_Params^.rgrc[0] do
  3608.     begin
  3609.       Inc(Left, 2);
  3610.       Inc(Top, 2);
  3611.       if FButtonMode
  3612.       then Dec(Right, 22)
  3613.       else Dec(Right, 2);
  3614.       Dec(Bottom, 2);
  3615.     end
  3616.   else
  3617.     with Message.CalcSize_Params^.rgrc[0] do
  3618.     begin
  3619.       Inc(Left, ClRect.Left);
  3620.       Inc(Top, ClRect.Top);
  3621.       Dec(Right, RectWidth(SkinRect) - ClRect.Right);
  3622.       Dec(Bottom, RectHeight(SkinRect) - ClRect.Bottom);
  3623.     end;
  3624. end;
  3625. procedure TbsSkinCustomEdit.CreateParams(var Params: TCreateParams);
  3626. const
  3627.   Alignments: array[TAlignment] of DWORD = (ES_LEFT, ES_RIGHT, ES_CENTER);
  3628. begin
  3629.   inherited CreateParams(Params);
  3630.   with Params do
  3631.   begin
  3632.     ExStyle := Exstyle and not WS_EX_Transparent;
  3633.     Style := Style and not WS_BORDER and not ES_MULTILINE or Alignments[FAlignment];
  3634.     if PasswordChar <> #0 then Style := Style or ES_PASSWORD;
  3635.   end;
  3636. end;
  3637. procedure TbsSkinCustomEdit.DrawSkinEdit;
  3638. var
  3639.   R: TRect;
  3640.   TX, TY, Offset: Integer;
  3641.   BR: TRect;
  3642.   B: TBitMap;
  3643. begin
  3644.   GetSkinData;
  3645.   CalcRects;
  3646.   if FButtonMode then Offset := Width - FButtonRect.Left else Offset := 0;
  3647.   B := TBitMap.Create;
  3648.   B.Width := Width;
  3649.   B.Height := Height;
  3650.   try
  3651.     if FIndex = -1
  3652.     then
  3653.       with B.Canvas do
  3654.       begin
  3655.         Brush.Color := clWindow;
  3656.         // draw frame
  3657.         R := Rect(0, 0, Width - Offset, Height);
  3658.         if FMouseIn or Focused
  3659.         then
  3660.           begin
  3661.             Frame3D(B.Canvas, R, clBtnShadow, clBtnShadow, 1);
  3662.             Frame3D(B.Canvas, R, clBtnFace, clBtnFace, 1);
  3663.           end
  3664.         else
  3665.           begin
  3666.             Frame3D(B.Canvas, R, clBtnFace, clBtnFace, 1);
  3667.             Frame3D(B.Canvas, R, clBtnShadow, clBtnShadow, 1);
  3668.           end;
  3669.         // draw button
  3670.         if FButtonMode
  3671.         then
  3672.           begin
  3673.             CalcRects;
  3674.             R := FButtonRect;
  3675.             if FButtonDown and FButtonActive
  3676.             then
  3677.               begin
  3678.                 Frame3D(B.Canvas, R, BS_XP_BTNFRAMECOLOR, BS_XP_BTNFRAMECOLOR, 1);
  3679.                 Brush.Color :=  BS_XP_BTNDOWNCOLOR;
  3680.                 FillRect(R);
  3681.               end
  3682.             else
  3683.             if FButtonActive
  3684.             then
  3685.               begin
  3686.                 Frame3D(B.Canvas, R, BS_XP_BTNFRAMECOLOR, BS_XP_BTNFRAMECOLOR, 1);
  3687.                 Brush.Color :=  BS_XP_BTNACTIVECOLOR;
  3688.                 FillRect(R);
  3689.               end
  3690.             else
  3691.               begin
  3692.                 Frame3D(B.Canvas, R, clBtnShadow, clBtnShadow, 1);
  3693.                 Brush.Color := clBtnFace;
  3694.                 FillRect(R);
  3695.               end;
  3696.           end;
  3697.       end
  3698.     else
  3699.       begin
  3700.         if FMouseIn or Focused
  3701.         then
  3702.           CreateHSkinImage(LOffset, ROffset, B, Picture, ActiveSkinRect, Width,
  3703.             RectHeight(ActiveSkinRect))
  3704.         else
  3705.           CreateHSkinImage(LOffset, ROffset, B, Picture, SkinRect, Width,
  3706.                            RectHeight(SkinRect));
  3707.         // draw button
  3708.         if FButtonMode
  3709.         then
  3710.           begin
  3711.             BR := NullRect;
  3712.             if FButtonDown and FButtonActive
  3713.             then
  3714.               BR := DownButtonRect
  3715.             else if FButtonActive then BR := ActiveButtonRect;
  3716.             if not IsNullRect(BR) then