home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Doc / COMCTRLS.INT < prev    next >
Encoding:
Text File  |  1999-08-11  |  79.9 KB  |  2,298 lines

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