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

Delphi控件源码

开发平台:

Delphi

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