home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / CONTROLS.INT < prev    next >
Text File  |  1996-05-08  |  24KB  |  679 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995,96 Borland International     }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit Controls;
  11.  
  12. {$P+,S-,W-,R-}
  13. {$C PRELOAD}
  14.  
  15. interface
  16.  
  17. {$R CONTROLS}
  18.  
  19. uses Messages, Windows, Classes, Sysutils, Graphics, Menus, CommCtrl;
  20.  
  21. { VCL control message IDs }
  22.  
  23. const
  24.   CM_BASE                   = $B000;
  25.   CM_ACTIVATE               = CM_BASE + 0;
  26.   CM_DEACTIVATE             = CM_BASE + 1;
  27.   CM_GOTFOCUS               = CM_BASE + 2;
  28.   CM_LOSTFOCUS              = CM_BASE + 3;
  29.   CM_CANCELMODE             = CM_BASE + 4;
  30.   CM_DIALOGKEY              = CM_BASE + 5;
  31.   CM_DIALOGCHAR             = CM_BASE + 6;
  32.   CM_FOCUSCHANGED           = CM_BASE + 7;
  33.   CM_PARENTFONTCHANGED      = CM_BASE + 8;
  34.   CM_PARENTCOLORCHANGED     = CM_BASE + 9;
  35.   CM_HITTEST                = CM_BASE + 10;
  36.   CM_VISIBLECHANGED         = CM_BASE + 11;
  37.   CM_ENABLEDCHANGED         = CM_BASE + 12;
  38.   CM_COLORCHANGED           = CM_BASE + 13;
  39.   CM_FONTCHANGED            = CM_BASE + 14;
  40.   CM_CURSORCHANGED          = CM_BASE + 15;
  41.   CM_CTL3DCHANGED           = CM_BASE + 16;
  42.   CM_PARENTCTL3DCHANGED     = CM_BASE + 17;
  43.   CM_TEXTCHANGED            = CM_BASE + 18;
  44.   CM_MOUSEENTER             = CM_BASE + 19;
  45.   CM_MOUSELEAVE             = CM_BASE + 20;
  46.   CM_MENUCHANGED            = CM_BASE + 21;
  47.   CM_APPKEYDOWN             = CM_BASE + 22;
  48.   CM_APPSYSCOMMAND          = CM_BASE + 23;
  49.   CM_BUTTONPRESSED          = CM_BASE + 24;
  50.   CM_SHOWINGCHANGED         = CM_BASE + 25;
  51.   CM_ENTER                  = CM_BASE + 26;
  52.   CM_EXIT                   = CM_BASE + 27;
  53.   CM_DESIGNHITTEST          = CM_BASE + 28;
  54.   CM_ICONCHANGED            = CM_BASE + 29;
  55.   CM_WANTSPECIALKEY         = CM_BASE + 30;
  56.   CM_INVOKEHELP             = CM_BASE + 31;
  57.   CM_WINDOWHOOK             = CM_BASE + 32;
  58.   CM_RELEASE                = CM_BASE + 33;
  59.   CM_SHOWHINTCHANGED        = CM_BASE + 34;
  60.   CM_PARENTSHOWHINTCHANGED  = CM_BASE + 35;
  61.   CM_SYSCOLORCHANGE         = CM_BASE + 36;
  62.   CM_WININICHANGE           = CM_BASE + 37;
  63.   CM_FONTCHANGE             = CM_BASE + 38;
  64.   CM_TIMECHANGE             = CM_BASE + 39;
  65.   CM_TABSTOPCHANGED         = CM_BASE + 40;
  66.   CM_UIACTIVATE             = CM_BASE + 41;
  67.   CM_UIDEACTIVATE           = CM_BASE + 42;
  68.   CM_DOCWINDOWACTIVATE      = CM_BASE + 43;
  69.   CM_CONTROLLISTCHANGE      = CM_BASE + 44;
  70.   CM_GETDATALINK            = CM_BASE + 45;
  71.   CM_CHILDKEY               = CM_BASE + 46;
  72.   CM_DRAG                   = CM_BASE + 47;
  73.   CM_HINTSHOW               = CM_BASE + 48;
  74.   CM_DIALOGHANDLE           = CM_BASE + 49;
  75.   CM_ISTOOLCONTROL          = CM_BASE + 50;
  76.  
  77. { VCL control notification IDs }
  78.  
  79. const
  80.   CN_BASE              = $BC00;
  81.   CN_CHARTOITEM        = CN_BASE + WM_CHARTOITEM;
  82.   CN_COMMAND           = CN_BASE + WM_COMMAND;
  83.   CN_COMPAREITEM       = CN_BASE + WM_COMPAREITEM;
  84.   CN_CTLCOLORBTN       = CN_BASE + WM_CTLCOLORBTN;
  85.   CN_CTLCOLORDLG       = CN_BASE + WM_CTLCOLORDLG;
  86.   CN_CTLCOLOREDIT      = CN_BASE + WM_CTLCOLOREDIT;
  87.   CN_CTLCOLORLISTBOX   = CN_BASE + WM_CTLCOLORLISTBOX;
  88.   CN_CTLCOLORMSGBOX    = CN_BASE + WM_CTLCOLORMSGBOX;
  89.   CN_CTLCOLORSCROLLBAR = CN_BASE + WM_CTLCOLORSCROLLBAR;
  90.   CN_CTLCOLORSTATIC    = CN_BASE + WM_CTLCOLORSTATIC;
  91.   CN_DELETEITEM        = CN_BASE + WM_DELETEITEM;
  92.   CN_DRAWITEM          = CN_BASE + WM_DRAWITEM;
  93.   CN_HSCROLL           = CN_BASE + WM_HSCROLL;
  94.   CN_MEASUREITEM       = CN_BASE + WM_MEASUREITEM;
  95.   CN_PARENTNOTIFY      = CN_BASE + WM_PARENTNOTIFY;
  96.   CN_VKEYTOITEM        = CN_BASE + WM_VKEYTOITEM;
  97.   CN_VSCROLL           = CN_BASE + WM_VSCROLL;
  98.   CN_KEYDOWN           = CN_BASE + WM_KEYDOWN;
  99.   CN_KEYUP             = CN_BASE + WM_KEYUP;
  100.   CN_CHAR              = CN_BASE + WM_CHAR;
  101.   CN_SYSKEYDOWN        = CN_BASE + WM_SYSKEYDOWN;
  102.   CN_SYSCHAR           = CN_BASE + WM_SYSCHAR;
  103.   CN_NOTIFY            = CN_BASE + WM_NOTIFY;
  104.  
  105. { TModalResult values }
  106.  
  107. const
  108.   mrNone   = 0;
  109.   mrOk     = idOk;
  110.   mrCancel = idCancel;
  111.   mrAbort  = idAbort;
  112.   mrRetry  = idRetry;
  113.   mrIgnore = idIgnore;
  114.   mrYes    = idYes;
  115.   mrNo     = idNo;
  116.   mrAll    = mrNo + 1;
  117.  
  118. { Cursor identifiers }
  119.  
  120. const
  121.   crDefault     = 0;
  122.   crNone        = -1;
  123.   crArrow       = -2;
  124.   crCross       = -3;
  125.   crIBeam       = -4;
  126.   crSize        = -5;
  127.   crSizeNESW    = -6;
  128.   crSizeNS      = -7;
  129.   crSizeNWSE    = -8;
  130.   crSizeWE      = -9;
  131.   crUpArrow     = -10;
  132.   crHourGlass   = -11;
  133.   crDrag        = -12;
  134.   crNoDrop      = -13;
  135.   crHSplit      = -14;
  136.   crVSplit      = -15;
  137.   crMultiDrag   = -16;
  138.   crSQLWait     = -17;
  139.   crNo          = -18;
  140.   crAppStart    = -19;
  141.   crHelp        = -20;
  142.  
  143. type
  144.  
  145. { Forward declarations }
  146.  
  147.   TDragObject = class;
  148.   TControl = class;
  149.   TWinControl = class;
  150.   TCustomImageList = class;
  151.  
  152. { VCL control message records }
  153.  
  154.   TCMActivate = TWMNoParams;
  155.   TCMDeactivate = TWMNoParams;
  156.   TCMGotFocus = TWMNoParams;
  157.   TCMLostFocus = TWMNoParams;
  158.   TCMDialogKey = TWMKey;
  159.   TCMDialogChar = TWMKey;
  160.   TCMHitTest = TWMNCHitTest;
  161.   TCMEnter = TWMNoParams;
  162.   TCMExit = TWMNoParams;
  163.   TCMDesignHitTest = TWMMouse;
  164.   TCMWantSpecialKey = TWMKey;
  165.  
  166.   TCMCancelMode = record
  167.     Msg: Cardinal;
  168.     Unused: Integer;
  169.     Sender: TControl;
  170.     Result: Longint;
  171.   end;
  172.  
  173.   TCMFocusChanged = record
  174.     Msg: Cardinal;
  175.     Unused: Integer;
  176.     Sender: TWinControl;
  177.     Result: Longint;
  178.   end;
  179.  
  180.   TCMControlListChange = record
  181.     Msg: Cardinal;
  182.     Control: TControl;
  183.     Inserting: LongBool;
  184.     Result: Longint;
  185.   end;
  186.  
  187.   TCMChildKey = record
  188.     Msg: Cardinal;
  189.     CharCode: Word;
  190.     Unused: Word;
  191.     Sender: TWinControl;
  192.     Result: Longint;
  193.   end;
  194.  
  195.   TDragMessage = (dmDragEnter, dmDragLeave, dmDragMove, dmDragDrop, dmDragCancel,
  196.     dmFindTarget);
  197.  
  198.   PDragRec = ^TDragRec;
  199.   TDragRec = record
  200.     Pos: TPoint;
  201.     Source: TDragObject;
  202.     Target: Pointer;
  203.   end;
  204.  
  205.   TCMDrag = packed record
  206.     Msg: Cardinal;
  207.     DragMessage: TDragMessage;
  208.     Reserved1: Byte;
  209.     Reserved2: Word;
  210.     DragRec: PDragRec;
  211.     Result: Longint;
  212.   end;
  213.  
  214. { Exception classes }
  215.  
  216.   EOutOfResources = class(EOutOfMemory);
  217.   EInvalidOperation = class(Exception);
  218.  
  219. { Cursor type }
  220.  
  221.   TCursor = -32768..32767;
  222.  
  223. { Dragging objects }
  224.  
  225.   TDragObject = class(TObject)
  226.   protected
  227.     function GetDragImages: TCustomImageList; virtual;
  228.     function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; virtual;
  229.     procedure Finished(Target: TObject; X, Y: Integer; Accepted: Boolean); virtual;
  230.   public
  231.     function Instance: THandle; virtual;
  232.     function GetName: string; virtual;
  233.     procedure HideDragImage; virtual;
  234.     procedure ShowDragImage; virtual;
  235.   end;
  236.  
  237.   TDragControlObject = class(TDragObject)
  238.   public
  239.     function GetDragImages: TCustomImageList; override;
  240.     function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override;
  241.     procedure Finished(Target: TObject; X, Y: Integer; Accepted: Boolean); override;
  242.   protected
  243.     constructor Create(AControl: TControl);
  244.     property Control: TControl;
  245.     procedure HideDragImage; override;
  246.     procedure ShowDragImage; override;
  247.   end;
  248.  
  249. { Controls }
  250.  
  251.   TControlCanvas = class(TCanvas)
  252.   protected
  253.     procedure CreateHandle; override;
  254.   public
  255.     destructor Destroy; override;
  256.     procedure FreeHandle;
  257.     property Control: TControl;
  258.   end;
  259.  
  260.   TAlign = (alNone, alTop, alBottom, alLeft, alRight, alClient);
  261.  
  262.   TControlState = set of (csLButtonDown, csClicked, csPalette,
  263.     csReadingState, csAlignmentNeeded, csFocusing, csCreating,
  264.     csPaintCopy);
  265.  
  266.   TControlStyle = set of (csAcceptsControls, csCaptureMouse,
  267.     csDesignInteractive, csClickEvents, csFramed, csSetCaption, csOpaque,
  268.     csDoubleClicks, csFixedWidth, csFixedHeight, csNoDesignVisible,
  269.     csReplicatable, csNoStdEvents, csDisplayDragImage);
  270.  
  271.   TMouseButton = (mbLeft, mbRight, mbMiddle);
  272.  
  273.   TDragMode = (dmManual, dmAutomatic);
  274.  
  275.   TDragState = (dsDragEnter, dsDragLeave, dsDragMove);
  276.  
  277.   TTabOrder = -1..32767;
  278.  
  279.   TCaption = type string;
  280.  
  281.   TScalingFlags = set of (sfLeft, sfTop, sfWidth, sfHeight, sfFont);
  282.  
  283.   TMouseEvent = procedure(Sender: TObject; Button: TMouseButton;
  284.     Shift: TShiftState; X, Y: Integer) of object;
  285.   TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState;
  286.     X, Y: Integer) of object;
  287.   TKeyEvent = procedure(Sender: TObject; var Key: Word;
  288.     Shift: TShiftState) of object;
  289.   TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;
  290.   TDragOverEvent = procedure(Sender, Source: TObject; X, Y: Integer;
  291.     State: TDragState; var Accept: Boolean) of object;
  292.   TDragDropEvent = procedure(Sender, Source: TObject;
  293.     X, Y: Integer) of object;
  294.   TStartDragEvent = procedure(Sender: TObject;
  295.     var DragObject: TDragObject) of object;
  296.   TEndDragEvent = procedure(Sender, Target: TObject;
  297.     X, Y: Integer) of object;
  298.  
  299.   TControl = class(TComponent)
  300.   protected
  301.     procedure ChangeScale(M, D: Integer); dynamic;
  302.     procedure Click; dynamic;
  303.     procedure DblClick; dynamic;
  304.     procedure DefaultHandler(var Message); override;
  305.     procedure DefineProperties(Filer: TFiler); override;
  306.     procedure DragCanceled; dynamic;
  307.     procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
  308.       var Accept: Boolean); dynamic;
  309.     procedure DoEndDrag(Target: TObject; X, Y: Integer); dynamic;
  310.     procedure DoStartDrag(var DragObject: TDragObject); dynamic;
  311.     function GetClientOrigin: TPoint; virtual;
  312.     function GetClientRect: TRect; virtual;
  313.     function GetDeviceContext(var WindowHandle: HWnd): HDC; virtual;
  314.     function GetDragImages: TCustomImageList; virtual;
  315.     function GetPalette: HPALETTE; dynamic;
  316.     function GetParentComponent: TComponent; override;
  317.     function GetPopupMenu: TPopupMenu; dynamic;
  318.     function HasParent: Boolean; override;
  319.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  320.       X, Y: Integer); dynamic;
  321.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); dynamic;
  322.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  323.       X, Y: Integer); dynamic;
  324.     procedure Notification(AComponent: TComponent;
  325.       Operation: TOperation); override;
  326.     function PaletteChanged(Foreground: Boolean): Boolean; dynamic;
  327.     procedure ReadState(Reader: TReader); override;
  328.     procedure SendCancelMode(Sender: TControl);
  329.     procedure SetDragMode(Value: TDragMode); virtual;
  330.     procedure SetParent(AParent: TWinControl); virtual;
  331.     procedure SetParentComponent(Value: TComponent); override;
  332.     procedure SetName(const Value: TComponentName); override;
  333.     procedure SetZOrder(TopMost: Boolean); dynamic;
  334.     procedure UpdateBoundsRect(const R: TRect);
  335.     procedure VisibleChanging; dynamic;
  336.     procedure WndProc(var Message: TMessage); virtual;
  337.     property Caption: TCaption;
  338.     property Color: TColor default clWindow;
  339.     property DragCursor: TCursor default crDrag;
  340.     property DragMode: TDragMode default dmManual;
  341.     property Font: TFont;
  342.     property IsControl: Boolean;
  343.     property MouseCapture: Boolean;
  344.     property ParentColor: Boolean default True;
  345.     property ParentFont: Boolean default True;
  346.     property ParentShowHint: Boolean default True;
  347.     property PopupMenu: TPopupMenu;
  348.     property ScalingFlags: TScalingFlags;
  349.     property Text: TCaption;
  350.     property WindowText: PChar;
  351.     property OnClick: TNotifyEvent;
  352.     property OnDblClick: TNotifyEvent;
  353.     property OnDragDrop: TDragDropEvent;
  354.     property OnDragOver: TDragOverEvent;
  355.     property OnEndDrag: TEndDragEvent;
  356.     property OnMouseDown: TMouseEvent;
  357.     property OnMouseMove: TMouseMoveEvent;
  358.     property OnMouseUp: TMouseEvent;
  359.     property OnStartDrag: TStartDragEvent;
  360.   public
  361.     constructor Create(AOwner: TComponent); override;
  362.     destructor Destroy; override;
  363.     procedure BeginDrag(Immediate: Boolean);
  364.     procedure BringToFront;
  365.     function ClientToScreen(const Point: TPoint): TPoint;
  366.     function Dragging: Boolean;
  367.     procedure DragDrop(Source: TObject; X, Y: Integer); dynamic;
  368.     procedure EndDrag(Drop: Boolean);
  369.     function GetTextBuf(Buffer: PChar; BufSize: Integer): Integer;
  370.     function GetTextLen: Integer;
  371.     procedure Hide;
  372.     procedure Invalidate; virtual;
  373.     function Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;
  374.     procedure Refresh;
  375.     procedure Repaint; virtual;
  376.     function ScreenToClient(const Point: TPoint): TPoint;
  377.     procedure SendToBack;
  378.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); virtual;
  379.     procedure SetTextBuf(Buffer: PChar);
  380.     procedure Show;
  381.     procedure Update; virtual;
  382.     property Align: TAlign default alNone;
  383.     property BoundsRect: TRect;
  384.     property ClientHeight: Integer;
  385.     property ClientOrigin: TPoint;
  386.     property ClientRect: TRect;
  387.     property ClientWidth: Integer;
  388.     property ControlState: TControlState;
  389.     property ControlStyle: TControlStyle;
  390.     property Parent: TWinControl;
  391.     property ShowHint: Boolean;
  392.     property Visible: Boolean default True;
  393.     property Enabled: Boolean default True;
  394.   published
  395.     property Left: Integer;
  396.     property Top: Integer;
  397.     property Width: Integer;
  398.     property Height: Integer;
  399.     property Cursor: TCursor default crDefault;
  400.     property Hint: string;
  401.   end;
  402.  
  403.   TControlClass = class of TControl;
  404.  
  405.   TCreateParams = record
  406.     Caption: PChar;
  407.     Style: Longint;
  408.     ExStyle: Longint;
  409.     X, Y: Integer;
  410.     Width, Height: Integer;
  411.     WndParent: HWnd;
  412.     Param: Pointer;
  413.     WindowClass: TWndClass;
  414.     WinClassName: array[0..63] of Char;
  415.   end;
  416.  
  417.  
  418.   TWinControl = class(TControl)
  419.   protected
  420.     procedure AlignControls(AControl: TControl; var Rect: TRect); virtual;
  421.     procedure ChangeScale(M, D: Integer); override;
  422.     procedure CreateHandle; virtual;
  423.     procedure CreateParams(var Params: TCreateParams); virtual;
  424.     procedure CreateSubClass(var Params: TCreateParams;
  425.       ControlClassName: PChar);
  426.     procedure CreateWindowHandle(const Params: TCreateParams); virtual;
  427.     procedure CreateWnd; virtual;
  428.     procedure DefaultHandler(var Message); override;
  429.     procedure DestroyHandle;
  430.     procedure DestroyWindowHandle; virtual;
  431.     procedure DestroyWnd; virtual;
  432.     procedure DoEnter; dynamic;
  433.     procedure DoExit; dynamic;
  434.     function DoKeyDown(var Message: TWMKey): Boolean;
  435.     function DoKeyPress(var Message: TWMKey): Boolean;
  436.     function DoKeyUp(var Message: TWMKey): Boolean;
  437.     function FindNextControl(CurControl: TWinControl;
  438.       GoForward, CheckTabStop, CheckParent: Boolean): TWinControl;
  439.     procedure FixupTabList;
  440.     procedure GetChildren(Proc: TGetChildProc); override;
  441.     function GetClientOrigin: TPoint; override;
  442.     function GetClientRect: TRect; override;
  443.     function GetDeviceContext(var WindowHandle: HWnd): HDC; override;
  444.     function IsControlMouseMsg(var Message: TWMMouse): Boolean;
  445.     procedure KeyDown(var Key: Word; Shift: TShiftState); dynamic;
  446.     procedure KeyUp(var Key: Word; Shift: TShiftState); dynamic;
  447.     procedure KeyPress(var Key: Char); dynamic;
  448.     procedure MainWndProc(var Message: TMessage);
  449.     procedure NotifyControls(Msg: Word);
  450.     procedure PaintControls(DC: HDC; First: TControl);
  451.     procedure PaintHandler(var Message: TWMPaint);
  452.     procedure PaintWindow(DC: HDC); virtual;
  453.     function PaletteChanged(Foreground: Boolean): Boolean; override;
  454.     procedure ReadState(Reader: TReader); override;
  455.     procedure RecreateWnd;
  456.     procedure ScaleControls(M, D: Integer);
  457.     procedure SelectFirst;
  458.     procedure SelectNext(CurControl: TWinControl;
  459.       GoForward, CheckTabStop: Boolean);
  460.     procedure SetChildOrder(Child: TComponent; Order: Integer); override;
  461.     procedure SetZOrder(TopMost: Boolean); override;
  462.     procedure ShowControl(AControl: TControl); virtual;
  463.     procedure WndProc(var Message: TMessage); override;
  464.     property Ctl3D: Boolean;
  465.     property DefWndProc: Pointer;
  466.     property ParentCtl3D: Boolean default True;
  467.     property WindowHandle: HWnd;
  468.     property OnEnter: TNotifyEvent;
  469.     property OnExit: TNotifyEvent;
  470.     property OnKeyDown: TKeyEvent;
  471.     property OnKeyPress: TKeyPressEvent;
  472.     property OnKeyUp: TKeyEvent;
  473.   public
  474.     constructor Create(AOwner: TComponent); override;
  475.     destructor Destroy; override;
  476.     procedure Broadcast(var Message);
  477.     function CanFocus: Boolean;
  478.     function ContainsControl(Control: TControl): Boolean;
  479.     function ControlAtPos(const Pos: TPoint; AllowDisabled: Boolean): TControl;
  480.     procedure DisableAlign;
  481.     procedure EnableAlign;
  482.     function Focused: Boolean;
  483.     procedure GetTabOrderList(List: TList); dynamic;
  484.     function HandleAllocated: Boolean;
  485.     procedure HandleNeeded;
  486.     procedure InsertControl(AControl: TControl);
  487.     procedure Invalidate; override;
  488.     procedure PaintTo(DC: HDC; X, Y: Integer);
  489.     procedure RemoveControl(AControl: TControl);
  490.     procedure Realign;
  491.     procedure Repaint; override;
  492.     procedure ScaleBy(M, D: Integer);
  493.     procedure ScrollBy(DeltaX, DeltaY: Integer);
  494.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  495.     procedure SetFocus; virtual;
  496.     procedure Update; override;
  497.     procedure UpdateControlState;
  498.     property Brush: TBrush;
  499.     property Controls[Index: Integer]: TControl;
  500.     property ControlCount: Integer;
  501.     property Handle: HWnd;
  502.     property Showing: Boolean;
  503.     property TabOrder: TTabOrder default -1;
  504.     property TabStop: Boolean default False;
  505.   published
  506.     property HelpContext: THelpContext default 0;
  507.   end;
  508.  
  509.   TGraphicControl = class(TControl)
  510.   protected
  511.     procedure Paint; virtual;
  512.     property Canvas: TCanvas;
  513.   public
  514.     constructor Create(AOwner: TComponent); override;
  515.     destructor Destroy; override;
  516.   end;
  517.  
  518.   TCustomControl = class(TWinControl)
  519.   protected
  520.     procedure Paint; virtual;
  521.     procedure PaintWindow(DC: HDC); override;
  522.     property Canvas: TCanvas;
  523.   public
  524.     constructor Create(AOwner: TComponent); override;
  525.     destructor Destroy; override;
  526.   end;
  527.  
  528.   THintWindow = class(TCustomControl)
  529.   protected
  530.     procedure CreateParams(var Params: TCreateParams); override;
  531.     procedure Paint; override;
  532.   public
  533.     constructor Create(AOwner: TComponent); override;
  534.     procedure ActivateHint(Rect: TRect; const AHint: string); virtual;
  535.     function IsHintMsg(var Msg: TMsg): Boolean; virtual;
  536.     procedure ReleaseHandle;
  537.     property Caption;
  538.     property Color;
  539.     property Canvas;
  540.   end;
  541.  
  542.   THintWindowClass = class of THintWindow;
  543.  
  544. { TChangeLink }
  545.  
  546.   TChangeLink = class(TObject)
  547.   public
  548.     destructor Destroy; override;
  549.     procedure Change; dynamic;
  550.     property OnChange: TNotifyEvent;
  551.     property Sender: TCustomImageList;
  552.   end;
  553.  
  554.   { TCustomImageList }
  555.  
  556.   TDrawingStyle = (dsFocus, dsSelected, dsNormal, dsTransparent);
  557.   TImageType = (itImage, itMask);
  558.   TResType = (rtBitmap, rtCursor, rtIcon);
  559.   TOverlay = 0..3;
  560.   TLoadResource = (lrDefaultColor, lrDefaultSize, lrFromFile,
  561.     lrMap3DColors, lrTransparent, lrMonoChrome);
  562.   TLoadResources = set of TLoadResource;
  563.  
  564.   TCustomImageList = class(TComponent)
  565.   protected
  566.     procedure Change; dynamic;
  567.     procedure DefineProperties(Filer: TFiler); override;
  568.     procedure GetImages(Index: Integer; Image, Mask: TBitmap);
  569.     procedure HandleNeeded;
  570.     procedure Initialize;
  571.     property BlendColor: TColor default clNone;
  572.     property BkColor: TColor default clNone;
  573.     property AllocBy: Integer default 4;
  574.     property DrawingStyle: TDrawingStyle default dsNormal;
  575.     property Height: Integer default 16;
  576.     property ImageType: TImageType default itImage;
  577.     property Masked: Boolean default True;
  578.     property OnChange: TNotifyEvent;
  579.     property ShareImages: Boolean default False;
  580.     property Width: Integer default 16;
  581.   public
  582.     constructor Create(AOwner: TComponent); override;
  583.     constructor CreateSize(AWidth, AHeight: Integer);
  584.     destructor Destroy; override;
  585.     procedure Assign(Source: TPersistent); override;
  586.     function Add(Image, Mask: TBitmap): Integer;
  587.     function AddIcon(Image: TIcon): Integer;
  588.     procedure AddImages(Value: TCustomImageList);
  589.     function AddMasked(Image: TBitmap; MaskColor: TColor): Integer;
  590.     function BeginDrag(Window: HWND; X, Y: Integer): Boolean;
  591.     procedure Clear;
  592.     procedure Delete(Index: Integer);
  593.     function DragLock(Window: HWND; XPos, YPos: Integer): Boolean;
  594.     function DragMove(X, Y: Integer): Boolean;
  595.     procedure DragUnlock;
  596.     procedure Draw(Canvas: TCanvas; X, Y, Index: Integer);
  597.     procedure DrawOverlay(Canvas: TCanvas; X, Y: Integer;
  598.       ImageIndex: Integer; Overlay: TOverlay);
  599.     function EndDrag: Boolean;
  600.     function FileLoad(ResType: TResType; Name: string;
  601.       MaskColor: TColor): Boolean;
  602.     procedure GetBitmap(Index: Integer; Image: TBitmap);
  603.     function GetHotSpot: TPoint;
  604.     procedure GetIcon(Index: Integer; Image: TIcon);
  605.     function GetImageBitmap: HBITMAP;
  606.     function GetMaskBitmap: HBITMAP;
  607.     function GetResource(ResType: TResType; Name: string;
  608.       Width: Integer; LoadFlags: TLoadResources; MaskColor: TColor): Boolean;
  609.     function HandleAllocated: Boolean;
  610.     procedure HideDragImage;
  611.     procedure Insert(Index: Integer; Image, Mask: TBitmap);
  612.     procedure InsertIcon(Index: Integer; Image: TIcon);
  613.     procedure InsertMasked(Index: Integer; Image: TBitmap; MaskColor: TColor);
  614.     procedure Move(CurIndex, NewIndex: Integer);
  615.     function Overlay(ImageIndex: Integer; Overlay: TOverlay): Boolean;
  616.     procedure RegisterChanges(Value: TChangeLink);
  617.     function ResourceLoad(ResType: TResType; Name: string;
  618.       MaskColor: TColor): Boolean;
  619.     procedure Replace(Index: Integer; Image, Mask: TBitmap);
  620.     procedure ReplaceIcon(Index: Integer; Image: TIcon);
  621.     procedure ReplaceMasked(Index: Integer; NewImage: TBitmap; MaskColor: TColor);
  622.     function SetDragImage(Index, HotSpotX, HotSpotY: Integer): Boolean;
  623.     procedure ShowDragImage;
  624.     procedure UnRegisterChanges(Value: TChangeLink);
  625.     property Count: Integer;
  626.     property DragCursor: TCursor;
  627.     property Dragging: Boolean;
  628.     property Handle: HImageList;
  629.   end;
  630.  
  631. { TImageList }
  632.   TImageList = class(TCustomImageList)
  633.   published
  634.     property BlendColor;
  635.     property BkColor;
  636.     property AllocBy;
  637.     property DrawingStyle;
  638.     property Height;
  639.     property ImageType;
  640.     property Masked;
  641.     property OnChange;
  642.     property ShareImages;
  643.     property Width;
  644.   end;
  645.  
  646. function IsDragObject(Sender: TObject): Boolean;
  647. function FindControl(Handle: HWnd): TWinControl;
  648. function FindVCLWindow(const Pos: TPoint): TWinControl;
  649. function FindDragTarget(const Pos: TPoint; AllowDisabled: Boolean): TControl;
  650. function GetCaptureControl: TControl;
  651. procedure SetCaptureControl(Control: TControl);
  652. procedure CancelDrag;
  653.  
  654. function CursorToString(Cursor: TCursor): string;
  655. function StringToCursor(const S: string): TCursor;
  656. procedure GetCursorValues(Proc: TGetStrProc);
  657. function CursorToIdent(Cursor: Longint; var Ident: string): Boolean;
  658. function IdentToCursor(const Ident: string; var Cursor: Longint): Boolean;
  659.  
  660. function GetShortHint(const Hint: string): string;
  661. function GetLongHint(const Hint: string): string;
  662.  
  663. var
  664.   CreationControl: TWinControl = nil;
  665.  
  666. function InitWndProc(HWindow: HWnd; Message, WParam: Longint;
  667.   LParam: Longint): Longint; stdcall;
  668.  
  669. const
  670.   CTL3D_ALL = $FFFF;
  671.  
  672. var
  673.   NewStyleControls: Boolean;
  674.  
  675. function SendAppMessage(Msg: Cardinal; WParam, LParam: Longint): Longint;
  676. procedure MoveWindowOrg(DC: HDC; DX, DY: Integer);
  677.  
  678. implementation
  679.