home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 October / tst.iso / programs / borland / RUNIMAGE / DELPHI40 / DOC / COMCTRLS.INT < prev    next >
Encoding:
Text File  |  1998-06-17  |  72.8 KB  |  2,151 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {       Copyright (c) 1996,98 Inprise Corporation       }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit ComCtrls;
  11.  
  12. {$R-}
  13.  
  14. interface
  15.  
  16. uses Messages, Windows, SysUtils, CommCtrl, Classes, Controls, Forms,
  17.   Menus, Graphics, StdCtrls, RichEdit, ToolWin, ImgList, ExtCtrls;
  18.  
  19. type
  20.   TCustomTabControl = class;
  21.  
  22.   TTabChangingEvent = procedure(Sender: TObject;
  23.     var AllowChange: Boolean) of object;
  24.  
  25.   TTabPosition = (tpTop, tpBottom, tpLeft, tpRight);
  26.  
  27.   TTabStyle = (tsTabs, tsButtons, tsFlatButtons);
  28.  
  29.   TDrawTabEvent = procedure(Control: TCustomTabControl; TabIndex: Integer;
  30.     const Rect: TRect; Active: Boolean) of object;
  31.   TTabGetImageEvent = procedure(Sender: TObject; TabIndex: Integer;
  32.     var ImageIndex: Integer) of object;
  33.  
  34.   TCustomTabControl = class(TWinControl)
  35.   protected
  36.     procedure AdjustClientRect(var Rect: TRect); override;
  37.     function CanChange: Boolean; dynamic;
  38.     function CanShowTab(TabIndex: Integer): Boolean; virtual;
  39.     procedure Change; dynamic;
  40.     procedure CreateParams(var Params: TCreateParams); override;
  41.     procedure CreateWnd; override;
  42.     procedure DestroyWnd; override;
  43.     procedure DrawTab(TabIndex: Integer; const Rect: TRect; Active: Boolean); virtual;
  44.     function GetImageIndex(TabIndex: Integer): Integer; virtual;
  45.     procedure Loaded; override;
  46.     procedure UpdateTabImages;
  47.     property DisplayRect: TRect;
  48.     property HotTrack: Boolean default False;
  49.     property Images: TCustomImageList;
  50.     property MultiLine: Boolean default False;
  51.     property MultiSelect: Boolean default False;
  52.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  53.     property OwnerDraw: Boolean default False;
  54.     property RaggedRight: Boolean default False;
  55.     property ScrollOpposite: Boolean default False;
  56.     property Style: TTabStyle default tsTabs;
  57.     property TabHeight: Smallint default 0;
  58.     property TabIndex: Integer default -1;
  59.     property TabPosition: TTabPosition default tpTop;
  60.     property Tabs: TStrings;
  61.     property TabWidth: Smallint default 0;
  62.     property OnChange: TNotifyEvent;
  63.     property OnChanging: TTabChangingEvent;
  64.     property OnDrawTab: TDrawTabEvent;
  65.     property OnGetImageIndex: TTabGetImageEvent;
  66.   public
  67.     constructor Create(AOwner: TComponent); override;
  68.     destructor Destroy; override;
  69.     property Canvas: TCanvas;
  70.     property TabStop default True;
  71.   end;
  72.  
  73.   TTabControl = class(TCustomTabControl)
  74.   public
  75.     property DisplayRect;
  76.   published
  77.     property Align;
  78.     property Anchors;
  79.     property BiDiMode;
  80.     property Constraints;
  81.     property DockSite;
  82.     property DragCursor;
  83.     property DragKind;
  84.     property DragMode;
  85.     property Enabled;
  86.     property Font;
  87.     property HotTrack;
  88.     property Images;
  89.     property MultiLine;
  90.     property MultiSelect;
  91.     property OwnerDraw;
  92.     property ParentBiDiMode;
  93.     property ParentFont;
  94.     property ParentShowHint;
  95.     property PopupMenu;
  96.     property RaggedRight;
  97.     property ScrollOpposite;
  98.     property ShowHint;
  99.     property Style;
  100.     property TabHeight;
  101.     property TabOrder;
  102.     property TabPosition;
  103.     property Tabs;
  104.     property TabIndex;  // must be after Tabs
  105.     property TabStop;
  106.     property TabWidth;
  107.     property Visible;
  108.     property OnChange;
  109.     property OnChanging;
  110.     property OnDockDrop;
  111.     property OnDockOver;
  112.     property OnDragDrop;
  113.     property OnDragOver;
  114.     property OnDrawTab;
  115.     property OnEndDock;
  116.     property OnEndDrag;
  117.     property OnEnter;
  118.     property OnExit;
  119.     property OnGetImageIndex;
  120.     property OnGetSiteInfo;
  121.     property OnMouseDown;
  122.     property OnMouseMove;
  123.     property OnMouseUp;
  124.     property OnResize;
  125.     property OnStartDock;
  126.     property OnStartDrag;
  127.     property OnUnDock;
  128.   end;
  129.  
  130.   TPageControl = class;
  131.  
  132.   TTabSheet = class(TWinControl)
  133.   protected
  134.     procedure CreateParams(var Params: TCreateParams); override;
  135.     procedure DoHide; dynamic;
  136.     procedure DoShow; dynamic;
  137.     procedure ReadState(Reader: TReader); override;
  138.   public
  139.     constructor Create(AOwner: TComponent); override;
  140.     destructor Destroy; override;
  141.     property PageControl: TPageControl;
  142.     property TabIndex: Integer;
  143.   published
  144.     property BorderWidth;
  145.     property Caption;
  146.     property DragMode;
  147.     property Enabled;
  148.     property Font;
  149.     property Height stored False;
  150.     property ImageIndex: Integer default 0;
  151.     property Left stored False;
  152.     property Constraints;
  153.     property PageIndex: Integer;
  154.     property ParentFont;
  155.     property ParentShowHint;
  156.     property PopupMenu;
  157.     property ShowHint;
  158.     property TabVisible: Boolean default True;
  159.     property Top stored False;
  160.     property Visible stored False;
  161.     property Width stored False;
  162.     property OnDragDrop;
  163.     property OnDragOver;
  164.     property OnEndDrag;
  165.     property OnEnter;
  166.     property OnExit;
  167.     property OnHide: TNotifyEvent;
  168.     property OnMouseDown;
  169.     property OnMouseMove;
  170.     property OnMouseUp;
  171.     property OnResize;
  172.     property OnShow: TNotifyEvent;
  173.     property OnStartDrag;
  174.   end;
  175.  
  176.   TPageControl = class(TCustomTabControl)
  177.   protected
  178.     function CanShowTab(TabIndex: Integer): Boolean; override;
  179.     procedure Change; override;
  180.     procedure DoAddDockClient(Client: TControl; const ARect: TRect); override;
  181.     procedure DockOver(Source: TDragDockObject; X, Y: Integer;
  182.       State: TDragState; var Accept: Boolean); override;
  183.     procedure DoRemoveDockClient(Client: TControl); override;
  184.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  185.     function GetImageIndex(TabIndex: Integer): Integer; override;
  186.     function GetPageFromDockClient(Client: TControl): TTabSheet;
  187.     procedure GetSiteInfo(Client: TControl; var InfluenceRect: TRect;
  188.       MousePos: TPoint; var CanDock: Boolean); override;
  189.     procedure SetChildOrder(Child: TComponent; Order: Integer); override;
  190.     procedure ShowControl(AControl: TControl); override;
  191.   public
  192.     constructor Create(AOwner: TComponent); override;
  193.     destructor Destroy; override;
  194.     function FindNextPage(CurPage: TTabSheet;
  195.       GoForward, CheckTabVisible: Boolean): TTabSheet;
  196.     procedure SelectNextPage(GoForward: Boolean);
  197.     property PageCount: Integer;
  198.     property Pages[Index: Integer]: TTabSheet;
  199.   published
  200.     property ActivePage: TTabSheet;
  201.     property Align;
  202.     property Anchors;
  203.     property BiDiMode;
  204.     property Constraints;
  205.     property DockSite;
  206.     property DragCursor;
  207.     property DragKind;
  208.     property DragMode;
  209.     property Enabled;
  210.     property Font;
  211.     property HotTrack;
  212.     property Images;
  213.     property MultiLine;
  214.     property OwnerDraw;
  215.     property ParentBiDiMode;
  216.     property ParentFont;
  217.     property ParentShowHint;
  218.     property PopupMenu;
  219.     property RaggedRight;
  220.     property ScrollOpposite;
  221.     property ShowHint;
  222.     property Style;
  223.     property TabHeight;
  224.     property TabOrder;
  225.     property TabPosition;
  226.     property TabStop;
  227.     property TabWidth;
  228.     property Visible;
  229.     property OnChange;
  230.     property OnChanging;
  231.     property OnDockDrop;
  232.     property OnDockOver;
  233.     property OnDragDrop;
  234.     property OnDragOver;
  235.     property OnDrawTab;
  236.     property OnEndDock;
  237.     property OnEndDrag;
  238.     property OnEnter;
  239.     property OnExit;
  240.     property OnGetImageIndex;
  241.     property OnGetSiteInfo;
  242.     property OnMouseDown;
  243.     property OnMouseMove;
  244.     property OnMouseUp;
  245.     property OnResize;
  246.     property OnStartDock;
  247.     property OnStartDrag;
  248.     property OnUnDock;
  249.   end;
  250.  
  251. { TStatusBar }
  252.  
  253.   TStatusBar = class;
  254.  
  255.   TStatusPanelStyle = (psText, psOwnerDraw);
  256.   TStatusPanelBevel = (pbNone, pbLowered, pbRaised);
  257.  
  258.   TStatusPanel = class(TCollectionItem)
  259.   protected
  260.     function GetDisplayName: string; override;
  261.   public
  262.     constructor Create(Collection: TCollection); override;
  263.     procedure Assign(Source: TPersistent); override;
  264.     procedure ParentBiDiModeChanged;
  265.     function UseRightToLeftAlignment: Boolean;
  266.     function UseRightToLeftReading: Boolean;
  267.   published
  268.     property Alignment: TAlignment default taLeftJustify;
  269.     property Bevel: TStatusPanelBevel default pbLowered;
  270.     property BiDiMode: TBiDiMode;
  271.     property ParentBiDiMode: Boolean default True;
  272.     property Style: TStatusPanelStyle default psText;
  273.     property Text: string;
  274.     property Width: Integer;
  275.   end;
  276.  
  277.   TStatusPanels = class(TCollection)
  278.   protected
  279.     function GetOwner: TPersistent; override;
  280.     procedure Update(Item: TCollectionItem); override;
  281.   public
  282.     constructor Create(StatusBar: TStatusBar);
  283.     function Add: TStatusPanel;
  284.     property Items[Index: Integer]: TStatusPanel; default;
  285.   end;
  286.  
  287.   TDrawPanelEvent = procedure(StatusBar: TStatusBar; Panel: TStatusPanel;
  288.     const Rect: TRect) of object;
  289.  
  290.   TStatusBar = class(TWinControl)
  291.   protected
  292.     procedure CreateParams(var Params: TCreateParams); override;
  293.     procedure CreateWnd; override;
  294.     function DoHint: Boolean; virtual;
  295.     procedure DrawPanel(Panel: TStatusPanel; const Rect: TRect); dynamic;
  296.   public
  297.     constructor Create(AOwner: TComponent); override;
  298.     destructor Destroy; override;
  299.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  300.     procedure FlipChildren(AllLevels: Boolean); override;
  301.     property Canvas: TCanvas;
  302.   published
  303.     property Action;
  304.     property AutoHint: Boolean default False;
  305.     property Align default alBottom;
  306.     property Anchors;
  307.     property BiDiMode;
  308.     property BorderWidth;
  309.     property Color default clBtnFace;
  310.     property DragCursor;
  311.     property DragKind;
  312.     property DragMode;
  313.     property Enabled;
  314.     property Font stored IsFontStored;
  315.     property Constraints;
  316.     property Panels: TStatusPanels;
  317.     property ParentBiDiMode;
  318.     property ParentColor default False;
  319.     property ParentFont default False;
  320.     property ParentShowHint;
  321.     property PopupMenu;
  322.     property ShowHint;
  323.     property SimplePanel: Boolean;
  324.     property SimpleText: string;
  325.     property SizeGrip: Boolean default True;
  326.     property UseSystemFont: Boolean default True;
  327.     property Visible;
  328.     property OnClick;
  329.     property OnDblClick;
  330.     property OnDragDrop;
  331.     property OnDragOver;
  332.     property OnEndDock;
  333.     property OnEndDrag;
  334.     property OnHint: TNotifyEvent;
  335.     property OnMouseDown;
  336.     property OnMouseMove;
  337.     property OnMouseUp;
  338.     property OnDrawPanel: TDrawPanelEvent;
  339.     property OnResize;
  340.     property OnStartDock;
  341.     property OnStartDrag;
  342.   end;
  343.  
  344. { Custom draw }
  345.  
  346.   TCustomDrawTarget = (dtControl, dtItem, dtSubItem);
  347.   TCustomDrawStage = (cdPrePaint, cdPostPaint, cdPreErase, cdPostErase);
  348.   TCustomDrawState = set of (cdsSelected, cdsGrayed, cdsDisabled, cdsChecked,
  349.     cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate);
  350.  
  351. { THeaderControl }
  352.  
  353.   THeaderControl = class;
  354.  
  355.   THeaderSectionStyle = (hsText, hsOwnerDraw);
  356.  
  357.   THeaderSection = class(TCollectionItem)
  358.   protected
  359.     function GetDisplayName: string; override;
  360.   public
  361.     constructor Create(Collection: TCollection); override;
  362.     procedure Assign(Source: TPersistent); override;
  363.     procedure ParentBiDiModeChanged;
  364.     function UseRightToLeftAlignment: Boolean;
  365.     function UseRightToLeftReading: Boolean;
  366.     property Left: Integer;
  367.     property Right: Integer;
  368.   published
  369.     property Alignment: TAlignment default taLeftJustify;
  370.     property AllowClick: Boolean default True;
  371.     property AutoSize: Boolean default False;
  372.     property BiDiMode: TBiDiMode;
  373.     property MaxWidth: Integer default 10000;
  374.     property MinWidth: Integer default 0;
  375.     property ParentBiDiMode: Boolean default True;
  376.     property Style: THeaderSectionStyle default hsText;
  377.     property Text: string;
  378.     property Width: Integer;
  379.   end;
  380.  
  381.   THeaderSections = class(TCollection)
  382.   protected
  383.     function GetOwner: TPersistent; override;
  384.     procedure Update(Item: TCollectionItem); override;
  385.   public
  386.     constructor Create(HeaderControl: THeaderControl);
  387.     function Add: THeaderSection;
  388.     property Items[Index: Integer]: THeaderSection; default;
  389.   end;
  390.  
  391.   TSectionTrackState = (tsTrackBegin, tsTrackMove, tsTrackEnd);
  392.  
  393.   TDrawSectionEvent = procedure(HeaderControl: THeaderControl;
  394.     Section: THeaderSection; const Rect: TRect; Pressed: Boolean) of object;
  395.   TSectionNotifyEvent = procedure(HeaderControl: THeaderControl;
  396.     Section: THeaderSection) of object;
  397.   TSectionTrackEvent = procedure(HeaderControl: THeaderControl;
  398.     Section: THeaderSection; Width: Integer;
  399.     State: TSectionTrackState) of object;
  400.  
  401.   THeaderStyle = (hsButtons, hsFlat);
  402.  
  403.   THeaderControl = class(TWinControl)
  404.   protected
  405.     procedure CreateParams(var Params: TCreateParams); override;
  406.     procedure CreateWnd; override;
  407.     procedure DrawSection(Section: THeaderSection; const Rect: TRect;
  408.       Pressed: Boolean); dynamic;
  409.     procedure SectionClick(Section: THeaderSection); dynamic;
  410.     procedure SectionResize(Section: THeaderSection); dynamic;
  411.     procedure SectionTrack(Section: THeaderSection; Width: Integer;
  412.       State: TSectionTrackState); dynamic;
  413.     procedure WndProc(var Message: TMessage); override;
  414.   public
  415.     constructor Create(AOwner: TComponent); override;
  416.     destructor Destroy; override;
  417.     property Canvas: TCanvas;
  418.     procedure FlipChildren(AllLevels: Boolean); override;
  419.   published
  420.     property Align default alTop;
  421.     property Anchors;
  422.     property BiDiMode;
  423.     property BorderWidth;
  424.     property DragCursor;
  425.     property DragKind;
  426.     property DragMode;
  427.     property Enabled;
  428.     property Font;
  429.     property FullDrag: Boolean default True;
  430.     property HotTrack: Boolean default False;
  431.     property Constraints;
  432.     property Sections: THeaderSections;
  433.     property ShowHint;
  434.     property Style: THeaderStyle default hsButtons;
  435.     property ParentBiDiMode;
  436.     property ParentFont;
  437.     property ParentShowHint;
  438.     property PopupMenu;
  439.     property Visible;
  440.     property OnDragDrop;
  441.     property OnDragOver;
  442.     property OnEndDock;
  443.     property OnEndDrag;
  444.     property OnMouseDown;
  445.     property OnMouseMove;
  446.     property OnMouseUp;
  447.     property OnDrawSection: TDrawSectionEvent;
  448.     property OnResize;
  449.     property OnSectionClick: TSectionNotifyEvent;
  450.     property OnSectionResize: TSectionNotifyEvent;
  451.     property OnSectionTrack: TSectionTrackEvent;
  452.     property OnStartDock;
  453.     property OnStartDrag;
  454.   end;
  455.  
  456. { TTreeNode }
  457.  
  458.   TCustomTreeView = class;
  459.   TTreeNodes = class;
  460.  
  461.   TNodeState = (nsCut, nsDropHilited, nsFocused, nsSelected, nsExpanded);
  462.   TNodeAttachMode = (naAdd, naAddFirst, naAddChild, naAddChildFirst, naInsert);
  463.   TAddMode = (taAddFirst, taAdd, taInsert);
  464.  
  465.   PNodeInfo = ^TNodeInfo;
  466.   TNodeInfo = packed record
  467.     ImageIndex: Integer;
  468.     SelectedIndex: Integer;
  469.     StateIndex: Integer;
  470.     OverlayIndex: Integer;
  471.     Data: Pointer;
  472.     Count: Integer;
  473.     Text: string[255];
  474.   end;
  475.  
  476.   TTreeNode = class(TPersistent)
  477.   public
  478.     constructor Create(AOwner: TTreeNodes);
  479.     destructor Destroy; override;
  480.     function AlphaSort: Boolean;
  481.     procedure Assign(Source: TPersistent); override;
  482.     procedure Collapse(Recurse: Boolean);
  483.     function CustomSort(SortProc: TTVCompare; Data: Longint): Boolean;
  484.     procedure Delete;
  485.     procedure DeleteChildren;
  486.     function DisplayRect(TextOnly: Boolean): TRect;
  487.     function EditText: Boolean;
  488.     procedure EndEdit(Cancel: Boolean);
  489.     procedure Expand(Recurse: Boolean);
  490.     function getFirstChild: TTreeNode;
  491.     function GetHandle: HWND;
  492.     function GetLastChild: TTreeNode;
  493.     function GetNext: TTreeNode;
  494.     function GetNextChild(Value: TTreeNode): TTreeNode;
  495.     function getNextSibling: TTreeNode;
  496.     function GetNextVisible: TTreeNode;
  497.     function GetPrev: TTreeNode;
  498.     function GetPrevChild(Value: TTreeNode): TTreeNode;
  499.     function getPrevSibling: TTreeNode;
  500.     function GetPrevVisible: TTreeNode;
  501.     function HasAsParent(Value: TTreeNode): Boolean;
  502.     function IndexOf(Value: TTreeNode): Integer;
  503.     procedure MakeVisible;
  504.     procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode); virtual;
  505.     property AbsoluteIndex: Integer;
  506.     property Count: Integer;
  507.     property Cut: Boolean;
  508.     property Data: Pointer;
  509.     property Deleting: Boolean;
  510.     property Focused: Boolean;
  511.     property DropTarget: Boolean;
  512.     property Selected: Boolean;
  513.     property Expanded: Boolean;
  514.     property Handle: HWND;
  515.     property HasChildren: Boolean;
  516.     property ImageIndex: Integer;
  517.     property Index: Integer;
  518.     property IsVisible: Boolean;
  519.     property Item[Index: Integer]: TTreeNode; default;
  520.     property ItemId: HTreeItem;
  521.     property Level: Integer;
  522.     property OverlayIndex: Integer;
  523.     property Owner: TTreeNodes;
  524.     property Parent: TTreeNode;
  525.     property SelectedIndex: Integer;
  526.     property StateIndex: Integer;
  527.     property Text: string;
  528.     property TreeView: TCustomTreeView;
  529.   end;
  530.  
  531. { TTreeNodes }
  532.  
  533.   PNodeCache = ^TNodeCache;
  534.   TNodeCache = record
  535.     CacheNode: TTreeNode;
  536.     CacheIndex: Integer;
  537.   end;
  538.  
  539.   TTreeNodes = class(TPersistent)
  540.   protected
  541.     function AddItem(Parent, Target: HTreeItem; const Item: TTVItem;
  542.       AddMode: TAddMode): HTreeItem;
  543.     function InternalAddObject(Node: TTreeNode; const S: string;
  544.       Ptr: Pointer; AddMode: TAddMode): TTreeNode;
  545.     procedure DefineProperties(Filer: TFiler); override;
  546.     function CreateItem(Node: TTreeNode): TTVItem;
  547.     function GetCount: Integer;
  548.     procedure SetItem(Index: Integer; Value: TTreeNode);
  549.     procedure SetUpdateState(Updating: Boolean);
  550.   public
  551.     constructor Create(AOwner: TCustomTreeView);
  552.     destructor Destroy; override;
  553.     function AddChildFirst(Node: TTreeNode; const S: string): TTreeNode;
  554.     function AddChild(Node: TTreeNode; const S: string): TTreeNode;
  555.     function AddChildObjectFirst(Node: TTreeNode; const S: string;
  556.       Ptr: Pointer): TTreeNode;
  557.     function AddChildObject(Node: TTreeNode; const S: string;
  558.       Ptr: Pointer): TTreeNode;
  559.     function AddFirst(Node: TTreeNode; const S: string): TTreeNode;
  560.     function Add(Node: TTreeNode; const S: string): TTreeNode;
  561.     function AddObjectFirst(Node: TTreeNode; const S: string;
  562.       Ptr: Pointer): TTreeNode;
  563.     function AddObject(Node: TTreeNode; const S: string;
  564.       Ptr: Pointer): TTreeNode;
  565.     procedure Assign(Source: TPersistent); override;
  566.     procedure BeginUpdate;
  567.     procedure Clear;
  568.     procedure Delete(Node: TTreeNode);
  569.     procedure EndUpdate;
  570.     function GetFirstNode: TTreeNode;
  571.     function GetNode(ItemId: HTreeItem): TTreeNode;
  572.     function Insert(Node: TTreeNode; const S: string): TTreeNode;
  573.     function InsertObject(Node: TTreeNode; const S: string;
  574.       Ptr: Pointer): TTreeNode;
  575.     property Count: Integer;
  576.     property Handle: HWND;
  577.     property Item[Index: Integer]: TTreeNode; default;
  578.     property Owner: TCustomTreeView;
  579.   end;
  580.  
  581. { TCustomTreeView }
  582.  
  583.   THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon,
  584.     htOnIndent, htOnLabel, htOnRight, htOnStateIcon, htToLeft, htToRight);
  585.   THitTests = set of THitTest;
  586.   TSortType = (stNone, stData, stText, stBoth);
  587.   ETreeViewError = class(Exception);
  588.  
  589.   TTVChangingEvent = procedure(Sender: TObject; Node: TTreeNode;
  590.     var AllowChange: Boolean) of object;
  591.   TTVChangedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
  592.   TTVEditingEvent = procedure(Sender: TObject; Node: TTreeNode;
  593.     var AllowEdit: Boolean) of object;
  594.   TTVEditedEvent = procedure(Sender: TObject; Node: TTreeNode; var S: string) of object;
  595.   TTVExpandingEvent = procedure(Sender: TObject; Node: TTreeNode;
  596.     var AllowExpansion: Boolean) of object;
  597.   TTVCollapsingEvent = procedure(Sender: TObject; Node: TTreeNode;
  598.     var AllowCollapse: Boolean) of object;
  599.   TTVExpandedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
  600.   TTVCompareEvent = procedure(Sender: TObject; Node1, Node2: TTreeNode;
  601.     Data: Integer; var Compare: Integer) of object;
  602.   TTVCustomDrawEvent = procedure(Sender: TCustomTreeView; const ARect: TRect;
  603.     var DefaultDraw: Boolean) of object;
  604.   TTVCustomDrawItemEvent = procedure(Sender: TCustomTreeView; Node: TTreeNode;
  605.     State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  606.  
  607.   TCustomTreeView = class(TWinControl)
  608.   protected
  609.     FChangeTimer: TTimer;
  610.     function CanEdit(Node: TTreeNode): Boolean; dynamic;
  611.     function CanChange(Node: TTreeNode): Boolean; dynamic;
  612.     function CanCollapse(Node: TTreeNode): Boolean; dynamic;
  613.     function CanExpand(Node: TTreeNode): Boolean; dynamic;
  614.     procedure Change(Node: TTreeNode); dynamic;
  615.     procedure Collapse(Node: TTreeNode); dynamic;
  616.     function CreateNode: TTreeNode; virtual;
  617.     procedure CreateParams(var Params: TCreateParams); override;
  618.     procedure CreateWnd; override;
  619.     function CustomDraw(const ARect: TRect; Stage: TCustomDrawStage): Boolean; virtual;
  620.     function CustomDrawItem(Node: TTreeNode; State: TCustomDrawState;
  621.       Stage: TCustomDrawStage): Boolean; virtual;
  622.     procedure Delete(Node: TTreeNode); dynamic;
  623.     procedure DestroyWnd; override;
  624.     procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
  625.     procedure DoStartDrag(var DragObject: TDragObject); override;
  626.     procedure Edit(const Item: TTVItem); dynamic;
  627.     procedure Expand(Node: TTreeNode); dynamic;
  628.     function GetDragImages: TDragImageList; override;
  629.     procedure GetImageIndex(Node: TTreeNode); virtual;
  630.     procedure GetSelectedIndex(Node: TTreeNode); virtual;
  631.     function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean;
  632.     procedure Loaded; override;
  633.     procedure Notification(AComponent: TComponent;
  634.       Operation: TOperation); override;
  635.     procedure SetDragMode(Value: TDragMode); override;
  636.     procedure WndProc(var Message: TMessage); override;
  637.     property AutoExpand: Boolean default False;
  638.     property BorderStyle: TBorderStyle default bsSingle;
  639.     property ChangeDelay: Integer default 0;
  640.     property HideSelection: Boolean default True;
  641.     property HotTrack: Boolean default False;
  642.     property Images: TCustomImageList;
  643.     property Indent: Integer;
  644.     property Items: TTreeNodes;
  645.     property ReadOnly: Boolean default False;
  646.     property RightClickSelect: Boolean default False;
  647.     property RowSelect: Boolean default False;
  648.     property ShowButtons: Boolean default True;
  649.     property ShowLines: Boolean default True;
  650.     property ShowRoot: Boolean default True;
  651.     property SortType: TSortType default stNone;
  652.     property StateImages: TCustomImageList;
  653.     property ToolTips: Boolean default True;
  654.     property OnCustomDraw: TTVCustomDrawEvent;
  655.     property OnCustomDrawItem: TTVCustomDrawItemEvent;
  656.     property OnEditing: TTVEditingEvent;
  657.     property OnEdited: TTVEditedEvent;
  658.     property OnExpanding: TTVExpandingEvent;
  659.     property OnExpanded: TTVExpandedEvent;
  660.     property OnCollapsing: TTVCollapsingEvent;
  661.     property OnCollapsed: TTVExpandedEvent;
  662.     property OnChanging: TTVChangingEvent;
  663.     property OnChange: TTVChangedEvent;
  664.     property OnCompare: TTVCompareEvent;
  665.     property OnDeletion: TTVExpandedEvent;
  666.     property OnGetImageIndex: TTVExpandedEvent;
  667.     property OnGetSelectedIndex: TTVExpandedEvent;
  668.   public
  669.     constructor Create(AOwner: TComponent); override;
  670.     destructor Destroy; override;
  671.     function AlphaSort: Boolean;
  672.     function CustomSort(SortProc: TTVCompare; Data: Longint): Boolean;
  673.     procedure FullCollapse;
  674.     procedure FullExpand;
  675.     function GetHitTestInfoAt(X, Y: Integer): THitTests;
  676.     function GetNodeAt(X, Y: Integer): TTreeNode;
  677.     function IsEditing: Boolean;
  678.     procedure LoadFromFile(const FileName: string);
  679.     procedure LoadFromStream(Stream: TStream);
  680.     procedure SaveToFile(const FileName: string);
  681.     procedure SaveToStream(Stream: TStream);
  682.     property Canvas: TCanvas;
  683.     property DropTarget: TTreeNode;
  684.     property Selected: TTreeNode;
  685.     property TopItem: TTreeNode;
  686.   end;
  687.  
  688.   TTreeView = class(TCustomTreeView)
  689.   published
  690.     property Align;
  691.     property Anchors;
  692.     property AutoExpand;
  693.     property BiDiMode;
  694.     property BorderStyle;
  695.     property BorderWidth;
  696.     property ChangeDelay;
  697.     property Color;
  698.     property Ctl3D;
  699.     property Constraints;
  700.     property DragKind;
  701.     property DragCursor;
  702.     property DragMode;
  703.     property Enabled;
  704.     property Font;
  705.     property HideSelection;
  706.     property HotTrack;
  707.     property Images;
  708.     property Indent;
  709.     property Items;
  710.     property ParentBiDiMode;
  711.     property ParentColor default False;
  712.     property ParentCtl3D;
  713.     property ParentFont;
  714.     property ParentShowHint;
  715.     property PopupMenu;
  716.     property ReadOnly;
  717.     property RightClickSelect;
  718.     property RowSelect;
  719.     property ShowButtons;
  720.     property ShowHint;
  721.     property ShowLines;
  722.     property ShowRoot;
  723.     property SortType;
  724.     property StateImages;
  725.     property TabOrder;
  726.     property TabStop default True;
  727.     property ToolTips;
  728.     property Visible;
  729.     property OnChange;
  730.     property OnChanging;
  731.     property OnClick;
  732.     property OnCollapsing;
  733.     property OnCollapsed;
  734.     property OnCompare;
  735.     property OnCustomDraw;
  736.     property OnCustomDrawItem;
  737.     property OnDblClick;
  738.     property OnDeletion;
  739.     property OnDragDrop;
  740.     property OnDragOver;
  741.     property OnEdited;
  742.     property OnEditing;
  743.     property OnEndDock;
  744.     property OnEndDrag;
  745.     property OnEnter;
  746.     property OnExit;
  747.     property OnExpanding;
  748.     property OnExpanded;
  749.     property OnGetImageIndex;
  750.     property OnGetSelectedIndex;
  751.     property OnKeyDown;
  752.     property OnKeyPress;
  753.     property OnKeyUp;
  754.     property OnMouseDown;
  755.     property OnMouseMove;
  756.     property OnMouseUp;
  757.     property OnStartDock;
  758.     property OnStartDrag;
  759.   end;
  760.  
  761. { TTrackBar }
  762.  
  763.   TTrackBarOrientation = (trHorizontal, trVertical);
  764.   TTickMark = (tmBottomRight, tmTopLeft, tmBoth);
  765.   TTickStyle = (tsNone, tsAuto, tsManual);
  766.  
  767.   TTrackBar = class(TWinControl)
  768.   protected
  769.     procedure CreateParams(var Params: TCreateParams); override;
  770.     procedure CreateWnd; override;
  771.     procedure DestroyWnd; override;
  772.   public
  773.     constructor Create(AOwner: TComponent); override;
  774.     procedure SetTick(Value: Integer);
  775.   published
  776.     property Align;
  777.     property Anchors;
  778.     property BorderWidth;
  779.     property Ctl3D;
  780.     property DragCursor;
  781.     property DragKind;
  782.     property DragMode;
  783.     property Enabled;
  784.     property Constraints;
  785.     property LineSize: Integer default 1;
  786.     property Max: Integer default 10;
  787.     property Min: Integer default 0;
  788.     property Orientation: TTrackBarOrientation;
  789.     property ParentCtl3D;
  790.     property ParentShowHint;
  791.     property PageSize: Integer default 2;
  792.     property PopupMenu;
  793.     property Frequency: Integer;
  794.     property Position: Integer;
  795.     property SliderVisible: Boolean default True;
  796.     property SelEnd: Integer;
  797.     property SelStart: Integer;
  798.     property ShowHint;
  799.     property TabOrder;
  800.     property TabStop default True;
  801.     property ThumbLength: Integer;
  802.     property TickMarks: TTickMark;
  803.     property TickStyle: TTickStyle;
  804.     property Visible;
  805.     property OnChange: TNotifyEvent;
  806.     property OnDragDrop;
  807.     property OnDragOver;
  808.     property OnEndDock;
  809.     property OnEndDrag;
  810.     property OnEnter;
  811.     property OnExit;
  812.     property OnKeyDown;
  813.     property OnKeyPress;
  814.     property OnKeyUp;
  815.     property OnStartDock;
  816.     property OnStartDrag;
  817.   end;
  818.  
  819. { TProgressBar }
  820.  
  821.   TProgressRange = Integer; // for backward compatibility
  822.  
  823.   TProgressBarOrientation = (pbHorizontal, pbVertical);
  824.  
  825.   TProgressBar = class(TWinControl)
  826.   protected
  827.     procedure CreateParams(var Params: TCreateParams); override;
  828.     procedure CreateWnd; override;
  829.   public
  830.     constructor Create(AOwner: TComponent); override;
  831.     procedure StepIt;
  832.     procedure StepBy(Delta: Integer);
  833.   published
  834.     property Align;
  835.     property Anchors;
  836.     property BorderWidth;
  837.     property DragCursor;
  838.     property DragKind;
  839.     property DragMode;
  840.     property Enabled;
  841.     property Hint;
  842.     property Constraints;
  843.     property Min: Integer;
  844.     property Max: Integer;
  845.     property Orientation: TProgressBarOrientation default pbHorizontal;
  846.     property ParentShowHint;
  847.     property PopupMenu;
  848.     property Position: Integer default 0;
  849.     property Smooth: Boolean default False;
  850.     property Step: Integer default 10;
  851.     property ShowHint;
  852.     property TabOrder;
  853.     property TabStop;
  854.     property Visible;
  855.     property OnDragDrop;
  856.     property OnDragOver;
  857.     property OnEndDock;
  858.     property OnEndDrag;
  859.     property OnEnter;
  860.     property OnExit;
  861.     property OnMouseDown;
  862.     property OnMouseMove;
  863.     property OnMouseUp;
  864.     property OnStartDock;
  865.     property OnStartDrag;
  866.   end;
  867.  
  868. { TTextAttributes }
  869.  
  870.   TCustomRichEdit = class;
  871.  
  872.   TAttributeType = (atSelected, atDefaultText);
  873.   TConsistentAttribute = (caBold, caColor, caFace, caItalic,
  874.     caSize, caStrikeOut, caUnderline, caProtected);
  875.   TConsistentAttributes = set of TConsistentAttribute;
  876.  
  877.   TTextAttributes = class(TPersistent)
  878.   protected
  879.     procedure InitFormat(var Format: TCharFormat);
  880.     procedure AssignTo(Dest: TPersistent); override;
  881.   public
  882.     constructor Create(AOwner: TCustomRichEdit; AttributeType: TAttributeType);
  883.     procedure Assign(Source: TPersistent); override;
  884.     property Charset: TFontCharset;
  885.     property Color: TColor;
  886.     property ConsistentAttributes: TConsistentAttributes;
  887.     property Name: TFontName;
  888.     property Pitch: TFontPitch;
  889.     property Protected: Boolean;
  890.     property Size: Integer;
  891.     property Style: TFontStyles;
  892.     property Height: Integer;
  893.   end;
  894.  
  895. { TParaAttributes }
  896.  
  897.   TNumberingStyle = (nsNone, nsBullet);
  898.  
  899.   TParaAttributes = class(TPersistent)
  900.   public
  901.     constructor Create(AOwner: TCustomRichEdit);
  902.     procedure Assign(Source: TPersistent); override;
  903.     property Alignment: TAlignment;
  904.     property FirstIndent: Longint;
  905.     property LeftIndent: Longint;
  906.     property Numbering: TNumberingStyle;
  907.     property RightIndent: Longint;
  908.     property Tab[Index: Byte]: Longint;
  909.     property TabCount: Integer;
  910.   end;
  911.  
  912. { TCustomRichEdit }
  913.  
  914.   TRichEditResizeEvent = procedure(Sender: TObject; Rect: TRect) of object;
  915.   TRichEditProtectChange = procedure(Sender: TObject;
  916.     StartPos, EndPos: Integer; var AllowChange: Boolean) of object;
  917.   TRichEditSaveClipboard = procedure(Sender: TObject;
  918.     NumObjects, NumChars: Integer; var SaveClipboard: Boolean) of object;
  919.   TSearchType = (stWholeWord, stMatchCase);
  920.   TSearchTypes = set of TSearchType;
  921.  
  922.   TConversion = class(TObject)
  923.   public
  924.     function ConvertReadStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; virtual;
  925.     function ConvertWriteStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; virtual;
  926.   end;
  927.  
  928.   TConversionClass = class of TConversion;
  929.  
  930.   PConversionFormat = ^TConversionFormat;
  931.   TConversionFormat = record
  932.     ConversionClass: TConversionClass;
  933.     Extension: string;
  934.     Next: PConversionFormat;
  935.   end;
  936.  
  937.   PRichEditStreamInfo = ^TRichEditStreamInfo;
  938.   TRichEditStreamInfo = record
  939.     Converter: TConversion;
  940.     Stream: TStream;
  941.   end;
  942.  
  943.   TCustomRichEdit = class(TCustomMemo)
  944.   protected
  945.     procedure CreateParams(var Params: TCreateParams); override;
  946.     procedure CreateWnd; override;
  947.     procedure DestroyWnd; override;
  948.     procedure RequestSize(const Rect: TRect); virtual;
  949.     procedure SelectionChange; dynamic;
  950.     procedure DoSetMaxLength(Value: Integer); override;
  951.     function GetCaretPos: TPoint; override;
  952.     function GetSelLength: Integer; override;
  953.     function GetSelStart: Integer; override;
  954.     function GetSelText: string; override;
  955.     procedure SetSelLength(Value: Integer); override;
  956.     procedure SetSelStart(Value: Integer); override;
  957.     property HideSelection: Boolean default True;
  958.     property HideScrollBars: Boolean default True;
  959.     property Lines: TStrings;
  960.     property OnSaveClipboard: TRichEditSaveClipboard;
  961.     property OnSelectionChange: TNotifyEvent;
  962.     property OnProtectChange: TRichEditProtectChange;
  963.     property OnResizeRequest: TRichEditResizeEvent;
  964.     property PlainText: Boolean default False;
  965.   public
  966.     constructor Create(AOwner: TComponent); override;
  967.     destructor Destroy; override;
  968.     procedure Clear; override;
  969.     function FindText(const SearchStr: string;
  970.       StartPos, Length: Integer; Options: TSearchTypes): Integer;
  971.     function GetSelTextBuf(Buffer: PChar; BufSize: Integer): Integer; override;
  972.     procedure Print(const Caption: string); virtual;
  973.     class procedure RegisterConversionFormat(const AExtension: string;
  974.       AConversionClass: TConversionClass);
  975.     property DefaultConverter: TConversionClass;
  976.     property DefAttributes: TTextAttributes;
  977.     property SelAttributes: TTextAttributes;
  978.     property PageRect: TRect;
  979.     property Paragraph: TParaAttributes;
  980.   end;
  981.  
  982.   TRichEdit = class(TCustomRichEdit)
  983.   published
  984.     property Align;
  985.     property Alignment;
  986.     property Anchors;
  987.     property BiDiMode;
  988.     property BorderStyle;
  989.     property BorderWidth;
  990.     property Color;
  991.     property Ctl3D;
  992.     property DragCursor;
  993.     property DragKind;
  994.     property DragMode;
  995.     property Enabled;
  996.     property Font;
  997.     property HideSelection;
  998.     property HideScrollBars;
  999.     property ImeMode;
  1000.     property ImeName;
  1001.     property Constraints;
  1002.     property Lines;
  1003.     property MaxLength;
  1004.     property ParentBiDiMode;
  1005.     property ParentColor;
  1006.     property ParentCtl3D;
  1007.     property ParentFont;
  1008.     property ParentShowHint;
  1009.     property PlainText;
  1010.     property PopupMenu;
  1011.     property ReadOnly;
  1012.     property ScrollBars;
  1013.     property ShowHint;
  1014.     property TabOrder;
  1015.     property TabStop default True;
  1016.     property Visible;
  1017.     property WantTabs;
  1018.     property WantReturns;
  1019.     property WordWrap;
  1020.     property OnChange;
  1021.     property OnDragDrop;
  1022.     property OnDragOver;
  1023.     property OnEndDock;
  1024.     property OnEndDrag;
  1025.     property OnEnter;
  1026.     property OnExit;
  1027.     property OnKeyDown;
  1028.     property OnKeyPress;
  1029.     property OnKeyUp;
  1030.     property OnMouseDown;
  1031.     property OnMouseMove;
  1032.     property OnMouseUp;
  1033.     property OnMouseWheel;
  1034.     property OnMouseWheelDown;
  1035.     property OnMouseWheelUp;
  1036.     property OnProtectChange;
  1037.     property OnResizeRequest;
  1038.     property OnSaveClipboard;
  1039.     property OnSelectionChange;
  1040.     property OnStartDock;
  1041.     property OnStartDrag;
  1042.   end;
  1043.  
  1044. { TUpDown }
  1045.  
  1046.   TUDAlignButton = (udLeft, udRight);
  1047.   TUDOrientation = (udHorizontal, udVertical);
  1048.   TUDBtnType = (btNext, btPrev);
  1049.   TUDClickEvent = procedure (Sender: TObject; Button: TUDBtnType) of object;
  1050.   TUDChangingEvent = procedure (Sender: TObject; var AllowChange: Boolean) of object;
  1051.  
  1052.   TCustomUpDown = class(TWinControl)
  1053.   protected
  1054.     function CanChange: Boolean; dynamic;
  1055.     procedure CreateParams(var Params: TCreateParams); override;
  1056.     procedure CreateWnd; override;
  1057.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1058.     procedure Click(Button: TUDBtnType); reintroduce; dynamic;
  1059.     property AlignButton: TUDAlignButton default udRight;
  1060.     property ArrowKeys: Boolean default True;
  1061.     property Associate: TWinControl;
  1062.     property Min: SmallInt;
  1063.     property Max: SmallInt default 100;
  1064.     property Increment: Integer default 1;
  1065.     property Orientation: TUDOrientation default udVertical;
  1066.     property Position: SmallInt;
  1067.     property Thousands: Boolean default True;
  1068.     property Wrap: Boolean;
  1069.     property OnChanging: TUDChangingEvent;
  1070.     property OnClick: TUDClickEvent;
  1071.   public
  1072.     constructor Create(AOwner: TComponent); override;
  1073.   end;
  1074.  
  1075.   TUpDown = class(TCustomUpDown)
  1076.   published
  1077.     property AlignButton;
  1078.     property Anchors;
  1079.     property Associate;
  1080.     property ArrowKeys;
  1081.     property Enabled;
  1082.     property Hint;
  1083.     property Min;
  1084.     property Max;
  1085.     property Increment;
  1086.     property Constraints;
  1087.     property Orientation;
  1088.     property ParentShowHint;
  1089.     property PopupMenu;
  1090.     property Position;
  1091.     property ShowHint;
  1092.     property TabOrder;
  1093.     property TabStop;
  1094.     property Thousands;
  1095.     property Visible;
  1096.     property Wrap;
  1097.     property OnChanging;
  1098.     property OnClick;
  1099.     property OnEnter;
  1100.     property OnExit;
  1101.     property OnMouseDown;
  1102.     property OnMouseMove;
  1103.     property OnMouseUp;
  1104.   end;
  1105.  
  1106. { THotKey }
  1107.  
  1108.   THKModifier = (hkShift, hkCtrl, hkAlt, hkExt);
  1109.   THKModifiers = set of THKModifier;
  1110.   THKInvalidKey = (hcNone, hcShift, hcCtrl, hcAlt, hcShiftCtrl,
  1111.     hcShiftAlt, hcCtrlAlt, hcShiftCtrlAlt);
  1112.   THKInvalidKeys = set of THKInvalidKey;
  1113.  
  1114.   TCustomHotKey = class(TWinControl)
  1115.   protected
  1116.     procedure CreateParams(var Params: TCreateParams); override;
  1117.     procedure CreateWnd; override;
  1118.     property AutoSize: Boolean default True;
  1119.     property InvalidKeys: THKInvalidKeys;
  1120.     property Modifiers: THKModifiers;
  1121.     property HotKey: TShortCut;
  1122.     property TabStop default True;
  1123.   public
  1124.     constructor Create(AOwner: TComponent); override;
  1125.   end;
  1126.  
  1127.   THotKey = class(TCustomHotKey)
  1128.   published
  1129.     property Anchors;
  1130.     property AutoSize;
  1131.     property BiDiMode;
  1132.     property Constraints;
  1133.     property Enabled;
  1134.     property Hint;
  1135.     property HotKey;
  1136.     property InvalidKeys;
  1137.     property Modifiers;
  1138.     property ParentBiDiMode;
  1139.     property ParentShowHint;
  1140.     property PopupMenu;
  1141.     property ShowHint;
  1142.     property TabOrder;
  1143.     property TabStop;
  1144.     property Visible;
  1145.     property OnEnter;
  1146.     property OnExit;
  1147.     property OnMouseDown;
  1148.     property OnMouseMove;
  1149.     property OnMouseUp;
  1150.   end;
  1151.  
  1152. const
  1153.   ColumnHeaderWidth = LVSCW_AUTOSIZE_USEHEADER;
  1154.   ColumnTextWidth = LVSCW_AUTOSIZE;
  1155.  
  1156. type
  1157.   TListColumns = class;
  1158.   TListItems = class;
  1159.   TCustomListView = class;
  1160.   TWidth = ColumnHeaderWidth..MaxInt;
  1161.  
  1162.   TListColumn = class(TCollectionItem)
  1163.   protected
  1164.     procedure DefineProperties(Filer: TFiler); override;
  1165.     function GetDisplayName: string; override;
  1166.   public
  1167.     constructor Create(Collection: TCollection); override;
  1168.     destructor Destroy; override;
  1169.     procedure Assign(Source: TPersistent); override;
  1170.     property WidthType: TWidth;
  1171.   published
  1172.     property Alignment: TAlignment default taLeftJustify;
  1173.     property AutoSize: Boolean default False;
  1174.     property Caption: string;
  1175.     property ImageIndex: Integer default -1;
  1176.     property MaxWidth: TWidth default 0;
  1177.     property MinWidth: TWidth default 0;
  1178.     property Width: TWidth default 50;
  1179.   end;
  1180.  
  1181.   TListColumns = class(TCollection)
  1182.   protected
  1183.     function GetOwner: TPersistent; override;
  1184.     procedure Update(Item: TCollectionItem); override;
  1185.   public
  1186.     constructor Create(AOwner: TCustomListView);
  1187.     function Add: TListColumn;
  1188.     property Owner: TCustomListView;
  1189.     property Items[Index: Integer]: TListColumn; default;
  1190.   end;
  1191.  
  1192.   TDisplayCode = (drBounds, drIcon, drLabel, drSelectBounds);
  1193.  
  1194.   { TListItem }
  1195.  
  1196.   TListItem = class(TPersistent)
  1197.   public
  1198.     constructor Create(AOwner: TListItems);
  1199.     destructor Destroy; override;
  1200.     procedure Assign(Source: TPersistent); override;
  1201.     procedure CancelEdit;
  1202.     procedure Delete;
  1203.     function DisplayRect(Code: TDisplayCode): TRect;
  1204.     function EditCaption: Boolean;
  1205.     function GetPosition: TPoint;
  1206.     procedure MakeVisible(PartialOK: Boolean);
  1207.     procedure Update;
  1208.     procedure SetPosition(const Value: TPoint);
  1209.     property Caption: string;
  1210.     property Checked: Boolean;
  1211.     property Cut: Boolean index 0;
  1212.     property Data: Pointer;
  1213.     property DropTarget: Boolean index 1;
  1214.     property Focused: Boolean index 2;
  1215.     property Handle: HWND;
  1216.     property ImageIndex: Integer index 0;
  1217.     property Indent: Integer default 0;
  1218.     property Index: Integer;
  1219.     property Left: Integer;
  1220.     property ListView: TCustomListView;
  1221.     property Owner: TListItems;
  1222.     property OverlayIndex: Integer index 1;
  1223.     property Position: TPoint;
  1224.     property Selected: Boolean index 3;
  1225.     property StateIndex: Integer index 2;
  1226.     property SubItems: TStrings;
  1227.     property Top: Integer;
  1228.   end;
  1229.  
  1230. { TListItems }
  1231.  
  1232.   TListItems = class(TPersistent)
  1233.   protected
  1234.     procedure DefineProperties(Filer: TFiler); override;
  1235.     function CreateItem(Index: Integer; ListItem: TListItem): TLVItem;
  1236.     function GetCount: Integer;
  1237.     function GetHandle: HWND;
  1238.     function GetItem(Index: Integer): TListItem;
  1239.     procedure SetCount(Value: Integer);
  1240.     procedure SetItem(Index: Integer; Value: TListItem);
  1241.     procedure SetUpdateState(Updating: Boolean);
  1242.   public
  1243.     constructor Create(AOwner: TCustomListView);
  1244.     destructor Destroy; override;
  1245.     function Add: TListItem;
  1246.     procedure Assign(Source: TPersistent); override;
  1247.     procedure BeginUpdate;
  1248.     procedure Clear;
  1249.     procedure Delete(Index: Integer);
  1250.     procedure EndUpdate;
  1251.     function IndexOf(Value: TListItem): Integer;
  1252.     function Insert(Index: Integer): TListItem;
  1253.     property Count: Integer;
  1254.     property Handle: HWND;
  1255.     property Item[Index: Integer]: TListItem; default;
  1256.     property Owner: TCustomListView;
  1257.   end;
  1258.  
  1259. { TIconOptions }
  1260.  
  1261.   TIconArrangement = (iaTop, iaLeft);
  1262.  
  1263.   TIconOptions = class(TPersistent)
  1264.   public
  1265.     constructor Create(AOwner: TCustomListView);
  1266.   published
  1267.     property Arrangement: TIconArrangement default iaTop;
  1268.     property AutoArrange: Boolean default False;
  1269.     property WrapText: Boolean default True;
  1270.   end;
  1271.  
  1272.   TListArrangement = (arAlignBottom, arAlignLeft, arAlignRight,
  1273.     arAlignTop, arDefault, arSnapToGrid);
  1274.   TViewStyle = (vsIcon, vsSmallIcon, vsList, vsReport);
  1275.   TItemState = (isNone, isCut, isDropHilited, isFocused, isSelected, isActivating);
  1276.   TItemStates = set of TItemState;
  1277.   TItemChange = (ctText, ctImage, ctState);
  1278.   TItemFind = (ifData, ifPartialString, ifExactString, ifNearest);
  1279.   TSearchDirection = (sdLeft, sdRight, sdAbove, sdBelow, sdAll);
  1280.   TListHotTrackStyle = (htHandPoint, htUnderlineCold, htUnderlineHot);
  1281.   TListHotTrackStyles = set of TListHotTrackStyle;
  1282.   TItemRequests = (irText, irImage, irParam, irState, irIndent);
  1283.   TItemRequest = set of TItemRequests;
  1284.  
  1285.   TLVDeletedEvent = procedure(Sender: TObject; Item: TListItem) of object;
  1286.   TLVEditingEvent = procedure(Sender: TObject; Item: TListItem;
  1287.     var AllowEdit: Boolean) of object;
  1288.   TLVEditedEvent = procedure(Sender: TObject; Item: TListItem; var S: string) of object;
  1289.   TLVChangeEvent = procedure(Sender: TObject; Item: TListItem;
  1290.     Change: TItemChange) of object;
  1291.   TLVChangingEvent = procedure(Sender: TObject; Item: TListItem;
  1292.     Change: TItemChange; var AllowChange: Boolean) of object;
  1293.   TLVColumnClickEvent = procedure(Sender: TObject; Column: TListColumn) of object;
  1294.   TLVCompareEvent = procedure(Sender: TObject; Item1, Item2: TListItem;
  1295.     Data: Integer; var Compare: Integer) of object;
  1296.   TLVNotifyEvent = procedure(Sender: TObject; Item: TListItem) of object;
  1297.   TLVSelectItemEvent = procedure(Sender: TObject; Item: TListItem;
  1298.     Selected: Boolean) of object;
  1299.   TLVDrawItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1300.     Rect: TRect; State: TOwnerDrawState) of object;
  1301.   TLVCustomDrawEvent = procedure(Sender: TCustomListView; const ARect: TRect;
  1302.     var DefaultDraw: Boolean) of object;
  1303.   TLVCustomDrawItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1304.     State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  1305.   TLVCustomDrawSubItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
  1306.     SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean) of object;
  1307.   TLVOwnerDataEvent = procedure(Sender: TObject; Item: TListItem) of object;
  1308.   TLVOwnerDataFindEvent = procedure(Sender: TObject; Find: TItemFind;
  1309.     const FindString: string; const FindPosition: TPoint; FindData: Pointer;
  1310.     StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean;
  1311.     var Index: Integer) of object;
  1312.   TLVOwnerDataHintEvent = procedure(Sender: TObject; StartIndex, EndIndex: Integer) of object;
  1313.   TLVOwnerDataStateChangeEvent = procedure(Sender: TObject; StartIndex,
  1314.     EndIndex: Integer; OldState, NewState: TItemStates) of object;
  1315.  
  1316. { TCustomListView }
  1317.  
  1318.   TCustomListView = class(TWinControl)
  1319.   protected
  1320.     function CanChange(Item: TListItem; Change: Integer): Boolean; dynamic;
  1321.     function CanEdit(Item: TListItem): Boolean; dynamic;
  1322.     procedure Change(Item: TListItem; Change: Integer); dynamic;
  1323.     procedure ColClick(Column: TListColumn); dynamic;
  1324.     function ColumnsShowing: Boolean;
  1325.     function CreateListItem: TListItem; virtual;
  1326.     procedure CreateParams(var Params: TCreateParams); override;
  1327.     procedure CreateWnd; override;
  1328.     function CustomDraw(const ARect: TRect; Stage: TCustomDrawStage): Boolean; virtual;
  1329.     function CustomDrawItem(Item: TListItem; State: TCustomDrawState;
  1330.       Stage: TCustomDrawStage): Boolean; virtual;
  1331.     function CustomDrawSubItem(Item: TListItem; SubItem: Integer;
  1332.       State: TCustomDrawState; Stage: TCustomDrawStage): Boolean; virtual;
  1333.     procedure Delete(Item: TListItem); dynamic;
  1334.     procedure DestroyWnd; override;
  1335.     procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
  1336.     procedure DoStartDrag(var DragObject: TDragObject); override;
  1337.     procedure DrawItem(Item: TListItem; Rect: TRect; State: TOwnerDrawState); virtual;
  1338.     procedure Edit(const Item: TLVItem); dynamic;
  1339.     function OwnerDataFetch(Item: TListItem; Request: TItemRequest): Boolean; virtual;
  1340.     function OwnerDataFind(Find: TItemFind; const FindString: string;
  1341.       const FindPosition: TPoint; FindData: Pointer; StartIndex: Integer;
  1342.       Direction: TSearchDirection; Wrap: Boolean): Integer; virtual;
  1343.     function OwnerDataHint(StartIndex, EndIndex: Integer): Boolean; virtual;
  1344.     function OwnerDataStateChange(StartIndex, EndIndex: Integer; OldState,
  1345.       NewState: TItemStates): Boolean; virtual;
  1346.     function GetDragImages: TDragImageList; override;
  1347.     function GetItemIndex(Value: TListItem): Integer;
  1348.     procedure InsertItem(Item: TListItem); dynamic;
  1349.     function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean;
  1350.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1351.     procedure UpdateColumn(Index: Integer);
  1352.     procedure UpdateColumns;
  1353.     procedure WndProc(var Message: TMessage); override;
  1354.     property BorderStyle: TBorderStyle default bsSingle;
  1355.     property Columns: TListColumns;
  1356.     property ColumnClick: Boolean default True;
  1357.     property ReadOnly: Boolean;
  1358.     property HideSelection: Boolean default True;
  1359.     property IconOptions: TIconOptions;
  1360.     property Items: TListItems;
  1361.     property AllocBy: Integer default 0;
  1362.     property LargeImages: TCustomImageList;
  1363.     property MultiSelect: Boolean default False;
  1364.     property OwnerData: Boolean default False;
  1365.     property OwnerDraw: Boolean default False;
  1366.     property OnChange: TLVChangeEvent;
  1367.     property OnChanging: TLVChangingEvent;
  1368.     property OnColumnClick: TLVColumnClickEvent;
  1369.     property OnCompare: TLVCompareEvent;
  1370.     property OnCustomDraw: TLVCustomDrawEvent;
  1371.     property OnCustomDrawItem: TLVCustomDrawItemEvent;
  1372.     property OnCustomDrawSubItem: TLVCustomDrawSubItemEvent;
  1373.     property OnData: TLVOwnerDataEvent;
  1374.     property OnDataFind: TLVOwnerDataFindEvent;
  1375.     property OnDataHint: TLVOwnerDataHintEvent;
  1376.     property OnDataStateChange: TLVOwnerDataStateChangeEvent;
  1377.     property OnDeletion: TLVDeletedEvent;
  1378.     property OnDrawItem: TLVDrawItemEvent;
  1379.     property OnEdited: TLVEditedEvent;
  1380.     property OnEditing: TLVEditingEvent;
  1381.     property OnGetImageIndex: TLVNotifyEvent;
  1382.     property OnInsert: TLVDeletedEvent;
  1383.     property OnSelectItem: TLVSelectItemEvent;
  1384.     property ShowColumnHeaders: Boolean default True;
  1385.     property SmallImages: TCustomImageList;
  1386.     property SortType: TSortType default stNone;
  1387.     property StateImages: TCustomImageList;
  1388.     property ViewStyle: TViewStyle default vsIcon;
  1389.   public
  1390.     constructor Create(AOwner: TComponent); override;
  1391.     destructor Destroy; override;
  1392.     function AlphaSort: Boolean;
  1393.     procedure Arrange(Code: TListArrangement);
  1394.     function FindCaption(StartIndex: Integer; Value: string;
  1395.       Partial, Inclusive, Wrap: Boolean): TListItem;
  1396.     function FindData(StartIndex: Integer; Value: Pointer;
  1397.       Inclusive, Wrap: Boolean): TListItem;
  1398.     function GetHitTestInfoAt(X, Y: Integer): THitTests;
  1399.     function GetItemAt(X, Y: Integer): TListItem;
  1400.     function GetNearestItem(Point: TPoint;
  1401.       Direction: TSearchDirection): TListItem;
  1402.     function GetNextItem(StartItem: TListItem;
  1403.       Direction: TSearchDirection; States: TItemStates): TListItem;
  1404.     function GetSearchString: string;
  1405.     function IsEditing: Boolean;
  1406.     procedure Scroll(DX, DY: Integer);
  1407.     property Canvas: TCanvas;
  1408.     property Checkboxes: Boolean default False;
  1409.     property Column[Index: Integer]: TListColumn;
  1410.     property DropTarget: TListItem;
  1411.     property FlatScrollBars: Boolean default False;
  1412.     property FullDrag: Boolean default False;
  1413.     property GridLines: Boolean default False;
  1414.     property HotTrack: Boolean default False;
  1415.     property HotTrackStyles: TListHotTrackStyles;
  1416.     property ItemFocused: TListItem;
  1417.     property RowSelect: Boolean default False;
  1418.     property SelCount: Integer;
  1419.     property Selected: TListItem;
  1420.     function CustomSort(SortProc: TLVCompare; lParam: Longint): Boolean;
  1421.     function StringWidth(S: string): Integer;
  1422.     procedure UpdateItems(FirstIndex, LastIndex: Integer);
  1423.     property TopItem: TListItem;
  1424.     property ViewOrigin: TPoint;
  1425.     property VisibleRowCount: Integer;
  1426.     property BoundingRect: TRect;
  1427.   end;
  1428.  
  1429. { TListView }
  1430.  
  1431.   TListView = class(TCustomListView)
  1432.   published
  1433.     property Align;
  1434.     property AllocBy;
  1435.     property Anchors;
  1436.     property BiDiMode;
  1437.     property BorderStyle;
  1438.     property BorderWidth;
  1439.     property Checkboxes;
  1440.     property Color;
  1441.     property Columns;
  1442.     property ColumnClick;
  1443.     property Constraints;
  1444.     property Ctl3D;
  1445.     property DragCursor;
  1446.     property DragKind;
  1447.     property DragMode;
  1448.     property Enabled;
  1449.     property Font;
  1450.     property FlatScrollBars;
  1451.     property FullDrag;
  1452.     property GridLines;
  1453.     property HideSelection;
  1454.     property HotTrack;
  1455.     property HotTrackStyles;
  1456.     property IconOptions;
  1457.     property Items;
  1458.     property LargeImages;
  1459.     property MultiSelect;
  1460.     property OwnerData;
  1461.     property OwnerDraw;
  1462.     property ReadOnly default False;
  1463.     property RowSelect;
  1464.     property ParentBiDiMode;
  1465.     property ParentColor default False;
  1466.     property ParentFont;
  1467.     property ParentShowHint;
  1468.     property PopupMenu;
  1469.     property ShowColumnHeaders;
  1470.     property ShowHint;
  1471.     property SmallImages;
  1472.     property SortType;
  1473.     property StateImages;
  1474.     property TabOrder;
  1475.     property TabStop default True;
  1476.     property ViewStyle;
  1477.     property Visible;
  1478.     property OnChange;
  1479.     property OnChanging;
  1480.     property OnClick;
  1481.     property OnColumnClick;
  1482.     property OnCompare;
  1483.     property OnCustomDraw;
  1484.     property OnCustomDrawItem;
  1485.     property OnCustomDrawSubItem;
  1486.     property OnData;
  1487.     property OnDataFind;
  1488.     property OnDataHint;
  1489.     property OnDataStateChange;
  1490.     property OnDblClick;
  1491.     property OnDeletion;
  1492.     property OnDrawItem;
  1493.     property OnEdited;
  1494.     property OnEditing;
  1495.     property OnEndDock;
  1496.     property OnEndDrag;
  1497.     property OnEnter;
  1498.     property OnExit;
  1499.     property OnGetImageIndex;
  1500.     property OnDragDrop;
  1501.     property OnDragOver;
  1502.     property OnInsert;
  1503.     property OnKeyDown;
  1504.     property OnKeyPress;
  1505.     property OnKeyUp;
  1506.     property OnMouseDown;
  1507.     property OnMouseMove;
  1508.     property OnMouseUp;
  1509.     property OnResize;
  1510.     property OnSelectItem;
  1511.     property OnStartDock;
  1512.     property OnStartDrag;
  1513.   end;
  1514.  
  1515. { TAnimate }
  1516.  
  1517.   TCommonAVI = (aviNone, aviFindFolder, aviFindFile, aviFindComputer, aviCopyFiles,
  1518.     aviCopyFile, aviRecycleFile, aviEmptyRecycle, aviDeleteFile);
  1519.  
  1520.   TAnimate = class(TWinControl)
  1521.   protected
  1522.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  1523.     procedure CreateParams(var Params: TCreateParams); override;
  1524.     procedure CreateWnd; override;
  1525.     procedure DestroyWnd; override;
  1526.     procedure DoOpen; virtual;
  1527.     procedure DoClose; virtual;
  1528.     procedure DoStart; virtual;
  1529.     procedure DoStop; virtual;
  1530.     procedure Loaded; override;
  1531.   public
  1532.     constructor Create(AOwner: TComponent); override;
  1533.     property FrameCount: Integer;
  1534.     property FrameHeight: Integer;
  1535.     property FrameWidth: Integer;
  1536.     property Open: Boolean;
  1537.     procedure Play(FromFrame, ToFrame: Word; Count: Integer);
  1538.     procedure Reset;
  1539.     procedure Seek(Frame: Smallint);
  1540.     procedure Stop;
  1541.     property ResHandle: THandle;
  1542.     property ResId: Integer;
  1543.     property ResName: string;
  1544.   published
  1545.     property Align;
  1546.     property Active: Boolean;
  1547.     property Anchors;
  1548.     property AutoSize default True;
  1549.     property BorderWidth;
  1550.     property Center: Boolean default True;
  1551.     property Color;
  1552.     property CommonAVI: TCommonAVI default aviNone;
  1553.     property Constraints;
  1554.     property FileName: string;
  1555.     property ParentColor;
  1556.     property ParentShowHint;
  1557.     property Repetitions: Integer default 0;
  1558.     property ShowHint;
  1559.     property StartFrame: Smallint default 1;
  1560.     property StopFrame: Smallint default 0;
  1561.     property Timers: Boolean default False;
  1562.     property Transparent: Boolean default True;
  1563.     property Visible;
  1564.     property OnOpen: TNotifyEvent;
  1565.     property OnClose: TNotifyEvent;
  1566.     property OnStart: TNotifyEvent;
  1567.     property OnStop: TNotifyEvent;
  1568.   end;
  1569.  
  1570. { TToolBar }
  1571.  
  1572. const
  1573.   CN_DROPDOWNCLOSED = WM_USER + $1000;
  1574.  
  1575. type
  1576.   TToolButtonStyle = (tbsButton, tbsCheck, tbsDropDown, tbsSeparator, tbsDivider);
  1577.  
  1578.   TToolButtonState = (tbsChecked, tbsPressed, tbsEnabled, tbsHidden,
  1579.     tbsIndeterminate, tbsWrap, tbsEllipses, tbsMarked);
  1580.  
  1581.   TToolBar = class;
  1582.   TToolButton = class;
  1583.  
  1584. { TToolButtonActionLink }
  1585.  
  1586.   TToolButtonActionLink = class(TControlActionLink)
  1587.   protected
  1588.     FClient: TToolButton;
  1589.     procedure AssignClient(AClient: TObject); override;
  1590.     function IsCheckedLinked: Boolean; override;
  1591.     function IsImageIndexLinked: Boolean; override;
  1592.     procedure SetChecked(Value: Boolean); override;
  1593.     procedure SetImageIndex(Value: Integer); override;
  1594.   end;
  1595.  
  1596.   TToolButtonActionLinkClass = class of TToolButtonActionLink;
  1597.  
  1598.   TToolButton = class(TGraphicControl)
  1599.   protected
  1600.     FToolBar: TToolBar;
  1601.     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  1602.     procedure AssignTo(Dest: TPersistent); override;
  1603.     procedure BeginUpdate; virtual;
  1604.     procedure EndUpdate; virtual;
  1605.     function GetActionLinkClass: TControlActionLinkClass; override;
  1606.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  1607.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  1608.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  1609.       X, Y: Integer); override;
  1610.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1611.     procedure Paint; override;
  1612.     procedure RefreshControl; virtual;
  1613.     procedure SetToolBar(AToolBar: TToolBar);
  1614.     procedure UpdateControl; virtual;
  1615.     procedure ValidateContainer(AComponent: TComponent); override;
  1616.   public
  1617.     constructor Create(AOwner: TComponent); override;
  1618.     function CheckMenuDropdown: Boolean; dynamic;
  1619.     procedure Click; override;
  1620.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  1621.     property Index: Integer;
  1622.   published
  1623.     property Action;
  1624.     property AllowAllUp: Boolean default False;
  1625.     property AutoSize: Boolean default False;
  1626.     property Caption;
  1627.     property Down: Boolean default False;
  1628.     property DragCursor;
  1629.     property DragKind;
  1630.     property DragMode;
  1631.     property DropdownMenu: TPopupMenu;
  1632.     property Enabled;
  1633.     property Grouped: Boolean default False;
  1634.     property Height stored False;
  1635.     property ImageIndex: Integer default -1;
  1636.     property Indeterminate: Boolean default False;
  1637.     property Marked: Boolean default False;
  1638.     property MenuItem: TMenuItem;
  1639.     property ParentShowHint;
  1640.     property PopupMenu;
  1641.     property Wrap: Boolean default False;
  1642.     property ShowHint;
  1643.     property Style: TToolButtonStyle default tbsButton;
  1644.     property Visible;
  1645.     property Width stored IsWidthStored;
  1646.     property OnClick;
  1647.     property OnDragDrop;
  1648.     property OnDragOver;
  1649.     property OnEndDock;
  1650.     property OnEndDrag;
  1651.     property OnMouseDown;
  1652.     property OnMouseMove;
  1653.     property OnMouseUp;
  1654.     property OnStartDock;
  1655.     property OnStartDrag;
  1656.   end;
  1657.  
  1658.   TToolBar = class(TToolWindow)
  1659.   protected
  1660.     procedure AlignControls(AControl: TControl; var Rect: TRect); override;
  1661.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  1662.     procedure CancelMenu; dynamic;
  1663.     procedure ChangeScale(M, D: Integer); override;
  1664.     function CheckMenuDropdown(Button: TToolButton): Boolean; dynamic;
  1665.     procedure ClickButton(Button: TToolButton); dynamic;
  1666.     procedure CreateParams(var Params: TCreateParams); override;
  1667.     procedure CreateWnd; override;
  1668.     function FindButtonFromAccel(Accel: Word): TToolButton;
  1669.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  1670.     procedure InitMenu(Button: TToolButton); dynamic;
  1671.     procedure Loaded; override;
  1672.     procedure Notification(AComponent: TComponent;
  1673.       Operation: TOperation); override;
  1674.     procedure RepositionButton(Index: Integer);
  1675.     procedure RepositionButtons(Index: Integer);
  1676.     procedure WndProc(var Message: TMessage); override;
  1677.     function WrapButtons(var NewWidth, NewHeight: Integer): Boolean;
  1678.   public
  1679.     constructor Create(AOwner: TComponent); override;
  1680.     destructor Destroy; override;
  1681.     procedure FlipChildren(AllLevels: Boolean); override;
  1682.     function TrackMenu(Button: TToolButton): Boolean; dynamic;
  1683.     property ButtonCount: Integer;
  1684.     property Buttons[Index: Integer]: TToolButton;
  1685.     property RowCount: Integer;
  1686.   published
  1687.     property Align default alTop;
  1688.     property Anchors;
  1689.     property AutoSize;
  1690.     property BorderWidth;
  1691.     property ButtonHeight: Integer default 22;
  1692.     property ButtonWidth: Integer default 23;
  1693.     property Caption;
  1694.     property Color;
  1695.     property Constraints;
  1696.     property Ctl3D;
  1697.     property DisabledImages: TCustomImageList;
  1698.     property DockSite;
  1699.     property DragCursor;
  1700.     property DragKind;
  1701.     property DragMode;
  1702.     property EdgeBorders default [ebTop];
  1703.     property EdgeInner;
  1704.     property EdgeOuter;
  1705.     property Enabled;
  1706.     property Flat: Boolean default False;
  1707.     property Font;
  1708.     property Height default 32;
  1709.     property HotImages: TCustomImageList;
  1710.     property Images: TCustomImageList;
  1711.     property Indent: Integer default 0;
  1712.     property List: Boolean default False;
  1713.     property ParentColor;
  1714.     property ParentFont;
  1715.     property ParentShowHint;
  1716.     property PopupMenu;
  1717.     property ShowCaptions: Boolean default False;
  1718.     property ShowHint;
  1719.     property TabOrder;
  1720.     property TabStop;
  1721.     property Transparent: Boolean default False;
  1722.     property Visible;
  1723.     property Wrapable: Boolean default True;
  1724.     property OnClick;
  1725.     property OnDblClick;
  1726.     property OnDockDrop;
  1727.     property OnDockOver;
  1728.     property OnDragDrop;
  1729.     property OnDragOver;
  1730.     property OnEndDock;
  1731.     property OnEndDrag;
  1732.     property OnEnter;
  1733.     property OnExit;
  1734.     property OnGetSiteInfo;
  1735.     property OnMouseDown;
  1736.     property OnMouseMove;
  1737.     property OnMouseUp;
  1738.     property OnResize;
  1739.     property OnStartDock;
  1740.     property OnStartDrag;
  1741.     property OnUnDock;
  1742.   end;
  1743.  
  1744.   TToolBarDockObject = class(TDragDockObject)
  1745.   protected
  1746.     procedure AdjustDockRect(ARect: TRect); override;
  1747.     procedure DrawDragDockImage; override;
  1748.     procedure EraseDragDockImage; override;
  1749.     function GetDragCursor(Accepted: Boolean; X, Y: Integer): TCursor; override;
  1750.     function ToolDockImage(Erase: Boolean): Boolean; virtual;
  1751.   end;
  1752.  
  1753. { TCoolBar }
  1754.  
  1755. const
  1756.   CN_BANDCHANGE = WM_USER + $1000;
  1757.  
  1758. type
  1759.   TCoolBar = class;
  1760.  
  1761.   TCoolBand = class(TCollectionItem)
  1762.   protected
  1763.     function GetDisplayName: string; override;
  1764.     procedure ParentColorChanged; dynamic;
  1765.     procedure ParentBitmapChanged; dynamic;
  1766.   public
  1767.     constructor Create(Collection: TCollection); override;
  1768.     destructor Destroy; override;
  1769.     procedure Assign(Source: TPersistent); override;
  1770.     property Height: Integer;
  1771.   published
  1772.     property Bitmap: TBitmap;
  1773.     property BorderStyle: TBorderStyle default bsNone;
  1774.     property Break: Boolean default True;
  1775.     property Color: TColor default clBtnFace;
  1776.     property Control: TWinControl;
  1777.     property FixedBackground: Boolean default True;
  1778.     property FixedSize: Boolean default False;
  1779.     property HorizontalOnly: Boolean default False;
  1780.     property ImageIndex: Integer;
  1781.     property MinHeight: Integer default 25;
  1782.     property MinWidth: Integer default 0;
  1783.     property ParentColor: Boolean default True;
  1784.     property ParentBitmap: Boolean default True;
  1785.     property Text: string;
  1786.     property Visible: Boolean default True;
  1787.     property Width: Integer;
  1788.   end;
  1789.  
  1790.   TCoolBands = class(TCollection)
  1791.   protected
  1792.     function GetOwner: TPersistent; override;
  1793.     procedure Update(Item: TCollectionItem); override;
  1794.     function HaveGraphic: Boolean;
  1795.   public
  1796.     constructor Create(CoolBar: TCoolBar);
  1797.     function Add: TCoolBand;
  1798.     function FindBand(AControl: TControl): TCoolBand;
  1799.     property CoolBar: TCoolBar;
  1800.     property Items[Index: Integer]: TCoolBand; default;
  1801.   end;
  1802.  
  1803.   TCoolBandMaximize = (bmNone, bmClick, bmDblClick);
  1804.  
  1805.   TCoolBar = class(TToolWindow)
  1806.   protected
  1807.     procedure AlignControls(AControl: TControl; var Rect: TRect); override;
  1808.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  1809.     procedure Change; dynamic;
  1810.     procedure CreateParams(var Params: TCreateParams); override;
  1811.     procedure CreateWnd; override;
  1812.     function GetPalette: HPALETTE; override;
  1813.     function HitTest(const Pos: TPoint): TCoolBand;
  1814.     procedure Loaded; override;
  1815.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  1816.     procedure WndProc(var Message: TMessage); override;
  1817.   public
  1818.     constructor Create(AOwner: TComponent); override;
  1819.     destructor Destroy; override;
  1820.     procedure FlipChildren(AllLevels: Boolean); override;
  1821.   published
  1822.     property Align read GetAlign write SetAlign default alTop;
  1823.     property Anchors;
  1824.     property AutoSize;
  1825.     property BandBorderStyle: TBorderStyle default bsSingle;
  1826.     property BandMaximize: TCoolBandMaximize default bmClick;
  1827.     property Bands: TCoolBands;
  1828.     property BorderWidth;
  1829.     property Color;
  1830.     property Constraints;
  1831.     property Ctl3D;
  1832.     property DockSite;
  1833.     property DragCursor;
  1834.     property DragKind;
  1835.     property DragMode;
  1836.     property EdgeBorders;
  1837.     property EdgeInner;
  1838.     property EdgeOuter;
  1839.     property Enabled;
  1840.     property FixedSize: Boolean default False;
  1841.     property FixedOrder: Boolean default False;
  1842.     property Font;
  1843.     property Images: TCustomImageList;
  1844.     property ParentColor;
  1845.     property ParentFont;
  1846.     property ParentShowHint;
  1847.     property Bitmap: TBitmap;
  1848.     property PopupMenu;
  1849.     property ShowHint;
  1850.     property ShowText: Boolean default True;
  1851.     property Vertical: Boolean default False;
  1852.     property Visible;
  1853.     property OnChange: TNotifyEvent;
  1854.     property OnClick;
  1855.     property OnDblClick;
  1856.     property OnDockDrop;
  1857.     property OnDockOver;
  1858.     property OnDragDrop;
  1859.     property OnDragOver;
  1860.     property OnEndDock;
  1861.     property OnEndDrag;
  1862.     property OnGetSiteInfo;
  1863.     property OnMouseDown;
  1864.     property OnMouseMove;
  1865.     property OnMouseUp;
  1866.     property OnResize;
  1867.     property OnStartDock;
  1868.     property OnStartDrag;
  1869.     property OnUnDock;
  1870.   end;
  1871.  
  1872. { Calendar common control support }
  1873.  
  1874.   TCommonCalendar = class;
  1875.  
  1876.   ECommonCalendarError = class(Exception);
  1877.  
  1878.   TMonthCalColors = class(TPersistent)
  1879.   public
  1880.     constructor Create(AOwner: TCommonCalendar);
  1881.     procedure Assign(Source: TPersistent); override;
  1882.   published
  1883.     property BackColor: TColor index 0 default clWindow;
  1884.     property TextColor: TColor index 1 default clWindowText;
  1885.     property TitleBackColor: TColor index 2 default clActiveCaption;
  1886.     property TitleTextColor: TColor index 3 default clWhite;
  1887.     property MonthBackColor: TColor index 4 default clWhite;
  1888.     property TrailingTextColor: TColor index 5 default clInactiveCaptionText;
  1889.   end;
  1890.  
  1891.   TCalDayOfWeek = (dowMonday, dowTuesday, dowWednesday, dowThursday,
  1892.     dowFriday, dowSaturday, dowSunday, dowLocaleDefault);
  1893.  
  1894.   TOnGetMonthInfoEvent = procedure(Sender: TObject; Month: LongWord;
  1895.     var MonthBoldInfo: LongWord) of object;
  1896.  
  1897.   TCommonCalendar = class(TWinControl)
  1898.   protected
  1899.     procedure CheckEmptyDate; virtual;
  1900.     procedure CheckValidDate(Value: TDate); virtual;
  1901.     procedure CreateWnd; override;
  1902.     function GetCalendarHandle: HWND; virtual; abstract;
  1903.     function GetCalStyles: DWORD; virtual;
  1904.     function MsgSetCalColors(ColorIndex: Integer; ColorValue: TColor): Boolean; virtual; abstract;
  1905.     function MsgSetDateTime(Value: TSystemTime): Boolean; virtual; abstract;
  1906.     function MsgSetRange(Flags: Integer; SysTime: PSystemTime): Boolean; virtual; abstract;
  1907.     property CalColors: TMonthCalColors;
  1908.     property CalendarHandle: HWND;
  1909.     property CalExceptionClass: ExceptClass;
  1910.     property Date: TDate;
  1911.     property DateTime: TDateTime;
  1912.     property EndDate: TDate;
  1913.     property FirstDayOfWeek: TCalDayOfWeek default dowLocaleDefault;
  1914.     property MaxDate: TDate;
  1915.     property MaxSelectRange: Integer default 31;
  1916.     property MinDate: TDate;
  1917.     property MonthDelta: Integer default 1;
  1918.     property MultiSelect: Boolean default False;
  1919.     property ShowToday: Boolean default True;
  1920.     property ShowTodayCircle: Boolean default True;
  1921.     property WeekNumbers: Boolean default False;
  1922.     property OnGetMonthInfo: TOnGetMonthInfoEvent;
  1923.   public
  1924.     constructor Create(AOwner: TComponent); override;
  1925.     destructor Destroy; override;
  1926.     procedure BoldDays(Days: array of LongWord; var MonthBoldInfo: LongWord);
  1927.   end;
  1928.  
  1929. { TMonthCalendar }
  1930.  
  1931.   EMonthCalError = class(ECommonCalendarError);
  1932.  
  1933.   TMonthCalendar = class(TCommonCalendar)
  1934.   protected
  1935.     function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
  1936.     procedure ConstrainedResize(var MinWidth, MinHeight, MaxWidth,
  1937.       MaxHeight: Integer); override;
  1938.     procedure CreateParams(var Params: TCreateParams); override;
  1939.     function GetCalendarHandle: HWND; override;
  1940.     function MsgSetCalColors(ColorIndex: Integer; ColorValue: TColor): Boolean; override;
  1941.     function MsgSetDateTime(Value: TSystemTime): Boolean; override;
  1942.     function MsgSetRange(Flags: Integer; SysTime: PSystemTime): Boolean; override;
  1943.   public
  1944.     constructor Create(AOwner: TComponent); override;
  1945.   published
  1946.     property Align;
  1947.     property Anchors;
  1948.     property AutoSize;
  1949.     property BorderWidth;
  1950.     property BiDiMode;
  1951.     property CalColors;
  1952.     property Constraints;
  1953.     property MultiSelect;  // must be before date stuff
  1954.     property Date;
  1955.     property DragCursor;
  1956.     property DragKind;
  1957.     property DragMode;
  1958.     property Enabled;
  1959.     property EndDate;
  1960.     property FirstDayOfWeek;
  1961.     property Font;
  1962.     property ImeMode;
  1963.     property ImeName;
  1964.     property MaxDate;
  1965.     property MaxSelectRange;
  1966.     property MinDate;
  1967.     property ParentBiDiMode;
  1968.     property ParentFont;
  1969.     property ParentShowHint;
  1970.     property PopupMenu;
  1971.     property ShowHint;
  1972.     property ShowToday;
  1973.     property ShowTodayCircle;
  1974.     property TabOrder;
  1975.     property TabStop;
  1976.     property Visible;
  1977.     property WeekNumbers;
  1978.     property OnClick;
  1979.     property OnDblClick;
  1980.     property OnDragDrop;
  1981.     property OnDragOver;
  1982.     property OnEndDock;
  1983.     property OnEndDrag;
  1984.     property OnEnter;
  1985.     property OnExit;
  1986.     property OnGetMonthInfo;
  1987.     property OnKeyDown;
  1988.     property OnKeyPress;
  1989.     property OnKeyUp;
  1990.     property OnStartDock;
  1991.     property OnStartDrag;
  1992.   end;
  1993.  
  1994. { TDateTimePicker }
  1995.  
  1996.   EDateTimeError = class(ECommonCalendarError);
  1997.  
  1998.   TDateTimeKind = (dtkDate, dtkTime);
  1999.   TDTDateMode = (dmComboBox, dmUpDown);
  2000.   TDTDateFormat = (dfShort, dfLong);
  2001.   TDTCalAlignment = (dtaLeft, dtaRight);
  2002.  
  2003.   TDTParseInputEvent = procedure(Sender: TObject; const UserString: string;
  2004.     var DateAndTime: TDateTime; var AllowChange: Boolean) of object;
  2005.  
  2006.   TDateTimeColors = TMonthCalColors;  // for backward compatibility
  2007.  
  2008.   TDateTimePicker = class(TCommonCalendar)
  2009.   protected
  2010.     procedure CheckEmptyDate; override;
  2011.     procedure CreateParams(var Params: TCreateParams); override;
  2012.     procedure CreateWnd; override;
  2013.     procedure Change; dynamic;
  2014.     function GetCalendarHandle: HWND; override;
  2015.     function MsgSetCalColors(ColorIndex: Integer; ColorValue: TColor): Boolean; override;
  2016.     function MsgSetDateTime(Value: TSystemTime): Boolean; override;
  2017.     function MsgSetRange(Flags: Integer; SysTime: PSystemTime): Boolean; override;
  2018.   public
  2019.     constructor Create(AOwner: TComponent); override;
  2020.     property DateTime;
  2021.     property DroppedDown: Boolean;
  2022.   published
  2023.     property Anchors;
  2024.     property BiDiMode;
  2025.     property CalAlignment: TDTCalAlignment;
  2026.     property CalColors;
  2027.     property Constraints;
  2028.     // The Date, Time, ShowCheckbox, and Checked properties must be in this order:
  2029.     property Date;
  2030.     property Time: TTime;
  2031.     property ShowCheckbox: Boolean default False;
  2032.     property Checked: Boolean default True;
  2033.     property Color stored True default clWindow;
  2034.     property DateFormat: TDTDateFormat;
  2035.     property DateMode: TDTDateMode;
  2036.     property DragCursor;
  2037.     property DragKind;
  2038.     property DragMode;
  2039.     property Enabled;
  2040.     property Font;
  2041.     property ImeMode;
  2042.     property ImeName;
  2043.     property Kind: TDateTimeKind;
  2044.     property MaxDate;
  2045.     property MinDate;
  2046.     property ParseInput: Boolean;
  2047.     property ParentBiDiMode;
  2048.     property ParentColor default False;
  2049.     property ParentFont;
  2050.     property ParentShowHint;
  2051.     property PopupMenu;
  2052.     property ShowHint;
  2053.     property TabOrder;
  2054.     property TabStop default True;
  2055.     property Visible;
  2056.     property OnClick;
  2057.     property OnCloseUp: TNotifyEvent;
  2058.     property OnChange: TNotifyEvent;
  2059.     property OnDropDown: TNotifyEvent;
  2060.     property OnDblClick;
  2061.     property OnDragDrop;
  2062.     property OnDragOver;
  2063.     property OnEndDock;
  2064.     property OnEndDrag;
  2065.     property OnEnter;
  2066.     property OnExit;
  2067.     property OnKeyDown;
  2068.     property OnKeyPress;
  2069.     property OnKeyUp;
  2070.     property OnStartDock;
  2071.     property OnStartDrag;
  2072.     property OnUserInput: TDTParseInputEvent;
  2073.   end;
  2074.  
  2075. { TPageScroller }
  2076.  
  2077.   TPageScrollerOrientation = (soHorizontal, soVertical);
  2078.   TPageScrollerButton = (sbFirst, sbLast);
  2079.   TPageScrollerButtonState = (bsNormal, bsInvisible, bsGrayed, bsDepressed, bsHot);
  2080.  
  2081.   TPageScrollEvent = procedure (Sender: TObject; Shift: TShiftState; X, Y: Integer;
  2082.     Orientation: TPageScrollerOrientation; var Delta: Integer) of object;
  2083.  
  2084.   TPageScroller = class(TWinControl)
  2085.   protected
  2086.     procedure AlignControls(AControl: TControl; var Rect: TRect); override;
  2087.     procedure CreateParams(var Params: TCreateParams); override;
  2088.     procedure CreateWnd; override;
  2089.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  2090.     procedure Scroll(Shift: TShiftState; X, Y: Integer;
  2091.       Orientation: TPageScrollerOrientation; var Delta: Integer); dynamic;
  2092.   public
  2093.     constructor Create(AOwner: TComponent); override;
  2094.     function GetButtonState(Button: TPageScrollerButton): TPageScrollerButtonState;
  2095.   published
  2096.     property Align;
  2097.     property Anchors;
  2098.     property AutoScroll: Boolean;
  2099.     property BorderWidth;
  2100.     property ButtonSize: Integer default 12;
  2101.     property Color;
  2102.     property Constraints;
  2103.     property Control: TWinControl;
  2104.     property DockSite;
  2105.     property DragCursor;
  2106.     property DragKind;
  2107.     property DragMode;
  2108.     property DragScroll: Boolean default True;
  2109.     property Enabled;
  2110.     property Font;
  2111.     property Margin: Integer default 0;
  2112.     property Orientation: TPageScrollerOrientation default soHorizontal;
  2113.     property ParentColor;
  2114.     property ParentFont;
  2115.     property ParentShowHint;
  2116.     property PopupMenu;
  2117.     property Position: Integer default 0;
  2118.     property ShowHint;
  2119.     property TabOrder;
  2120.     property TabStop default True;
  2121.     property Visible;
  2122.     property OnClick;
  2123.     property OnDblClick;
  2124.     property OnDragDrop;
  2125.     property OnDragOver;
  2126.     property OnEndDock;
  2127.     property OnEndDrag;
  2128.     property OnEnter;
  2129.     property OnExit;
  2130.     property OnKeyDown;
  2131.     property OnKeyPress;
  2132.     property OnKeyUp;
  2133.     property OnResize;
  2134.     property OnScroll: TPageScrollEvent;
  2135.     property OnStartDock;
  2136.     property OnStartDrag;
  2137.   end;
  2138.   
  2139. function InitCommonControl(CC: Integer): Boolean;
  2140. procedure CheckCommonControl(CC: Integer);
  2141.  
  2142. const
  2143.   ComCtlVersionIE3 = $00040046;
  2144.   ComCtlVersionIE4 = $00040047;
  2145.   ComCtlVersionIE401 = $00040048;
  2146.  
  2147. function GetComCtlVersion: Integer;
  2148. procedure CheckToolMenuDropdown(ToolButton: TToolButton);
  2149.  
  2150. implementation
  2151.