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

Delphi控件源码

开发平台:

Delphi

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