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

Delphi控件源码

开发平台:

Delphi

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