mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-06 00:18:08 +02:00
2853 lines
109 KiB
ObjectPascal
2853 lines
109 KiB
ObjectPascal
{ $Id$}
|
|
{
|
|
/***************************************************************************
|
|
ComCtrls.pp
|
|
-----------
|
|
Component Library Common Controls
|
|
Initial Revision : Sat Apr 10 22:49:32 CST 1999
|
|
|
|
|
|
***************************************************************************/
|
|
|
|
*****************************************************************************
|
|
* *
|
|
* This file is part of the Lazarus Component Library (LCL) *
|
|
* *
|
|
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
|
|
* for details about the copyright. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
* *
|
|
*****************************************************************************
|
|
}
|
|
{
|
|
@abstract(Just a try to provide the same objects as the Delphi comctrls unit)
|
|
@author(TCustomProgressBar - Stefan Hille <stoppok@osibisa.ms.sub.org>)
|
|
@author(TTrackBar - Stefan Hille <stoppok@osibisa.ms.sub.org>)
|
|
@created(1999)
|
|
@lastmod(1999)
|
|
}
|
|
unit ComCtrls;
|
|
|
|
{$mode objfpc}
|
|
{$H+}
|
|
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Types, Classes, Math, LCLStrConsts, LResources, LCLIntf, LCLType,
|
|
FileUtil, LCLProc, AvgLvlTree, LMessages, ImgList, ActnList, GraphType,
|
|
Graphics, Menus, Controls, Forms, StdCtrls, ExtCtrls, ToolWin, Buttons,
|
|
Themes;
|
|
|
|
type
|
|
THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon,
|
|
htOnIndent, htOnLabel, htOnRight, htOnStateIcon, htToLeft, htToRight);
|
|
THitTests = set of THitTest;
|
|
|
|
TStatusPanelStyle = (psText, psOwnerDraw);
|
|
TStatusPanelBevel = (pbNone, pbLowered, pbRaised);
|
|
|
|
TStatusBar = class; //forward declaration
|
|
|
|
TPanelPart = (
|
|
ppText, // for text and text alignment
|
|
ppBorder, // for bevel and style
|
|
ppWidth // for width
|
|
);
|
|
TPanelParts = set of TPanelPart;
|
|
|
|
{ TStatusPanel }
|
|
|
|
//added.
|
|
TStatusPanelClass = class of TStatusPanel;
|
|
|
|
TStatusPanel = class(TCollectionItem)
|
|
private
|
|
FText: string;
|
|
FWidth: Integer;
|
|
FAlignment: TAlignment;
|
|
FBevel: TStatusPanelBevel;
|
|
FParentBiDiMode: Boolean;
|
|
FStyle: TStatusPanelStyle;
|
|
procedure SetAlignment(Value: TAlignment);
|
|
procedure SetBevel(Value: TStatusPanelBevel);
|
|
procedure SetStyle(Value: TStatusPanelStyle);
|
|
procedure SetText(const Value: string);
|
|
procedure SetWidth(Value: Integer);
|
|
protected
|
|
// field to use by interface. dont use it in the LCL
|
|
FIntfFlag: Integer;
|
|
function GetDisplayName: string; override;
|
|
procedure PanelChanged(const Parts: TPanelParts);
|
|
procedure SetIndex(Value: Integer); override;
|
|
public
|
|
constructor Create(aCollection: TCollection); override;
|
|
destructor Destroy; override;
|
|
procedure Assign(Source: TPersistent); override;
|
|
function StatusBar: TStatusBar;
|
|
published
|
|
property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
|
|
property Bevel: TStatusPanelBevel read FBevel write SetBevel default pbLowered;
|
|
property Style: TStatusPanelStyle read FStyle write SetStyle default psText;
|
|
property Text: string read FText write SetText;
|
|
property Width: Integer read FWidth write SetWidth;
|
|
end;
|
|
|
|
TStatusPanels = class(TCollection)
|
|
private
|
|
FStatusBar: TStatusBar;
|
|
function GetItem(Index: Integer): TStatusPanel;
|
|
procedure SetItem(Index: Integer; Value: TStatusPanel);
|
|
protected
|
|
function GetOwner: TPersistent; override;
|
|
procedure Update(Item: TCollectionItem); override;
|
|
public
|
|
constructor Create(TheStatusBar: TStatusBar);
|
|
function Add: TStatusPanel;
|
|
property Items[Index: Integer]: TStatusPanel read GetItem write SetItem; default;
|
|
property StatusBar: TStatusBar read FStatusBar;
|
|
end;
|
|
|
|
TSBCreatePanelClassEvent = procedure(Sender: TStatusBar;
|
|
var PanelClass: TStatusPanelClass) of object;
|
|
|
|
TDrawPanelEvent = procedure(StatusBar: TStatusBar; Panel: TStatusPanel;
|
|
const Rect: TRect) of object;
|
|
|
|
{ TStatusBar }
|
|
|
|
TStatusBar = class(TWinControl)
|
|
private
|
|
FAutoHint: Boolean;
|
|
FCanvas: TCanvas;
|
|
FHandlePanelCount: integer; // realized panels in the Handle object
|
|
FHandleObjectNeedsUpdate: boolean;
|
|
FHandleUpdatePanelIndex: integer; // which panel in the handle object needs update
|
|
FOnCreatePanelClass: TSBCreatePanelClassEvent;
|
|
FSizeGrip: Boolean;
|
|
FUpdateLock: integer; // set by BeginUpdate/EndUpdate
|
|
FPanels: TStatusPanels;
|
|
FSimpleText: String;
|
|
FSimplePanel: Boolean;
|
|
FOnDrawPanel: TDrawPanelEvent;
|
|
FOnHint: TNotifyEvent;
|
|
procedure SetPanels(Value: TStatusPanels);
|
|
procedure SetSimpleText(const Value : String);
|
|
procedure SetSimplePanel(Value : Boolean);
|
|
procedure SetSizeGrip(const AValue: Boolean);
|
|
protected
|
|
class procedure WSRegisterClass; override;
|
|
procedure BoundsChanged; override;
|
|
procedure CreateWnd; override;
|
|
procedure DestroyWnd; override;
|
|
procedure Loaded; override;
|
|
procedure UpdateHandleObject(PanelIndex: integer; PanelParts: TPanelParts); virtual;
|
|
procedure CalculatePreferredSize(
|
|
var PreferredWidth, PreferredHeight: integer;
|
|
WithThemeSpace: Boolean); override;
|
|
|
|
//added.
|
|
function CreatePanel: TStatusPanel; virtual;
|
|
function CreatePanels: TStatusPanels; virtual;
|
|
function GetPanelClass: TStatusPanelClass; virtual;
|
|
|
|
function DoSetApplicationHint(AHintStr: String): Boolean; virtual;
|
|
function DoHint: Boolean; virtual;
|
|
procedure DrawPanel(Panel: TStatusPanel; const Rect: TRect); virtual;
|
|
procedure LMDrawItem(var Message: TLMDrawItems); message LM_DRAWITEM;
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure InvalidatePanel(PanelIndex: integer; PanelParts: TPanelParts); virtual;
|
|
procedure BeginUpdate;
|
|
procedure EndUpdate;
|
|
function ExecuteAction(ExeAction: TBasicAction): Boolean; override;
|
|
function GetPanelIndexAt(X, Y: Integer): Integer;
|
|
function SizeGripEnabled: Boolean;
|
|
function UpdatingStatusBar: boolean;
|
|
property Canvas: TCanvas read FCanvas;
|
|
published
|
|
property Action;
|
|
property Align default alBottom;
|
|
property Anchors;
|
|
property AutoHint: Boolean read FAutoHint write FAutoHint default false;
|
|
property AutoSize default true;
|
|
property Color default clBtnFace;
|
|
property Constraints;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property Enabled;
|
|
property Panels: TStatusPanels read FPanels write SetPanels;
|
|
property ParentShowHint;
|
|
property SimpleText: String read FSimpleText write SetSimpleText;
|
|
property SimplePanel: Boolean read FSimplePanel write SetSimplePanel default True;
|
|
property SizeGrip: Boolean read FSizeGrip write SetSizeGrip default True;
|
|
property ShowHint;
|
|
property Visible default true;
|
|
property OnClick;
|
|
property OnContextPopup;
|
|
property OnCreatePanelClass: TSBCreatePanelClassEvent read FOnCreatePanelClass write FOnCreatePanelClass;
|
|
property OnDblClick;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnDrawPanel: TDrawPanelEvent read FOnDrawPanel write FOnDrawPanel;
|
|
property OnEndDock;
|
|
property OnEndDrag;
|
|
property OnHint: TNotifyEvent read FOnHint write FOnHint;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnResize;
|
|
property OnStartDock;
|
|
property OnStartDrag;
|
|
end;
|
|
|
|
{ TTabSheet }
|
|
|
|
TPageControl = class;
|
|
|
|
// TTabPosition is in extctrls.pas
|
|
TTabStyle = (tsTabs, tsButtons, tsFlatButtons);
|
|
|
|
{ TTabSheet }
|
|
|
|
TTabSheet = class(TCustomPage)
|
|
private
|
|
function GetPageControl: TPageControl;
|
|
function GetTabIndex: Integer;
|
|
procedure SetPageControl(APageControl: TPageControl);
|
|
procedure SetTabIndex(const AValue: Integer);
|
|
protected
|
|
class procedure WSRegisterClass; override;
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
property PageControl: TPageControl read GetPageControl write SetPageControl;
|
|
property TabIndex: Integer read GetTabIndex write SetTabIndex;
|
|
published
|
|
property Caption;
|
|
property ChildSizing;
|
|
property ClientHeight;
|
|
property ClientWidth;
|
|
property Enabled;
|
|
property Height stored False;
|
|
property ImageIndex default 0;
|
|
property Left stored False;
|
|
property OnContextPopup;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnHide;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnResize;
|
|
property OnShow;
|
|
property OnStartDrag;
|
|
property PageIndex stored False;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property ShowHint;
|
|
property TabVisible default True;
|
|
property Top stored False;
|
|
property Visible stored False;
|
|
property Width stored False;
|
|
end;
|
|
|
|
{ TPageControl }
|
|
|
|
TPageControl = class(TCustomNotebook)
|
|
private
|
|
fOnPageChanged: TNotifyEvent;
|
|
FPageToUndock: TTabSheet;
|
|
function GetActivePageIndex: Integer;
|
|
function GetActiveTabSheet: TTabSheet;
|
|
function GetTabIndex: Integer;
|
|
function GetTabSheet(Index: Integer): TTabSheet;
|
|
procedure SetActivePageIndex(const AValue: Integer);
|
|
procedure SetActiveTabSheet(const AValue: TTabSheet);
|
|
procedure SetTabIndex(const AValue: Integer);
|
|
function FindPageWithDockClient(Client: TControl): TTabSheet;
|
|
protected
|
|
class procedure WSRegisterClass; override;
|
|
procedure DoAddDockClient(Client: TControl; const ARect: TRect); override;
|
|
procedure DockOver(Source: TDragDockObject; X, Y: Integer;
|
|
State: TDragState; var Accept: Boolean); override;
|
|
procedure DoRemoveDockClient(Client: TControl); override;
|
|
function DoUndockClientMsg(NewTarget, Client: TControl):boolean; override;
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
function FindNextPage(CurPage: TTabSheet;
|
|
GoForward, CheckTabVisible: Boolean): TTabSheet;
|
|
procedure SelectNextPage(GoForward: Boolean);
|
|
procedure SelectNextPage(GoForward: Boolean; CheckTabVisible: Boolean);
|
|
property ActivePageIndex: Integer read GetActivePageIndex
|
|
write SetActivePageIndex;
|
|
property Pages[Index: Integer]: TTabSheet read GetTabSheet;
|
|
published
|
|
property ActivePage: TTabSheet read GetActiveTabSheet write SetActiveTabSheet;
|
|
property OnGetDockCaption;
|
|
|
|
property Align;
|
|
property Anchors;
|
|
property BorderSpacing;
|
|
//property BiDiMode;
|
|
property Constraints;
|
|
property DockSite;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property Enabled;
|
|
property Font;
|
|
//property HotTrack;
|
|
property Images;
|
|
//property MultiLine;
|
|
//property OwnerDraw;
|
|
//property ParentBiDiMode;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
//property RaggedRight;
|
|
//property ScrollOpposite;
|
|
property ShowHint;
|
|
//property Style;
|
|
//property TabHeight;
|
|
property TabIndex: Integer read GetTabIndex write SetTabIndex default -1;
|
|
property TabOrder;
|
|
property TabPosition;
|
|
property TabStop;
|
|
//property TabWidth;
|
|
property Visible;
|
|
property OnChange: TNotifyEvent read fOnPageChanged write fOnPageChanged;
|
|
property OnChanging;
|
|
property OnContextPopup;
|
|
property OnDockDrop;
|
|
property OnDockOver;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
//property OnDrawTab;
|
|
property OnEndDock;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnGetImageIndex;
|
|
property OnGetSiteInfo;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnPageChanged;
|
|
property OnResize;
|
|
property OnStartDock;
|
|
property OnStartDrag;
|
|
property OnUnDock;
|
|
end;
|
|
|
|
|
|
TCustomTabControl = class;
|
|
|
|
{ TTabControlStrings }
|
|
|
|
TTabControlStrings = class(TStrings)
|
|
private
|
|
FHotTrack: Boolean;
|
|
FImages: TCustomImageList;
|
|
FMultiLine: Boolean;
|
|
FMultiSelect: Boolean;
|
|
FOwnerDraw: Boolean;
|
|
FRaggedRight: Boolean;
|
|
FScrollOpposite: Boolean;
|
|
FTabControl: TCustomTabControl;
|
|
FTabHeight: Smallint;
|
|
FTabWidth: Smallint;
|
|
FUpdateCount: integer;
|
|
protected
|
|
function GetTabIndex: integer; virtual; abstract;
|
|
procedure SetHotTrack(const AValue: Boolean); virtual;
|
|
procedure SetImages(const AValue: TCustomImageList); virtual;
|
|
procedure SetMultiLine(const AValue: Boolean); virtual;
|
|
procedure SetMultiSelect(const AValue: Boolean); virtual;
|
|
procedure SetOwnerDraw(const AValue: Boolean); virtual;
|
|
procedure SetRaggedRight(const AValue: Boolean); virtual;
|
|
procedure SetScrollOpposite(const AValue: Boolean); virtual;
|
|
procedure SetTabHeight(const AValue: Smallint); virtual;
|
|
procedure SetTabIndex(const AValue: integer); virtual; abstract;
|
|
procedure SetTabWidth(const AValue: Smallint); virtual;
|
|
public
|
|
constructor Create(TheTabControl: TCustomTabControl); virtual;
|
|
function GetHitTestInfoAt(X, Y: Integer): THitTests; virtual;
|
|
function GetSize: integer; virtual; abstract;
|
|
function IndexOfTabAt(X, Y: Integer): Integer; virtual;
|
|
function RowCount: Integer; virtual;
|
|
function TabRect(Index: Integer): TRect; virtual;
|
|
procedure ImageListChange(Sender: TObject); virtual;
|
|
procedure ScrollTabs(Delta: Integer); virtual;
|
|
procedure TabControlBoundsChange; virtual;
|
|
procedure UpdateTabImages; virtual;
|
|
procedure BeginUpdate; virtual;
|
|
procedure EndUpdate; virtual;
|
|
function IsUpdating: boolean; virtual;
|
|
public
|
|
property TabControl: TCustomTabControl read FTabControl;
|
|
property TabIndex: integer read GetTabIndex write SetTabIndex;
|
|
property HotTrack: Boolean read FHotTrack write SetHotTrack;
|
|
property Images: TCustomImageList read FImages write SetImages;
|
|
property MultiLine: Boolean read FMultiLine write SetMultiLine;
|
|
property MultiSelect: Boolean read FMultiSelect write SetMultiSelect;
|
|
property OwnerDraw: Boolean read FOwnerDraw write SetOwnerDraw;
|
|
property RaggedRight: Boolean read FRaggedRight write SetRaggedRight;
|
|
property ScrollOpposite: Boolean read FScrollOpposite
|
|
write SetScrollOpposite;
|
|
property TabHeight: Smallint read FTabHeight write SetTabHeight;
|
|
property TabWidth: Smallint read FTabWidth write SetTabWidth;
|
|
end;
|
|
|
|
|
|
{ TTabControlNoteBookStrings }
|
|
|
|
TTabControlNoteBookStrings = class(TTabControlStrings)
|
|
private
|
|
FNoteBook: TNoteBook;
|
|
protected
|
|
function Get(Index: Integer): string; override;
|
|
function GetCount: Integer; override;
|
|
function GetObject(Index: Integer): TObject; override;
|
|
function GetTabIndex: integer; override;
|
|
procedure NBChanging(Sender: TObject; var AllowChange: Boolean); virtual;
|
|
procedure NBGetImageIndex(Sender: TObject; TheTabIndex: Integer;
|
|
var ImageIndex: Integer); virtual;
|
|
procedure NBPageChanged(Sender: TObject); virtual;
|
|
procedure Put(Index: Integer; const S: string); override;
|
|
procedure PutObject(Index: Integer; AObject: TObject); override;
|
|
procedure SetImages(const AValue: TCustomImageList); override;
|
|
procedure SetTabIndex(const AValue: integer); override;
|
|
procedure SetUpdateState(Updating: Boolean); override;
|
|
procedure SetTabHeight(const AValue: Smallint); override;
|
|
procedure SetTabWidth(const AValue: Smallint); override;
|
|
public
|
|
constructor Create(TheTabControl: TCustomTabControl); override;
|
|
destructor Destroy; override;
|
|
procedure Clear; override;
|
|
procedure Delete(Index: Integer); override;
|
|
procedure Insert(Index: Integer; const S: string); override;
|
|
function GetSize: integer; override;
|
|
procedure TabControlBoundsChange; override;
|
|
function IndexOfTabAt(X, Y: Integer): Integer; override;
|
|
public
|
|
property NoteBook: TNoteBook read FNoteBook;
|
|
end;
|
|
|
|
|
|
{ TCustomTabControl }
|
|
|
|
TDrawTabEvent = procedure(Control: TCustomTabControl; TabIndex: Integer;
|
|
const Rect: TRect; Active: Boolean) of object;
|
|
|
|
TCustomTabControl = class(TCustomControl)
|
|
private
|
|
FImageChangeLink: TChangeLink;
|
|
FImages: TCustomImageList;
|
|
FOnChange: TNotifyEvent;
|
|
FOnChangeNeeded: Boolean;
|
|
FOnChanging: TTabChangingEvent;
|
|
FOnDrawTab: TDrawTabEvent;
|
|
FOnGetImageIndex: TTabGetImageEvent;
|
|
FStyle: TTabStyle;
|
|
FTabControlCreating: Boolean;
|
|
FTabPosition: TTabPosition;
|
|
FTabs: TStrings;// this is a TTabControlNoteBookStrings
|
|
function GetDisplayRect: TRect;
|
|
function GetHotTrack: Boolean;
|
|
function GetMultiLine: Boolean;
|
|
function GetMultiSelect: Boolean;
|
|
function GetOwnerDraw: Boolean;
|
|
function GetRaggedRight: Boolean;
|
|
function GetScrollOpposite: Boolean;
|
|
function GetTabHeight: Smallint;
|
|
function GetTabIndex: Integer;
|
|
function GetTabRectWithBorder: TRect;
|
|
function GetTabWidth: Smallint;
|
|
procedure SetHotTrack(const AValue: Boolean);
|
|
procedure SetImages(const AValue: TCustomImageList);
|
|
procedure SetMultiLine(const AValue: Boolean);
|
|
procedure SetMultiSelect(const AValue: Boolean);
|
|
procedure SetOwnerDraw(const AValue: Boolean);
|
|
procedure SetRaggedRight(const AValue: Boolean);
|
|
procedure SetScrollOpposite(const AValue: Boolean);
|
|
procedure SetStyle(const AValue: TTabStyle);
|
|
procedure SetTabHeight(const AValue: Smallint);
|
|
procedure SetTabPosition(const AValue: TTabPosition);
|
|
procedure SetTabs(const AValue: TStrings);
|
|
procedure SetTabWidth(const AValue: Smallint);
|
|
protected
|
|
function CanChange: Boolean; virtual;
|
|
function CanShowTab(ATabIndex: Integer): Boolean; virtual;
|
|
procedure Change; virtual;
|
|
procedure DrawTab(ATabIndex: Integer; const Rect: TRect; Active: Boolean); virtual;
|
|
function GetImageIndex(ATabIndex: Integer): Integer; virtual;
|
|
procedure Loaded; override;
|
|
procedure CreateWnd; override;
|
|
procedure DestroyHandle; override;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
procedure SetTabIndex(Value: Integer); virtual;
|
|
procedure UpdateTabImages;
|
|
procedure ImageListChange(Sender: TObject);
|
|
procedure DoSetBounds(ALeft, ATop, AWidth, AHeight: integer); override;
|
|
class function GetControlClassDefaultSize: TPoint; override;
|
|
procedure Paint; override;
|
|
function GetDisplayRectWithBorder: TRect; virtual;
|
|
procedure AdjustClientRect(var ARect: TRect); override;
|
|
protected
|
|
property DisplayRect: TRect read GetDisplayRect;
|
|
property HotTrack: Boolean read GetHotTrack write SetHotTrack default False;
|
|
property Images: TCustomImageList read FImages write SetImages;
|
|
property MultiLine: Boolean read GetMultiLine write SetMultiLine default False;
|
|
property MultiSelect: Boolean read GetMultiSelect write SetMultiSelect default False;
|
|
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
|
property OnChanging: TTabChangingEvent read FOnChanging write FOnChanging;
|
|
property OnDrawTab: TDrawTabEvent read FOnDrawTab write FOnDrawTab;
|
|
property OnGetImageIndex: TTabGetImageEvent read FOnGetImageIndex
|
|
write FOnGetImageIndex;
|
|
property OwnerDraw: Boolean read GetOwnerDraw write SetOwnerDraw default False;
|
|
property RaggedRight: Boolean read GetRaggedRight write SetRaggedRight default False;
|
|
property ScrollOpposite: Boolean read GetScrollOpposite
|
|
write SetScrollOpposite default False;
|
|
property Style: TTabStyle read FStyle write SetStyle default tsTabs;
|
|
property TabHeight: Smallint read GetTabHeight write SetTabHeight default 0;
|
|
property TabPosition: TTabPosition read FTabPosition write SetTabPosition
|
|
default tpTop;
|
|
property TabWidth: Smallint read GetTabWidth write SetTabWidth default 0;
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function IndexOfTabAt(X, Y: Integer): Integer;
|
|
function GetHitTestInfoAt(X, Y: Integer): THitTests;
|
|
function IndexOfTabWithCaption(const TabCaption: string): Integer;
|
|
function TabRect(Index: Integer): TRect;
|
|
function RowCount: Integer;
|
|
procedure ScrollTabs(Delta: Integer);
|
|
procedure BeginUpdate;
|
|
procedure EndUpdate;
|
|
function IsUpdating: boolean;
|
|
property TabIndex: Integer read GetTabIndex write SetTabIndex default -1;
|
|
property Tabs: TStrings read FTabs write SetTabs;
|
|
public
|
|
property TabStop default True;
|
|
end;
|
|
|
|
|
|
{ TTabControl }
|
|
|
|
TTabControl = class(TCustomTabControl)
|
|
public
|
|
property DisplayRect;
|
|
published
|
|
property Align;
|
|
property Anchors;
|
|
property BorderSpacing;
|
|
property Constraints;
|
|
property DockSite;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property Enabled;
|
|
property Font;
|
|
property HotTrack;
|
|
property Images;
|
|
property MultiLine;
|
|
property MultiSelect;
|
|
property OnChange;
|
|
property OnChangeBounds;
|
|
property OnChanging;
|
|
property OnContextPopup;
|
|
property OnDockDrop;
|
|
property OnDockOver;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnDrawTab;
|
|
property OnEndDock;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnGetImageIndex;
|
|
property OnGetSiteInfo;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnResize;
|
|
property OnStartDock;
|
|
property OnStartDrag;
|
|
property OnUnDock;
|
|
property OwnerDraw;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property RaggedRight;
|
|
property ScrollOpposite;
|
|
property ShowHint;
|
|
property Style;
|
|
property TabHeight;
|
|
property TabIndex;
|
|
property TabOrder;
|
|
property TabPosition;
|
|
property Tabs;
|
|
property TabStop;
|
|
property TabWidth;
|
|
property Visible;
|
|
end;
|
|
|
|
|
|
{ Custom draw }
|
|
|
|
TCustomDrawTarget = (
|
|
dtControl, // the whole control
|
|
dtItem, // one item (= line in report mode)
|
|
dtSubItem // one subitem, except for subitem 0, this one is drawn by dtItem
|
|
);
|
|
TCustomDrawStage = (
|
|
cdPrePaint,
|
|
cdPostPaint,
|
|
cdPreErase,
|
|
cdPostErase
|
|
);
|
|
TCustomDrawStateFlag = (
|
|
cdsSelected,
|
|
cdsGrayed,
|
|
cdsDisabled,
|
|
cdsChecked,
|
|
cdsFocused,
|
|
cdsDefault,
|
|
cdsHot,
|
|
cdsMarked,
|
|
cdsIndeterminate
|
|
);
|
|
TCustomDrawState = set of TCustomDrawStateFlag;
|
|
|
|
TCustomDrawResultFlag = (
|
|
cdrSkipDefault,
|
|
cdrNotifyPostpaint,
|
|
cdrNotifyItemdraw,
|
|
cdrNotifySubitemdraw,
|
|
cdrNotifyPosterase,
|
|
cdrNotifyItemerase
|
|
);
|
|
TCustomDrawResult = set of TCustomDrawResultFlag;
|
|
|
|
|
|
{ TListView }
|
|
|
|
TListItems = class; //forward declaration!
|
|
TCustomListView = class; //forward declaration!
|
|
TSortType = (stNone, stData, stText, stBoth);
|
|
|
|
TListItemState = (lisCut, lisDropTarget, lisFocused, lisSelected);
|
|
TListItemStates = set of TListItemState;
|
|
|
|
TListItemFlag = (lifDestroying, lifCreated);
|
|
TListItemFlags = set of TListItemFlag;
|
|
|
|
TDisplayCode = (drBounds, drIcon, drLabel, drSelectBounds);
|
|
|
|
{ TListItem }
|
|
|
|
TListItem = class(TPersistent)
|
|
private
|
|
FOwner: TListItems;
|
|
FFlags: TListItemFlags;
|
|
FSubItems: TStrings;
|
|
FCaption: String;
|
|
FData: Pointer;
|
|
FImageIndex: Integer;
|
|
FStates: TListItemStates;
|
|
FChecked: Boolean;
|
|
function GetChecked: Boolean;
|
|
function GetLeft: Integer;
|
|
function GetListView: TCustomListView;
|
|
function GetPosition: TPoint;
|
|
function GetState(const ALisOrd: Integer): Boolean;
|
|
function GetIndex: Integer;
|
|
function GetSubItemImages(const AIndex: Integer): Integer;
|
|
function GetSubItems: TStrings;
|
|
function GetTop: Integer;
|
|
function WSUpdateAllowed: Boolean;
|
|
procedure WSUpdateText;
|
|
procedure WSUpdateImages;
|
|
procedure WSUpdateChecked;
|
|
procedure WSUpdateState;
|
|
|
|
procedure SetChecked(AValue: Boolean);
|
|
procedure SetState(const ALisOrd: Integer; const AIsSet: Boolean);
|
|
procedure SetData(const AValue: Pointer);
|
|
procedure SetImageIndex(const AValue: Integer);
|
|
procedure SetLeft(Value: Integer);
|
|
procedure SetCaption(const AValue : String);
|
|
procedure SetPosition(const AValue: TPoint);
|
|
procedure SetSubItemImages(const AIndex, AValue: Integer);
|
|
procedure SetSubItems(const AValue: TStrings);
|
|
procedure SetTop(Value: Integer);
|
|
protected
|
|
function IsEqual(const AItem: TListItem): Boolean;
|
|
function GetCheckedInternal: Boolean;
|
|
public
|
|
procedure Assign(ASource: TPersistent); override;
|
|
|
|
constructor Create(AOwner : TListItems);
|
|
destructor Destroy; override;
|
|
procedure Delete;
|
|
procedure MakeVisible(PartialOK: Boolean);
|
|
function DisplayRect(Code: TDisplayCode): TRect;
|
|
function DisplayRectSubItem(subItem: integer;Code: TDisplayCode): TRect;
|
|
|
|
property Caption : String read FCaption write SetCaption;
|
|
property Checked : Boolean read GetChecked write SetChecked;
|
|
property Cut: Boolean index Ord(lisCut) read GetState write SetState;
|
|
property Data: Pointer read FData write SetData;
|
|
property DropTarget: Boolean index Ord(lisDropTarget) read GetState write SetState;
|
|
property Focused: Boolean index Ord(lisFocused) read GetState write SetState;
|
|
property Index: Integer read GetIndex;
|
|
property ImageIndex: Integer read FImageIndex write SetImageIndex default -1;
|
|
property Left: Integer read GetLeft write SetLeft;
|
|
property ListView: TCustomListView read GetListView;
|
|
property Owner: TListItems read FOwner;
|
|
property Position: TPoint read GetPosition write SetPosition;
|
|
property Selected: Boolean index Ord(lisSelected) read GetState write SetState;
|
|
property SubItems: TStrings read GetSubItems write SetSubItems;
|
|
property SubItemImages[const AIndex: Integer]: Integer read GetSubItemImages write SetSubItemImages;
|
|
property Top: Integer read GetTop write SetTop;
|
|
end;
|
|
|
|
|
|
{ TListItems }
|
|
{
|
|
Listitems have a build in cache of the last accessed item.
|
|
This will speed up interface updates since Item.Index is
|
|
often used for the same item updating more properties.
|
|
If FCacheIndex = -1 then the cache is not valid.
|
|
}
|
|
|
|
TListItems = class(TPersistent)
|
|
private
|
|
FOwner: TCustomListView;
|
|
FItems: TList;
|
|
FCacheIndex: Integer; // Caches the last used item
|
|
FCacheItem: TListItem; //
|
|
procedure WSCreateCacheItem;
|
|
function WSUpdateAllowed: Boolean;
|
|
procedure WSUpdateItem(const AIndex:Integer; const AValue: TListItem);
|
|
procedure ItemDestroying(const AItem: TListItem); //called by TListItem when freed
|
|
procedure ReadData(Stream: TStream); // read data in a Delphi compatible way
|
|
procedure ReadLazData(Stream: TStream); // read data in a 64 bits safe way
|
|
procedure WriteLazData(Stream: TStream); // write date in a 64 bits safe way
|
|
protected
|
|
procedure DefineProperties(Filer: TFiler); override;
|
|
function GetCount : Integer;
|
|
function GetItem(const AIndex: Integer): TListItem;
|
|
procedure WSCreateItems;
|
|
procedure SetItem(const AIndex: Integer; const AValue: TListItem);
|
|
public
|
|
function Add: TListItem;
|
|
procedure AddItem(AItem: TListItem);
|
|
procedure BeginUpdate;
|
|
procedure Clear;
|
|
constructor Create(AOwner : TCustomListView);
|
|
destructor Destroy; override;
|
|
procedure Delete(const AIndex : Integer);
|
|
procedure EndUpdate;
|
|
function FindCaption(StartIndex: Integer; Value: string;
|
|
Partial, Inclusive, Wrap: Boolean;
|
|
PartStart: Boolean = True): TListItem;
|
|
function FindData(const AData: Pointer): TListItem;
|
|
function IndexOf(const AItem: TListItem): Integer;
|
|
function Insert(const AIndex: Integer) : TListItem;
|
|
procedure InsertItem(AItem: TListItem; const AIndex: Integer);
|
|
property Count: Integer read GetCount;
|
|
property Item[const AIndex: Integer]: TListItem read GetItem write SetItem; default;
|
|
property Owner : TCustomListView read FOwner;
|
|
end;
|
|
|
|
|
|
{ TListColumn }
|
|
|
|
TWidth = 0..MaxInt;
|
|
|
|
TListColumn = class(TCollectionItem)
|
|
private
|
|
FAlignment: TAlignment;
|
|
FAutoSize: Boolean;
|
|
FCaption: TTranslateString;
|
|
FMinWidth: TWidth;
|
|
FMaxWidth: TWidth;
|
|
FVisible: Boolean;
|
|
FWidth: TWidth;
|
|
FImageIndex: Integer;
|
|
FTag: Integer;
|
|
function GetWidth: TWidth;
|
|
procedure WSCreateColumn;
|
|
procedure WSDestroyColumn;
|
|
function WSUpdateAllowed: Boolean;
|
|
procedure SetVisible(const AValue: Boolean);
|
|
procedure SetAutoSize(const AValue: Boolean);
|
|
procedure SetMinWidth(const AValue: TWidth);
|
|
procedure SetMaxWidth(const AValue: TWidth);
|
|
procedure SetWidth(const AValue: TWidth);
|
|
procedure SetCaption(const AValue: TTranslateString);
|
|
procedure SetAlignment(const AValue: TAlignment);
|
|
procedure SetImageIndex(const AValue: TImageIndex);
|
|
protected
|
|
procedure SetIndex(AValue: Integer); override;
|
|
function GetDisplayName: string; override;
|
|
public
|
|
constructor Create(ACollection: TCollection); override;
|
|
destructor Destroy; override;
|
|
procedure Assign(ASource: TPersistent); override;
|
|
published
|
|
property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
|
|
property AutoSize: Boolean read FAutoSize write SetAutoSize default False;
|
|
property Caption: TTranslateString read FCaption write SetCaption;
|
|
property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1;
|
|
property MaxWidth: TWidth read FMaxWidth write SetMaxWidth default 0;
|
|
property MinWidth: TWidth read FMinWidth write SetMinWidth default 0;
|
|
property Tag: Integer read FTag write FTag default 0;
|
|
property Visible: Boolean read FVisible write SetVisible default true;
|
|
property Width: TWidth read GetWidth write SetWidth default 50;
|
|
end;
|
|
|
|
|
|
{ TListColumns }
|
|
|
|
TListColumns = class(TCollection)
|
|
private
|
|
FOwner: TCustomListView;
|
|
FItemNeedsUpdate: TCollectionItem;
|
|
FNeedsUpdate: boolean;
|
|
function GetItem(const AIndex: Integer): TListColumn;
|
|
procedure WSCreateColumns;
|
|
procedure SetItem(const AIndex: Integer; const AValue: TListColumn);
|
|
public
|
|
constructor Create(TheOwner: TCustomListView);
|
|
destructor Destroy; override;
|
|
procedure Update(Item: TCollectionItem); override;
|
|
function Add: TListColumn;
|
|
property Owner: TCustomListView read FOwner;
|
|
property Items[const AIndex: Integer]: TListColumn
|
|
read GetItem write SetItem; default;
|
|
procedure Assign(Source: TPersistent); override;
|
|
end;
|
|
|
|
|
|
{ TCustomListView }
|
|
|
|
TItemChange = (ctText, ctImage, ctState);
|
|
TViewStyle = (vsIcon, vsSmallIcon, vsList, vsReport);
|
|
|
|
TLVChangeEvent = procedure(Sender: TObject; Item: TListItem;
|
|
Change: TItemChange) of object;
|
|
TLVColumnClickEvent = procedure(Sender: TObject;
|
|
Column: TListColumn) of object;
|
|
TLVColumnRClickEvent = procedure(Sender: TObject; Column: TListColumn;
|
|
Point: TPoint) of object;
|
|
TLVCompareEvent = procedure(Sender: TObject; Item1, Item2: TListItem;
|
|
Data: Integer; var Compare: Integer) of object;
|
|
TLVDeletedEvent = procedure(Sender: TObject; Item: TListItem) of object;
|
|
TLVInsertEvent = TLVDeletedEvent;
|
|
TLVSelectItemEvent = procedure(Sender: TObject; Item: TListItem;
|
|
Selected: Boolean) of object;
|
|
TLVCustomDrawEvent = procedure(Sender: TCustomListView; const ARect: TRect;
|
|
var DefaultDraw: Boolean) of object;
|
|
TLVCustomDrawItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
|
|
State: TCustomDrawState; var DefaultDraw: Boolean) of object;
|
|
TLVCustomDrawSubItemEvent=procedure(Sender: TCustomListView; Item: TListItem;
|
|
SubItem: Integer; State: TCustomDrawState;
|
|
var DefaultDraw: Boolean) of object;
|
|
TLVAdvancedCustomDrawEvent = procedure(Sender: TCustomListView; const ARect: TRect;
|
|
Stage: TCustomDrawStage; var DefaultDraw: Boolean) of object;
|
|
TLVAdvancedCustomDrawItemEvent = procedure(Sender: TCustomListView; Item: TListItem;
|
|
State: TCustomDrawState; Stage: TCustomDrawStage;
|
|
var DefaultDraw: Boolean) of object;
|
|
TLVAdvancedCustomDrawSubItemEvent=procedure(Sender: TCustomListView; Item: TListItem;
|
|
SubItem: Integer; State: TCustomDrawState;
|
|
Stage: TCustomDrawStage; var DefaultDraw: Boolean) of object;
|
|
|
|
TListViewProperty = (
|
|
lvpAutoArrange,
|
|
lvpCheckboxes,
|
|
lvpColumnClick,
|
|
lvpFlatScrollBars,
|
|
lvpFullDrag,
|
|
lvpGridLines,
|
|
lvpHideSelection,
|
|
lvpHotTrack,
|
|
lvpMultiSelect,
|
|
lvpOwnerDraw,
|
|
lvpReadOnly,
|
|
lvpRowSelect,
|
|
lvpShowColumnHeaders,
|
|
lvpShowWorkAreas,
|
|
lvpWrapText,
|
|
lvpToolTips
|
|
);
|
|
TListViewProperties = set of TListViewProperty;
|
|
|
|
TListViewImageList = (lvilSmall, lvilLarge, lvilState);
|
|
|
|
TListHotTrackStyle = (htHandPoint, htUnderlineCold, htUnderlineHot);
|
|
TListHotTrackStyles = set of TListHotTrackStyle;
|
|
|
|
TListViewFlag = (
|
|
lffSelectedValid
|
|
);
|
|
TListViewFlags = set of TListViewFlag;
|
|
|
|
{ TCustomListView }
|
|
|
|
TCustomListView = class(TWinControl)
|
|
private
|
|
FAllocBy: Integer;
|
|
FCanvas: TCanvas;
|
|
FDefaultItemHeight: integer;
|
|
FHotTrackStyles: TListHotTrackStyles;
|
|
FOwnerData: Boolean;
|
|
FListItems: TListItems;
|
|
FColumns: TListColumns;
|
|
FImages: array[TListViewImageList] of TCustomImageList;
|
|
FImageChangeLinks: array[TListViewImageList] of TChangeLink;
|
|
FFlags: TListViewFlags;
|
|
|
|
FViewStyle: TViewStyle;
|
|
FSortType: TSortType;
|
|
FSortColumn: Integer;
|
|
FScrollBars: TScrollStyle;
|
|
FViewOriginCache: TPoint; // scrolled originwhile handle is not created
|
|
FSelected: TListItem; // temp copy of the selected item
|
|
FFocused: TListItem; // temp copy of the focused item
|
|
FHoverTime: Integer; // temp copy of the hover time (the time a mouse must be over a item to auto select)
|
|
// MWE: not used: see updateScrollbars
|
|
// FLastHorzScrollInfo: TScrollInfo;
|
|
// FLastVertScrollInfo: TScrollInfo;
|
|
FUpdateCount: integer;
|
|
FOnChange: TLVChangeEvent;
|
|
FOnColumnClick: TLVColumnClickEvent;
|
|
FOnCompare: TLVCompareEvent;
|
|
FOnDeletion: TLVDeletedEvent;
|
|
FOnInsert: TLVInsertEvent;
|
|
FOnSelectItem: TLVSelectItemEvent;
|
|
FOnCustomDraw: TLVCustomDrawEvent;
|
|
FOnCustomDrawItem: TLVCustomDrawItemEvent;
|
|
FOnCustomDrawSubItem: TLVCustomDrawSubItemEvent;
|
|
FOnAdvancedCustomDraw: TLVAdvancedCustomDrawEvent;
|
|
FOnAdvancedCustomDrawItem: TLVAdvancedCustomDrawItemEvent;
|
|
FOnAdvancedCustomDrawSubItem: TLVAdvancedCustomDrawSubItemEvent;
|
|
FProperties: TListViewProperties;
|
|
function GetBoundingRect: TRect;
|
|
function GetColumnFromIndex(AIndex: Integer): TListColumn;
|
|
function GetDropTarget: TListItem;
|
|
function GetFocused: TListItem;
|
|
function GetImageList(const ALvilOrd: Integer): TCustomImageList;
|
|
function GetHoverTime: Integer;
|
|
function GetProperty(const ALvpOrd: Integer): Boolean;
|
|
function GetSelCount: Integer;
|
|
function GetSelection: TListItem;
|
|
function GetTopItem: TListItem;
|
|
function GetViewOrigin: TPoint;
|
|
function GetVisibleRowCount: Integer;
|
|
|
|
procedure SetAllocBy(const AValue: Integer);
|
|
procedure SetColumns(const AValue: TListColumns);
|
|
procedure SetDefaultItemHeight(AValue: Integer);
|
|
procedure SetDropTarget(const AValue: TListItem);
|
|
procedure SetFocused(const AValue: TListItem);
|
|
procedure SetHotTrackStyles(const AValue: TListHotTrackStyles);
|
|
procedure SetHoverTime(const AValue: Integer);
|
|
procedure SetImageList(const ALvilOrd: Integer; const AValue: TCustomImageList);
|
|
procedure SetItems(const AValue : TListItems);
|
|
procedure SetItemVisible(const AValue: TListItem; const APartialOK: Boolean);
|
|
procedure SetOwnerData(const AValue: Boolean);
|
|
procedure SetProperty(const ALvpOrd: Integer; const AIsSet: Boolean);
|
|
procedure SetScrollBars(const AValue: TScrollStyle);
|
|
procedure SetSelection(const AValue: TListItem);
|
|
procedure SetSortColumn(const AValue: Integer);
|
|
procedure SetSortType(const AValue: TSortType);
|
|
procedure SetViewOrigin(AValue: TPoint);
|
|
procedure SetViewStyle(const Avalue: TViewStyle);
|
|
procedure Sort;
|
|
procedure UpdateScrollbars;
|
|
procedure CNNotify(var AMessage: TLMNotify); message CN_NOTIFY;
|
|
procedure InvalidateSelected;
|
|
protected
|
|
//called by TListItems
|
|
procedure ItemDeleted(const AItem: TListItem);
|
|
procedure ItemInserted(const AItem: TListItem);
|
|
|
|
protected
|
|
class procedure WSRegisterClass; override;
|
|
procedure InitializeWnd; override;
|
|
procedure FinalizeWnd; override;
|
|
|
|
procedure DestroyWnd; override;
|
|
procedure BeginAutoDrag; override;
|
|
procedure Change(AItem: TListItem; AChange: Integer); virtual;
|
|
procedure ColClick(AColumn: TListColumn); virtual;
|
|
|
|
procedure Delete(Item : TListItem);
|
|
procedure DoDeletion(AItem: TListItem); virtual;
|
|
procedure DoInsert(AItem: TListItem); virtual;
|
|
procedure DoSelectItem(AItem: TListItem; ASelected: Boolean); virtual;
|
|
procedure InsertItem(Item : TListItem);
|
|
procedure ImageChanged(Sender : TObject);
|
|
procedure Loaded; override;
|
|
|
|
function IsCustomDrawn(ATarget: TCustomDrawTarget; AStage: TCustomDrawStage): Boolean; virtual;
|
|
function CustomDraw(const ARect: TRect; AStage: TCustomDrawStage): Boolean; virtual; // Return True if default drawing should be done
|
|
function CustomDrawItem(AItem: TListItem; AState: TCustomDrawState; AStage: TCustomDrawStage): Boolean; virtual; //
|
|
function CustomDrawSubItem(AItem: TListItem; ASubItem: Integer; AState: TCustomDrawState; AStage: TCustomDrawStage): Boolean; virtual; //
|
|
function IntfCustomDraw(ATarget: TCustomDrawTarget; AStage: TCustomDrawStage; AItem, ASubItem: Integer; AState: TCustomDrawState; const ARect: PRect): TCustomDrawResult;
|
|
protected
|
|
property AllocBy: Integer read FAllocBy write SetAllocBy default 0;
|
|
property ColumnClick: Boolean index Ord(lvpColumnClick) read GetProperty write SetProperty default True;
|
|
property Columns: TListColumns read FColumns write SetColumns;
|
|
property DefaultItemHeight: integer read FDefaultItemHeight write SetDefaultItemHeight;
|
|
property HideSelection: Boolean index Ord(lvpHideSelection) read GetProperty write SetProperty default True;
|
|
property HoverTime: Integer read GetHoverTime write SetHoverTime default -1;
|
|
property LargeImages: TCustomImageList index Ord(lvilLarge) read GetImageList write SetImageList;
|
|
property OwnerData: Boolean read FOwnerData write SetOwnerData default False;
|
|
property OwnerDraw: Boolean index Ord(lvpOwnerDraw) read GetProperty write SetProperty default False;
|
|
property ScrollBars: TScrollStyle read FScrollBars write SetScrollBars default ssBoth;
|
|
property ShowColumnHeaders: Boolean index Ord(lvpShowColumnHeaders) read GetProperty write SetProperty default True;
|
|
property ShowWorkAreas: Boolean index Ord(lvpShowWorkAreas) read GetProperty write SetProperty default False;
|
|
property SmallImages: TCustomImageList index Ord(lvilSmall) read GetImageList write SetImageList;
|
|
property SortType: TSortType read FSortType write SetSortType default stNone;
|
|
property SortColumn: Integer read FSortColumn write SetSortColumn default 0;
|
|
property StateImages: TCustomImageList index Ord(lvilState) read GetImageList write SetImageList;
|
|
property ToolTips: Boolean index Ord(lvpToolTips) read GetProperty write SetProperty default True;
|
|
property ViewStyle: TViewStyle read FViewStyle write SetViewStyle default vsList;
|
|
property OnChange: TLVChangeEvent read FOnChange write FOnChange;
|
|
property OnColumnClick: TLVColumnClickEvent read FOnColumnClick write FOnColumnClick;
|
|
property OnCompare: TLVCompareEvent read FOnCompare write FOnCompare;
|
|
property OnDeletion: TLVDeletedEvent read FOnDeletion write FOnDeletion;
|
|
property OnInsert: TLVInsertEvent read FOnInsert write FOnInsert;
|
|
property OnSelectItem: TLVSelectItemEvent read FOnSelectItem write FOnSelectItem;
|
|
property OnCustomDraw: TLVCustomDrawEvent read FOnCustomDraw write FOnCustomDraw;
|
|
property OnCustomDrawItem: TLVCustomDrawItemEvent read FOnCustomDrawItem write FOnCustomDrawItem;
|
|
property OnCustomDrawSubItem: TLVCustomDrawSubItemEvent read FOnCustomDrawSubItem write FOnCustomDrawSubItem;
|
|
property OnAdvancedCustomDraw: TLVAdvancedCustomDrawEvent read FOnAdvancedCustomDraw write FOnAdvancedCustomDraw;
|
|
property OnAdvancedCustomDrawItem: TLVAdvancedCustomDrawItemEvent read FOnAdvancedCustomDrawItem write FOnAdvancedCustomDrawItem;
|
|
property OnAdvancedCustomDrawSubItem: TLVAdvancedCustomDrawSubItemEvent read FOnAdvancedCustomDrawSubItem write FOnAdvancedCustomDrawSubItem;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure BeginUpdate;
|
|
procedure Clear;
|
|
procedure EndUpdate;
|
|
function FindCaption(StartIndex: Integer; Value: string; Partial, Inclusive, Wrap: Boolean; PartStart: Boolean = True): TListItem;
|
|
function GetItemAt(x,y: integer): TListItem;
|
|
property BoundingRect: TRect read GetBoundingRect;
|
|
property BorderStyle default bsSingle;
|
|
property Canvas: TCanvas read FCanvas;
|
|
property Checkboxes: Boolean index Ord(lvpCheckboxes) read GetProperty write SetProperty default False;
|
|
property Column[AIndex: Integer]: TListColumn read GetColumnFromIndex;
|
|
property DropTarget: TListItem read GetDropTarget write SetDropTarget;
|
|
property FlatScrollBars: Boolean index Ord(lvpFlatScrollBars) read GetProperty write SetProperty default False;
|
|
property FullDrag: Boolean index Ord(lvpFullDrag) read GetProperty write SetProperty default False;
|
|
property GridLines: Boolean index Ord(lvpGridLines) read GetProperty write SetProperty default False;
|
|
property HotTrack: Boolean index Ord(lvpHotTrack) read GetProperty write SetProperty default False;
|
|
property HotTrackStyles: TListHotTrackStyles read FHotTrackStyles write SetHotTrackStyles default [];
|
|
property ItemFocused: TListItem read GetFocused write SetFocused;
|
|
property Items: TListItems read FListItems write SetItems;
|
|
// MultiSelect and ReadOnly should be protected, but can't because Carbon Interface
|
|
// needs to access this property and it cannot cast to TListItem, because we have
|
|
// other classes descending from TCustomListItem which need to work too
|
|
property MultiSelect: Boolean index Ord(lvpMultiselect) read GetProperty write SetProperty default False;
|
|
property ReadOnly: Boolean index Ord(lvpReadOnly) read GetProperty write SetProperty default False;
|
|
property RowSelect: Boolean index Ord(lvpRowSelect) read GetProperty write SetProperty default False;
|
|
property SelCount: Integer read GetSelCount;
|
|
property Selected: TListItem read GetSelection write SetSelection;
|
|
property TabStop default true;
|
|
property TopItem: TListItem read GetTopItem;
|
|
property ViewOrigin: TPoint read GetViewOrigin write SetViewOrigin;
|
|
property VisibleRowCount: Integer read GetVisibleRowCount;
|
|
end;
|
|
|
|
|
|
{ TListView }
|
|
|
|
TListView = class(TCustomListView)
|
|
published
|
|
property Align;
|
|
property Anchors;
|
|
property BorderSpacing;
|
|
property BorderStyle;
|
|
property BorderWidth;
|
|
property Checkboxes;
|
|
property Color default clWindow;
|
|
property Columns;
|
|
property ColumnClick;
|
|
property Constraints;
|
|
property DragCursor;
|
|
property DragMode;
|
|
// property DefaultItemHeight;
|
|
// property DropTarget;
|
|
property Enabled;
|
|
// property FlatScrollBars;
|
|
property Font;
|
|
// property FullDrag;
|
|
// property GridLines;
|
|
property HideSelection;
|
|
// property HotTrack;
|
|
// property HotTrackStyles;
|
|
// property HoverTime;
|
|
property Items;
|
|
property LargeImages;
|
|
property MultiSelect;
|
|
// property OwnerData;
|
|
// property OwnerDraw;
|
|
property ParentColor default False;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property ReadOnly;
|
|
property RowSelect;
|
|
property ScrollBars;
|
|
property ShowColumnHeaders;
|
|
property ShowHint;
|
|
// property ShowWorkAreas;
|
|
property SmallImages;
|
|
property SortColumn;
|
|
property SortType;
|
|
property StateImages;
|
|
property TabStop;
|
|
property TabOrder;
|
|
property ToolTips;
|
|
property Visible;
|
|
property ViewStyle;
|
|
property OnAdvancedCustomDraw;
|
|
property OnAdvancedCustomDrawItem;
|
|
property OnAdvancedCustomDrawSubItem;
|
|
property OnChange;
|
|
property OnClick;
|
|
property OnColumnClick;
|
|
property OnCompare;
|
|
property OnContextPopup;
|
|
property OnCustomDraw;
|
|
property OnCustomDrawItem;
|
|
property OnCustomDrawSubItem;
|
|
property OnDblClick;
|
|
property OnDeletion;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDrag;
|
|
property OnKeyDown;
|
|
property OnKeyPress;
|
|
property OnKeyUp;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnResize;
|
|
property OnSelectItem;
|
|
property OnStartDrag;
|
|
property OnUTF8KeyPress;
|
|
end;
|
|
|
|
TProgressBarOrientation = (pbHorizontal, pbVertical, pbRightToLeft, pbTopDown);
|
|
|
|
TProgressBarStyle = (pbstNormal, pbstMarquee);
|
|
|
|
{ TCustomProgressBar }
|
|
{
|
|
@abstract(Simple progressbar.)
|
|
Introduced by Author Name <stoppok@osibisa.ms.sub.org>
|
|
Currently maintained by Maintainer Name <stoppok@osibisa.ms.sub.org>
|
|
}
|
|
TCustomProgressBar = class(TWinControl)
|
|
private
|
|
FMin: Integer;
|
|
FMax: Integer;
|
|
FStep: Integer;
|
|
FPosition: Integer;
|
|
FSmooth: boolean;
|
|
FBarShowText: boolean;
|
|
FBarTextFormat: string;
|
|
FOrientation: TProgressBarOrientation;
|
|
FStyle: TProgressBarStyle;
|
|
function GetMin: Integer;
|
|
function GetMax: Integer;
|
|
function GetPosition: Integer;
|
|
procedure SetParams(AMin, AMax: Integer);
|
|
procedure SetMin(Value: Integer);
|
|
procedure SetMax(Value: Integer);
|
|
procedure SetPosition(Value: Integer);
|
|
procedure SetStep(Value: Integer);
|
|
procedure SetSmooth (Value : boolean);
|
|
procedure SetBarShowText (Value : boolean);
|
|
procedure SetOrientation (Value : TProgressBarOrientation);
|
|
procedure SetStyle(const AValue: TProgressBarStyle);
|
|
protected
|
|
class procedure WSRegisterClass; override;
|
|
procedure ApplyChanges;
|
|
procedure InitializeWnd; override;
|
|
procedure Loaded; override;
|
|
class function GetControlClassDefaultSize: TPoint; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
procedure StepIt;
|
|
procedure StepBy(Delta: Integer);
|
|
public
|
|
property Max: Integer read GetMax write SetMax default 100;
|
|
property Min: Integer read GetMin write SetMin default 0;
|
|
property Orientation: TProgressBarOrientation read FOrientation write SetOrientation default pbHorizontal;
|
|
property Position: Integer read GetPosition write SetPosition default 0;
|
|
property Smooth : boolean read FSmooth write SetSmooth default False;
|
|
property Step: Integer read FStep write SetStep default 10;
|
|
property Style: TProgressBarStyle read FStyle write SetStyle default pbstNormal;
|
|
property BarShowText : boolean read FBarShowText write SetBarShowText default False;
|
|
end;
|
|
|
|
|
|
{ TProgressBar }
|
|
|
|
TProgressBar = class(TCustomProgressBar)
|
|
published
|
|
property Align;
|
|
property Anchors;
|
|
property BorderSpacing;
|
|
property BorderWidth;
|
|
property Constraints;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property Enabled;
|
|
property Hint;
|
|
property Max;
|
|
property Min;
|
|
property OnContextPopup;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnStartDock;
|
|
property OnStartDrag;
|
|
property Orientation;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property Position;
|
|
property ShowHint;
|
|
property Smooth;
|
|
property Step;
|
|
property Style;
|
|
property TabOrder;
|
|
property TabStop;
|
|
property Visible;
|
|
property BarShowText;
|
|
end;
|
|
|
|
|
|
TUDAlignButton = (udLeft, udRight, udTop, udBottom);
|
|
TUDOrientation = (udHorizontal, udVertical);
|
|
TUDBtnType = (btNext, btPrev);
|
|
TUDClickEvent = procedure (Sender: TObject; Button: TUDBtnType) of object;
|
|
TUDChangingEvent = procedure (Sender: TObject; var AllowChange: Boolean) of object;
|
|
|
|
{ TCustomUpDown }
|
|
|
|
TCustomUpDown = class(TCustomControl)
|
|
private
|
|
MinBtn: TControl;// TSpeedButton
|
|
MaxBtn: TControl;// TSpeedButton
|
|
BTimerProc: procedure of Object;
|
|
BTimerBounds : TRect;
|
|
FArrowKeys: Boolean;
|
|
FAssociate: TWinControl;
|
|
FMin: SmallInt;
|
|
FMax: SmallInt;
|
|
FIncrement: Integer;
|
|
FPosition: SmallInt;
|
|
FThousands: Boolean;
|
|
FWrap: Boolean;
|
|
FOnClick: TUDClickEvent;
|
|
FAlignButton: TUDAlignButton;
|
|
FOrientation: TUDOrientation;
|
|
FOnChanging: TUDChangingEvent;
|
|
function GetPosition: SmallInt;
|
|
procedure BTimerExec(Sender : TObject);
|
|
procedure SetAlignButton(Value: TUDAlignButton);
|
|
procedure SetArrowKeys(Value: Boolean);
|
|
procedure SetAssociate(Value: TWinControl);
|
|
procedure SetIncrement(Value: Integer);
|
|
procedure SetMax(Value: SmallInt);
|
|
procedure SetMin(Value: SmallInt);
|
|
procedure SetOrientation(Value: TUDOrientation);
|
|
procedure SetPosition(Value: SmallInt);
|
|
procedure SetThousands(Value: Boolean);
|
|
procedure SetWrap(Value: Boolean);
|
|
procedure UpdateAlignButtonPos;
|
|
procedure UpdateOrientation;
|
|
procedure UpdateUpDownPositionText;
|
|
protected
|
|
OldKeyDown : TKeyEvent;
|
|
class procedure WSRegisterClass; override;
|
|
procedure AssociateKeyDown(Sender: TObject; var Key: Word; ShiftState : TShiftState);
|
|
procedure OnAssociateChangeBounds(Sender: TObject);
|
|
procedure DoOnResize; override;
|
|
class function GetControlClassDefaultSize: TPoint; override;
|
|
function CanChange: Boolean; virtual;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
procedure Click(Button: TUDBtnType); virtual; overload;
|
|
property AlignButton: TUDAlignButton read FAlignButton write SetAlignButton default udRight;
|
|
property ArrowKeys: Boolean read FArrowKeys write SetArrowKeys default True;
|
|
property Associate: TWinControl read FAssociate write SetAssociate;
|
|
property Min: SmallInt read FMin write SetMin;
|
|
property Max: SmallInt read FMax write SetMax default 100;
|
|
property Increment: Integer read FIncrement write SetIncrement default 1;
|
|
property Orientation: TUDOrientation read FOrientation write SetOrientation default udVertical;
|
|
property Position: SmallInt read GetPosition write SetPosition;
|
|
property Thousands: Boolean read FThousands write SetThousands default True;
|
|
property Wrap: Boolean read FWrap write SetWrap;
|
|
property OnChanging: TUDChangingEvent read FOnChanging write FOnChanging;
|
|
property OnClick: TUDClickEvent read FOnClick write FOnClick;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; Override;
|
|
end;
|
|
|
|
|
|
{ TUpDown }
|
|
|
|
TUpDown = class(TCustomUpDown)
|
|
published
|
|
property AlignButton;
|
|
property Anchors;
|
|
property Associate;
|
|
property ArrowKeys;
|
|
property BorderSpacing;
|
|
property Enabled;
|
|
property Hint;
|
|
property Min;
|
|
property Max;
|
|
property Increment;
|
|
property Constraints;
|
|
property Orientation;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property Position;
|
|
property ShowHint;
|
|
property TabOrder;
|
|
property TabStop;
|
|
property Thousands;
|
|
property Visible;
|
|
property Wrap;
|
|
property OnChanging;
|
|
property OnClick;
|
|
property OnContextPopup;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
end;
|
|
|
|
|
|
{ TToolButton }
|
|
|
|
const
|
|
CN_DROPDOWNCLOSED = LM_USER + $1000;
|
|
|
|
type
|
|
TToolButtonStyle =
|
|
(
|
|
tbsButton, // button (can be clicked)
|
|
tbsCheck, // check item (click to toggle state, can be grouped)
|
|
tbsDropDown, // button with dropdown button to show a popup menu
|
|
tbsSeparator, // space holder
|
|
tbsDivider // space holder with line
|
|
);
|
|
|
|
TToolButtonFlag =
|
|
(
|
|
tbfPressed, // set while mouse is pressed on button
|
|
tbfArrowPressed // set while mouse is pressed on arrow button
|
|
);
|
|
TToolButtonFlags = set of TToolButtonFlag;
|
|
|
|
{ TToolButtonActionLink }
|
|
|
|
TToolButtonActionLink = class(TControlActionLink)
|
|
protected
|
|
procedure AssignClient(AClient: TObject); override;
|
|
procedure SetChecked(Value: Boolean); override;
|
|
procedure SetImageIndex(Value: Integer); override;
|
|
public
|
|
function IsCheckedLinked: Boolean; override;
|
|
function IsImageIndexLinked: Boolean; override;
|
|
end;
|
|
|
|
TToolButtonActionLinkClass = class of TToolButtonActionLink;
|
|
|
|
TToolBar = class;
|
|
|
|
TToolButton = class(TGraphicControl)
|
|
private
|
|
FAllowAllUp: Boolean;
|
|
FDown: Boolean;
|
|
FDropdownMenu: TPopupMenu;
|
|
FGrouped: Boolean;
|
|
FImageIndex: Integer;
|
|
FIndeterminate: Boolean;
|
|
FMarked: Boolean;
|
|
FMenuItem: TMenuItem;
|
|
FMouseInControl: boolean;
|
|
FStyle: TToolButtonStyle;
|
|
FToolButtonFlags: TToolButtonFlags;
|
|
FUpdateCount: Integer;
|
|
FWrap: Boolean;
|
|
procedure GetGroupBounds(var StartIndex, EndIndex: integer);
|
|
function GetIndex: Integer;
|
|
function GetTextSize: TSize;
|
|
function IsCheckedStored: Boolean;
|
|
function IsImageIndexStored: Boolean;
|
|
function IsWidthStored: Boolean;
|
|
procedure SetDown(Value: Boolean);
|
|
procedure SetDropdownMenu(Value: TPopupMenu);
|
|
procedure SetGrouped(Value: Boolean);
|
|
procedure SetImageIndex(Value: Integer);
|
|
procedure SetIndeterminate(Value: Boolean);
|
|
procedure SetMarked(Value: Boolean);
|
|
procedure SetMenuItem(Value: TMenuItem);
|
|
procedure SetStyle(Value: TToolButtonStyle);
|
|
procedure SetWrap(Value: Boolean);
|
|
procedure SetMouseInControl(NewMouseInControl: Boolean);
|
|
procedure CMEnabledChanged(var Message: TLMEssage); message CM_ENABLEDCHANGED;
|
|
procedure CMVisibleChanged(var Message: TLMessage); message CM_VISIBLECHANGED;
|
|
procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST;
|
|
protected
|
|
FToolBar: TToolBar;
|
|
class procedure WSRegisterClass; override;
|
|
procedure CopyPropertiesFromMenuItem(const Value: TMenuItem);
|
|
function GetActionLinkClass: TControlActionLinkClass; override;
|
|
procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
|
|
procedure AssignTo(Dest: TPersistent); override;
|
|
procedure BeginUpdate; virtual;
|
|
procedure EndUpdate; virtual;
|
|
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
|
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
|
|
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
|
|
procedure MouseEnter; override;
|
|
procedure MouseLeave; override;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
procedure Paint; override;
|
|
procedure TextChanged; override;
|
|
procedure CalculatePreferredSize(
|
|
var PreferredWidth, PreferredHeight: integer;
|
|
WithThemeSpace: Boolean); override;
|
|
class function GetControlClassDefaultSize: TPoint; override;
|
|
procedure Loaded; override;
|
|
procedure RefreshControl; virtual;
|
|
procedure SetToolBar(NewToolBar: TToolBar);
|
|
procedure UpdateControl; virtual;
|
|
function GetButtonDrawDetail: TThemedElementDetails; virtual;
|
|
procedure SetParent(AParent: TWinControl); override;
|
|
procedure UpdateVisibleToolbar;
|
|
function GroupAllUpAllowed: boolean;
|
|
function DialogChar(var Message: TLMKey): boolean; override;
|
|
procedure SetAutoSize(Value: Boolean); override;
|
|
procedure RealSetText(const AValue: TCaption); override;
|
|
procedure DoAutoSize; override;
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
function CheckMenuDropdown: Boolean; virtual;
|
|
procedure Click; override;
|
|
procedure GetCurrentIcon(var ImageList: TCustomImageList;
|
|
var TheIndex: integer); virtual;
|
|
procedure GetPreferredSize(var PreferredWidth, PreferredHeight: integer;
|
|
Raw: boolean = false;
|
|
WithThemeSpace: boolean = true); override;
|
|
property Index: Integer read GetIndex;
|
|
published
|
|
property Action;
|
|
property AllowAllUp: Boolean read FAllowAllUp write FAllowAllUp default False;
|
|
property AutoSize default False;
|
|
property Caption;
|
|
property Down: Boolean read FDown write SetDown stored IsCheckedStored default False;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property DropdownMenu: TPopupMenu read FDropdownMenu write SetDropdownMenu;
|
|
property Enabled;
|
|
property Grouped: Boolean read FGrouped write SetGrouped default False;
|
|
property Height stored False;
|
|
property ImageIndex: Integer read FImageIndex write SetImageIndex stored IsImageIndexStored default -1;
|
|
property Indeterminate: Boolean read FIndeterminate write SetIndeterminate default False;
|
|
property Marked: Boolean read FMarked write SetMarked default False;
|
|
property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property Wrap: Boolean read FWrap write SetWrap default False;
|
|
property ShowHint;
|
|
property Style: TToolButtonStyle read FStyle write SetStyle default tbsButton;
|
|
property Visible;
|
|
property Width stored IsWidthStored;
|
|
property OnClick;
|
|
property OnContextPopup;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDock;
|
|
property OnEndDrag;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnStartDock;
|
|
property OnStartDrag;
|
|
end;
|
|
|
|
|
|
{ TToolBar }
|
|
|
|
TToolBarFlag = (
|
|
tbfUpdateVisibleBarNeeded,
|
|
tbfPlacingControls
|
|
);
|
|
|
|
TToolBarFlags = set of TToolBarFlag;
|
|
|
|
TToolBar = class(TToolWindow)
|
|
private
|
|
FButtonHeight: Integer;
|
|
FRealizedButtonHeight: integer;
|
|
FButtons: TList;
|
|
FButtonWidth: Integer;
|
|
FDisabledImageChangeLink: TChangeLink;
|
|
FDisabledImages: TCustomImageList;
|
|
FDropDownWidth: integer;
|
|
FDropDownButton: TToolButton;
|
|
FFlat: Boolean;
|
|
FHotImageChangeLink: TChangeLink;
|
|
FHotImages: TCustomImageList;
|
|
FImageChangeLink: TChangeLink;
|
|
FImages: TCustomImageList;
|
|
FIndent: Integer;
|
|
FList: Boolean;
|
|
FNewStyle: Boolean;
|
|
FRowCount: integer;
|
|
FShowCaptions: Boolean;
|
|
FCurrentMenu: TPopupMenu;
|
|
FCurrentMenuAutoFree: boolean;
|
|
FSrcMenu: TMenu;
|
|
FSrcMenuItem: TMenuItem;
|
|
FToolBarFlags: TToolBarFlags;
|
|
FTransparent: Boolean;
|
|
FUpdateCount: Integer;
|
|
FWrapable: Boolean;
|
|
procedure ApplyFontForButtons;
|
|
function GetButton(Index: Integer): TToolButton;
|
|
function GetButtonCount: Integer;
|
|
procedure SetButtonHeight(const AValue: Integer);
|
|
procedure SetButtonWidth(const AValue: Integer);
|
|
procedure SetDisabledImages(const AValue: TCustomImageList);
|
|
procedure SetFlat(const AValue: Boolean);
|
|
procedure SetHotImages(const AValue: TCustomImageList);
|
|
procedure SetImages(const AValue: TCustomImageList);
|
|
procedure SetIndent(const AValue: Integer);
|
|
procedure SetList(const AValue: Boolean);
|
|
procedure SetShowCaptions(const AValue: Boolean);
|
|
procedure SetTransparent(const AValue: Boolean);
|
|
procedure SetWrapable(const AValue: Boolean);
|
|
procedure ToolButtonDown(AButton: TToolButton; NewDown: Boolean);
|
|
procedure ImageListChange(Sender: TObject);
|
|
procedure DisabledImageListChange(Sender: TObject);
|
|
procedure HotImageListChange(Sender: TObject);
|
|
procedure UpdateVisibleBar;
|
|
procedure OnTemporaryPopupMenuClose(Sender: TObject);
|
|
procedure MoveSubMenuItems(SrcMenuItem, DestMenuItem: TMenuItem);
|
|
procedure AddButton(Button: TToolButton);
|
|
procedure RemoveButton(Button: TToolButton);
|
|
function IsVertical: Boolean;
|
|
protected
|
|
class procedure WSRegisterClass; override;
|
|
procedure AdjustClientRect(var ARect: TRect); override;
|
|
class function GetControlClassDefaultSize: TPoint; override;
|
|
procedure DoAutoSize; override;
|
|
procedure CalculatePreferredSize(var PreferredWidth,
|
|
PreferredHeight: integer; WithThemeSpace: Boolean); override;
|
|
function CheckMenuDropdown(Button: TToolButton): Boolean; virtual;
|
|
procedure ClickButton(Button: TToolButton); virtual;
|
|
procedure CreateParams(var Params: TCreateParams); override;
|
|
procedure CreateWnd; override;
|
|
procedure ControlsAligned; override;
|
|
function FindButtonFromAccel(Accel: Word): TToolButton;
|
|
procedure FontChanged(Sender: TObject); override;
|
|
procedure ParentFontChanged; override;
|
|
procedure Loaded; override;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
procedure RepositionButton(Index: Integer);
|
|
procedure RepositionButtons(Index: Integer);
|
|
function WrapButtons(UseWidth: integer;
|
|
var NewWidth, NewHeight: Integer;
|
|
Simulate: boolean): Boolean;
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure FlipChildren(AllLevels: Boolean); override;
|
|
procedure BeginUpdate; virtual;
|
|
procedure EndUpdate; virtual;
|
|
procedure Paint; override;
|
|
procedure SetButtonSize(NewButtonWidth, NewButtonHeight: integer);
|
|
function CanFocus: Boolean; override;
|
|
public
|
|
property ButtonCount: Integer read GetButtonCount;
|
|
property Buttons[Index: Integer]: TToolButton read GetButton;
|
|
property ButtonList: TList read FButtons;
|
|
property RowCount: Integer read FRowCount;
|
|
published
|
|
property Align default alTop;
|
|
property Anchors;
|
|
property AutoSize;
|
|
property BorderSpacing;
|
|
property BorderWidth;
|
|
property ButtonHeight: Integer read FButtonHeight write SetButtonHeight default 22;
|
|
property ButtonWidth: Integer read FButtonWidth write SetButtonWidth default 23;
|
|
property Caption;
|
|
property ChildSizing;
|
|
property Constraints;
|
|
property Color;
|
|
//property Customizable: Boolean read FCustomizable write SetCustomizable default False;
|
|
property DisabledImages: TCustomImageList read FDisabledImages write SetDisabledImages;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property EdgeBorders default [ebTop];
|
|
property EdgeInner;
|
|
property EdgeOuter;
|
|
property Enabled;
|
|
property Flat: Boolean read FFlat write SetFlat default True;
|
|
property Font;
|
|
property Height default 32;
|
|
//property HideClippedButtons: Boolean read FHideClippedButtons write SetHideClippedButtons default False;
|
|
property HotImages: TCustomImageList read FHotImages write SetHotImages;
|
|
property Images: TCustomImageList read FImages write SetImages;
|
|
property Indent: Integer read FIndent write SetIndent default 1;
|
|
property List: Boolean read FList write SetList default False;
|
|
//property Menu: TMainMenu read FMenu write SetMenu;
|
|
property ParentColor;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property ShowCaptions: Boolean read FShowCaptions write SetShowCaptions default False;
|
|
property ShowHint;
|
|
property TabOrder;
|
|
property TabStop;
|
|
property Transparent: Boolean read FTransparent write SetTransparent default False;
|
|
property Visible;
|
|
property Wrapable: Boolean read FWrapable write SetWrapable default True;
|
|
property OnClick;
|
|
property OnContextPopup;
|
|
property OnDblClick;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnMouseEnter;
|
|
property OnMouseLeave;
|
|
property OnResize;
|
|
property OnChangeBounds;
|
|
property OnStartDrag;
|
|
end;
|
|
|
|
|
|
{ TCustomTrackBar }
|
|
|
|
TTrackBarOrientation = (trHorizontal, trVertical);
|
|
TTickMark = (tmBottomRight, tmTopLeft, tmBoth);
|
|
TTickStyle = (tsNone, tsAuto, tsManual);
|
|
TTrackBarScalePos = (trLeft, trRight, trTop, trBottom);
|
|
|
|
TCustomTrackBar = class(TWinControl)
|
|
private
|
|
FOrientation: TTrackBarOrientation;
|
|
FTickMarks: TTickMark;
|
|
FTickStyle: TTickStyle;
|
|
FLineSize: Integer;
|
|
FPageSize: Integer;
|
|
FMin: Integer;
|
|
FMax: Integer;
|
|
FFrequency: Integer;
|
|
FPosition: Integer;
|
|
FScalePos : TTrackBarScalePos;
|
|
FScaleDigits : integer;
|
|
FOnChange: TNotifyEvent;
|
|
procedure SetFrequency(Value: Integer);
|
|
procedure SetLineSize(Value: Integer);
|
|
procedure SetMax(Value: Integer);
|
|
procedure SetMin(Value: Integer);
|
|
procedure SetOrientation(Value: TTrackBarOrientation);
|
|
procedure SetPageSize(Value: Integer);
|
|
procedure SetParams(APosition, AMin, AMax: Integer);
|
|
procedure SetPosition(Value: Integer);
|
|
procedure SetScalePos(Value: TTrackBarScalePos);
|
|
procedure SetTickMarks(Value: TTickMark);
|
|
procedure SetTickStyle(Value: TTickStyle);
|
|
procedure UpdateSelection;
|
|
protected
|
|
class procedure WSRegisterClass; override;
|
|
procedure ApplyChanges;
|
|
procedure DoChange(var msg); message LM_CHANGED;
|
|
procedure FixParams(var APosition, AMin, AMax: Integer);
|
|
class function GetControlClassDefaultSize: TPoint; override;
|
|
procedure InitializeWnd; override;
|
|
procedure Loaded; override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
procedure SetTick(Value: Integer);
|
|
published
|
|
property Frequency: Integer read FFrequency write SetFrequency default 1;
|
|
property LineSize: Integer read FLineSize write SetLineSize default 1;
|
|
property Max: Integer read FMax write SetMax default 10;
|
|
property Min: Integer read FMin write SetMin default 0;
|
|
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
|
property Orientation: TTrackBarOrientation read FOrientation write SetOrientation default trHorizontal;
|
|
property PageSize: Integer read FPageSize write SetPageSize default 2;
|
|
property Position: Integer read FPosition write SetPosition;
|
|
property ScalePos: TTrackBarScalePos read FScalePos write SetScalePos default trTop;
|
|
property TabStop default True;
|
|
property TickMarks: TTickMark read FTickMarks write SetTickMarks default tmBottomRight;
|
|
property TickStyle: TTickStyle read FTickStyle write SetTickStyle default tsAuto;
|
|
end;
|
|
|
|
|
|
{ TTrackBar }
|
|
|
|
TTrackBar = class(TCustomTrackBar)
|
|
published
|
|
property Align;
|
|
property Anchors;
|
|
property BorderSpacing;
|
|
property Constraints;
|
|
property DragCursor;
|
|
property DragMode;
|
|
property Enabled;
|
|
property Frequency;
|
|
property Hint;
|
|
property LineSize;
|
|
property Max;
|
|
property Min;
|
|
property OnChange;
|
|
property OnChangeBounds;
|
|
property OnClick;
|
|
property OnContextPopup;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnMouseDown;
|
|
property OnMouseEnter;
|
|
property OnMouseLeave;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnMouseWheel;
|
|
property OnMouseWheelDown;
|
|
property OnMouseWheelUp;
|
|
property OnKeyDown;
|
|
property OnKeyPress;
|
|
property OnKeyUp;
|
|
property OnResize;
|
|
property OnStartDrag;
|
|
property OnUTF8KeyPress;
|
|
property Orientation;
|
|
property PageSize;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property Position;
|
|
property ScalePos;
|
|
property ShowHint;
|
|
property TabOrder;
|
|
property TabStop;
|
|
property TickMarks;
|
|
property TickStyle;
|
|
property Visible;
|
|
end;
|
|
|
|
{ TTreeNode }
|
|
|
|
type
|
|
TCustomTreeView = class;
|
|
TTreeNodes = class;
|
|
TTreeNode = class;
|
|
|
|
TNodeState = (nsCut, nsDropHilited, nsFocused, nsSelected, nsMultiSelected,
|
|
nsExpanded, nsHasChildren, nsInTree, nsDeleting, nsBound);
|
|
TNodeStates = set of TNodeState;
|
|
TNodeAttachMode = (
|
|
naAdd, // add as last sibling of Destination
|
|
naAddFirst, // add as first sibling of Destination
|
|
naAddChild, // add as last child of Destination
|
|
naAddChildFirst, // add as first child of Destination
|
|
naInsert, // insert in front of Destination
|
|
naInsertBehind // insert behind Destination
|
|
);
|
|
|
|
TAddMode = (taAddFirst, taAdd, taInsert);
|
|
|
|
TTreeNodeArray = ^TTreeNode;
|
|
|
|
ETreeNodeError = class(Exception);
|
|
ETreeViewError = class(ETreeNodeError);
|
|
|
|
const
|
|
NodeAttachModeNames: array[TNodeAttachMode] of string =
|
|
('naAdd', 'naAddFirst', 'naAddChild', 'naAddChildFirst',
|
|
'naInsert', 'naInsertBehind');
|
|
AddModeNames: array[TAddMode] of string =
|
|
('taAddFirst', 'taAdd', 'taInsert');
|
|
LCLStreamID = -7;
|
|
|
|
type
|
|
TTVChangingEvent = procedure(Sender: TObject; Node: TTreeNode;
|
|
var AllowChange: Boolean) of object;
|
|
TTVChangedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
|
|
TTVEditingEvent = procedure(Sender: TObject; Node: TTreeNode;
|
|
var AllowEdit: Boolean) of object;
|
|
TTVEditedEvent = procedure(Sender: TObject; Node: TTreeNode;
|
|
var S: string) of object;
|
|
TTVExpandingEvent = procedure(Sender: TObject; Node: TTreeNode;
|
|
var AllowExpansion: Boolean) of object;
|
|
TTVCollapsingEvent = procedure(Sender: TObject; Node: TTreeNode;
|
|
var AllowCollapse: Boolean) of object;
|
|
TTVExpandedEvent = procedure(Sender: TObject; Node: TTreeNode) of object;
|
|
TTVCompareEvent = procedure(Sender: TObject; Node1, Node2: TTreeNode;
|
|
var Compare: Integer) of object;
|
|
TTVCustomDrawEvent = procedure(Sender: TCustomTreeView; const ARect: TRect;
|
|
var DefaultDraw: Boolean) of object;
|
|
TTVCustomDrawItemEvent = procedure(Sender: TCustomTreeView; Node: TTreeNode;
|
|
State: TCustomDrawState; var DefaultDraw: Boolean) of object;
|
|
TTVAdvancedCustomDrawEvent = procedure(Sender: TCustomTreeView;
|
|
const ARect: TRect; Stage: TCustomDrawStage;
|
|
var DefaultDraw: Boolean) of object;
|
|
TTVAdvancedCustomDrawItemEvent = procedure(Sender: TCustomTreeView;
|
|
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
|
|
var PaintImages, DefaultDraw: Boolean) of object;
|
|
TTVCustomCreateNodeEvent = procedure(Sender: TCustomTreeView; var ATreeNode: TTreenode) of object;
|
|
|
|
TTreeNodeCompare = function(Node1, Node2: TTreeNode): integer of object;
|
|
|
|
TOldTreeNodeInfo = packed record
|
|
ImageIndex: Integer;
|
|
SelectedIndex: Integer;
|
|
StateIndex: Integer;
|
|
OverlayIndex: Integer;
|
|
Data: Pointer;
|
|
Count: Integer;
|
|
Height: integer;
|
|
Expanded: boolean;
|
|
TextLen: integer;
|
|
// here follows the text
|
|
end;
|
|
|
|
TTreeNodeInfo = packed record
|
|
ImageIndex: Integer;
|
|
SelectedIndex: Integer;
|
|
StateIndex: Integer;
|
|
OverlayIndex: Integer;
|
|
Count: Integer;
|
|
Height: integer;
|
|
Expanded: boolean;
|
|
TextLen: integer;
|
|
// here follows the text
|
|
end;
|
|
|
|
// this is the delphi node stream record
|
|
PDelphiNodeInfo = ^TDelphiNodeInfo;
|
|
TDelphiNodeInfo = packed record
|
|
ImageIndex: Integer;
|
|
SelectedIndex: Integer;
|
|
StateIndex: Integer;
|
|
OverlayIndex: Integer;
|
|
Data: Pointer;
|
|
Count: Integer;
|
|
Text: string[255];
|
|
end;
|
|
|
|
{ TTreeNode }
|
|
|
|
TTreeNode = class(TPersistent)
|
|
private
|
|
FOwner: TTreeNodes; // the object, which contains all nodes of the tree
|
|
FCapacity: integer; // size of FItems
|
|
FCount: integer; // # of first level childs in FItems
|
|
FData: Pointer; // custom data
|
|
FHeight: integer; // height in pixels
|
|
FImageIndex: integer;
|
|
FIndex: integer; // index in parent
|
|
FItems: TTreeNodeArray; // first level child nodes
|
|
FNextBrother: TTreeNode; // next sibling
|
|
FNextMultiSelected: TTreeNode;
|
|
FOverlayIndex: Integer;
|
|
FParent: TTreeNode;
|
|
FPrevBrother: TTreeNode; // previous sibling
|
|
FPrevMultiSelected: TTreeNode;
|
|
FSelectedIndex: Integer;
|
|
FStateIndex: Integer;
|
|
FStates: TNodeStates;
|
|
FSubTreeCount: integer;// total of all child nodes and self
|
|
FText: string;
|
|
FTop: integer; // top coordinate
|
|
function AreParentsExpanded: Boolean;
|
|
procedure BindToMultiSelected;
|
|
function CompareCount(CompareMe: Integer): Boolean;
|
|
function DoCanExpand(ExpandIt: Boolean): Boolean;
|
|
procedure DoExpand(ExpandIt: Boolean);
|
|
procedure ExpandItem(ExpandIt: Boolean; Recurse: Boolean);
|
|
function GetAbsoluteIndex: Integer;
|
|
function GetDeleting: Boolean;
|
|
function GetHasChildren: Boolean;
|
|
function GetCount: Integer;
|
|
function GetCut: boolean;
|
|
function GetDropTarget: Boolean;
|
|
function GetExpanded: Boolean;
|
|
function GetFocused: Boolean;
|
|
function GetHeight: integer;
|
|
function GetIndex: Integer;
|
|
function GetItems(AnIndex: Integer): TTreeNode;
|
|
function GetLevel: Integer;
|
|
function GetMultiSelected: Boolean;
|
|
function GetSelected: Boolean;
|
|
function GetState(NodeState: TNodeState): Boolean;
|
|
function GetTreeNodes: TTreeNodes;
|
|
function GetTreeView: TCustomTreeView;
|
|
function GetTop: integer;
|
|
procedure InternalMove(ANode: TTreeNode; AddMode: TAddMode);
|
|
function IsEqual(Node: TTreeNode): Boolean;
|
|
function IsNodeVisible: Boolean;
|
|
function IsNodeHeightFullVisible: Boolean;
|
|
procedure ReadData(Stream: TStream; StreamVersion: integer);
|
|
procedure ReadDelphiData(Stream: TStream; Info: PDelphiNodeInfo);
|
|
procedure SetCut(AValue: Boolean);
|
|
procedure SetData(AValue: Pointer);
|
|
procedure SetDropTarget(AValue: Boolean);
|
|
procedure SetExpanded(AValue: Boolean);
|
|
procedure SetFocused(AValue: Boolean);
|
|
procedure SetHasChildren(AValue: Boolean);
|
|
procedure SetHeight(AValue: integer);
|
|
procedure SetImageIndex(AValue: integer);
|
|
procedure SetIndex(const AValue: Integer);
|
|
procedure SetItems(AnIndex: Integer; AValue: TTreeNode);
|
|
procedure SetMultiSelected(const AValue: Boolean);
|
|
procedure SetOverlayIndex(AValue: Integer);
|
|
procedure SetSelected(AValue: Boolean);
|
|
procedure SetSelectedIndex(AValue: Integer);
|
|
procedure SetStateIndex(AValue: Integer);
|
|
procedure SetText(const S: string);
|
|
procedure Unbind;
|
|
procedure UnbindFromMultiSelected;
|
|
procedure WriteData(Stream: TStream);
|
|
procedure WriteDelphiData(Stream: TStream; Info: PDelphiNodeInfo);
|
|
public
|
|
constructor Create(AnOwner: TTreeNodes);
|
|
function AlphaSort: Boolean;
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure Collapse(Recurse: Boolean);
|
|
function CustomSort(SortProc: TTreeNodeCompare): Boolean;
|
|
function DefaultTreeViewSort(Node1, Node2: TTreeNode): Integer;
|
|
procedure Delete;
|
|
procedure DeleteChildren;
|
|
destructor Destroy; override;
|
|
function DisplayExpandSignLeft: integer;
|
|
function DisplayExpandSignRect: TRect;
|
|
function DisplayExpandSignRight: integer;
|
|
function DisplayIconLeft: integer;
|
|
function DisplayRect(TextOnly: Boolean): TRect;
|
|
function DisplayStateIconLeft: integer;
|
|
function DisplayTextLeft: integer;
|
|
function DisplayTextRight: integer;
|
|
function EditText: Boolean;
|
|
procedure EndEdit(Cancel: Boolean);
|
|
procedure Expand(Recurse: Boolean);
|
|
procedure ExpandParents;
|
|
function Bottom: integer;
|
|
function BottomExpanded: integer;
|
|
function GetParentNodeOfAbsoluteLevel(TheAbsoluteLevel: integer): TTreeNode;
|
|
function GetFirstChild: TTreeNode;
|
|
function GetHandle: THandle;
|
|
function GetLastSibling: TTreeNode;
|
|
function GetLastChild: TTreeNode;
|
|
function GetLastSubChild: TTreeNode;
|
|
function GetNext: TTreeNode;
|
|
function GetNextChild(AValue: TTreeNode): TTreeNode;
|
|
function GetNextExpanded: TTreeNode;
|
|
function GetNextMultiSelected: TTreeNode;
|
|
function GetNextSibling: TTreeNode;
|
|
function GetNextVisible: TTreeNode;
|
|
function GetPrev: TTreeNode;
|
|
function GetPrevChild(AValue: TTreeNode): TTreeNode;
|
|
function GetPrevExpanded: TTreeNode;
|
|
function GetPrevMultiSelected: TTreeNode;
|
|
function GetPrevSibling: TTreeNode;
|
|
function GetPrevVisible: TTreeNode;
|
|
function HasAsParent(AValue: TTreeNode): Boolean;
|
|
function IndexOf(AValue: TTreeNode): Integer;
|
|
function IndexOfText(const NodeText: string): Integer;
|
|
function FindNode(const NodeText: string): TTreeNode;
|
|
function GetTextPath: string;
|
|
procedure MakeVisible;
|
|
procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode); virtual;
|
|
procedure MultiSelectGroup;
|
|
procedure Update;
|
|
procedure ConsistencyCheck;
|
|
procedure WriteDebugReport(const Prefix: string; Recurse: boolean);
|
|
property AbsoluteIndex: Integer read GetAbsoluteIndex;
|
|
property Count: Integer read GetCount;
|
|
property Cut: Boolean read GetCut write SetCut;
|
|
property Data: Pointer read FData write SetData;
|
|
property Deleting: Boolean read GetDeleting;
|
|
property Focused: Boolean read GetFocused write SetFocused;
|
|
property DropTarget: Boolean read GetDropTarget write SetDropTarget;
|
|
property Expanded: Boolean read GetExpanded write SetExpanded;
|
|
property Handle: THandle read GetHandle;
|
|
property HasChildren: Boolean read GetHasChildren write SetHasChildren;
|
|
property Height: integer read GetHeight write SetHeight;
|
|
property ImageIndex: integer read FImageIndex write SetImageIndex default -1;
|
|
property Index: Integer read GetIndex write SetIndex;
|
|
property IsVisible: Boolean read IsNodeVisible;
|
|
property IsFullHeightVisible: Boolean read IsNodeHeightFullVisible;
|
|
property Items[ItemIndex: Integer]: TTreeNode read GetItems write SetItems; default;
|
|
property Level: Integer read GetLevel;
|
|
property MultiSelected: Boolean read GetMultiSelected write SetMultiSelected;
|
|
property OverlayIndex: Integer read FOverlayIndex write SetOverlayIndex default -1;
|
|
property Owner: TTreeNodes read FOwner;
|
|
property Parent: TTreeNode read FParent;
|
|
property Selected: Boolean read GetSelected write SetSelected;
|
|
property SelectedIndex: Integer read FSelectedIndex write SetSelectedIndex default -1;
|
|
property SubTreeCount: integer read FSubTreeCount;
|
|
property StateIndex: Integer read FStateIndex write SetStateIndex default -1;
|
|
property Text: string read FText write SetText;
|
|
property TreeNodes: TTreeNodes read GetTreeNodes;
|
|
property TreeView: TCustomTreeView read GetTreeView;
|
|
property Top: integer read GetTop;
|
|
end;
|
|
|
|
|
|
{ TTreeNodes }
|
|
|
|
PNodeCache = ^TNodeCache;
|
|
TNodeCache = record
|
|
CacheNode: TTreeNode;
|
|
CacheIndex: Integer;
|
|
end;
|
|
|
|
{ TTreeNodes }
|
|
|
|
TTreeNodes = class(TPersistent)
|
|
private
|
|
FCount: integer;
|
|
FFirstMultiSelected: TTreeNode;
|
|
FLastMultiSelected: TTreeNode;
|
|
FKeepCollapsedNodes: boolean;
|
|
FNodeCache: TNodeCache;
|
|
FOwner: TCustomTreeView;
|
|
FTopLvlCapacity: integer;
|
|
FTopLvlCount: integer;
|
|
FTopLvlItems: TTreeNodeArray; // root and root siblings
|
|
FUpdateCount: Integer;
|
|
procedure AddedNode(AValue: TTreeNode);
|
|
procedure ClearCache;
|
|
function GetHandle: THandle;
|
|
function GetNodeFromIndex(Index: Integer): TTreeNode;
|
|
function GetTopLvlItems(Index: integer): TTreeNode;
|
|
procedure GrowTopLvlItems;
|
|
function IndexOfTopLvlItem(Node: TTreeNode): integer;
|
|
procedure MoveTopLvlNode(TopLvlFromIndex, TopLvlToIndex: integer;
|
|
Node: TTreeNode);
|
|
procedure ReadData(Stream: TStream);
|
|
procedure ReadExpandedState(Stream: TStream);
|
|
procedure Repaint(ANode: TTreeNode);
|
|
procedure ShrinkTopLvlItems;
|
|
procedure SetTopLvlItems(Index: integer; AValue: TTreeNode);
|
|
procedure WriteData(Stream: TStream);
|
|
procedure WriteExpandedState(Stream: TStream);
|
|
protected
|
|
function InternalAddObject(Node: TTreeNode; const S: string;
|
|
Data: Pointer; AddMode: TAddMode): TTreeNode;
|
|
procedure DefineProperties(Filer: TFiler); override;
|
|
function GetCount: Integer;
|
|
procedure SetItem(Index: Integer; AValue: TTreeNode);
|
|
procedure SetUpdateState(Updating: Boolean);
|
|
public
|
|
constructor Create(AnOwner: TCustomTreeView);
|
|
destructor Destroy; override;
|
|
function Add(SiblingNode: TTreeNode; const S: string): TTreeNode;
|
|
function AddChild(ParentNode: TTreeNode; const S: string): TTreeNode;
|
|
function AddChildFirst(ParentNode: TTreeNode; const S: string): TTreeNode;
|
|
function AddChildObject(ParentNode: TTreeNode; const S: string;
|
|
Data: Pointer): TTreeNode;
|
|
function AddChildObjectFirst(ParentNode: TTreeNode; const S: string;
|
|
Data: Pointer): TTreeNode;
|
|
function AddFirst(SiblingNode: TTreeNode; const S: string): TTreeNode;
|
|
function AddObject(SiblingNode: TTreeNode; const S: string;
|
|
Data: Pointer): TTreeNode;
|
|
function AddObjectFirst(SiblingNode: TTreeNode; const S: string;
|
|
Data: Pointer): TTreeNode;
|
|
procedure Assign(Source: TPersistent); override;
|
|
procedure BeginUpdate;
|
|
procedure Clear;
|
|
procedure ClearMultiSelection(ClearSelected: boolean = false);
|
|
procedure SelectOnlyThis(Node: TTreeNode);
|
|
function IsMultiSelection: boolean;
|
|
procedure Delete(Node: TTreeNode);
|
|
procedure EndUpdate;
|
|
function GetFirstNode: TTreeNode;
|
|
function GetLastNode: TTreeNode; // last top level node
|
|
function GetLastSubNode: TTreeNode; // absolute last node
|
|
function GetLastExpandedSubNode: TTreeNode; // absolute last node
|
|
function FindTopLvlNode(const NodeText: string): TTreeNode;
|
|
function FindNodeWithText(const NodeText: string): TTreeNode;
|
|
function FindNodeWithData(const NodeData: Pointer): TTreeNode;
|
|
function Insert(NextNode: TTreeNode; const S: string): TTreeNode;
|
|
function InsertObject(NextNode: TTreeNode; const S: string;
|
|
Data: Pointer): TTreeNode;
|
|
function InsertBehind(PrevNode: TTreeNode; const S: string): TTreeNode;
|
|
function InsertObjectBehind(PrevNode: TTreeNode; const S: string;
|
|
Data: Pointer): TTreeNode;
|
|
procedure SortTopLevelNodes(SortProc: TTreeNodeCompare);
|
|
procedure ConsistencyCheck;
|
|
procedure WriteDebugReport(const Prefix: string; AllNodes: boolean);
|
|
property Count: Integer read GetCount;
|
|
property Item[Index: Integer]: TTreeNode read GetNodeFromIndex; default;
|
|
property KeepCollapsedNodes: boolean
|
|
read FKeepCollapsedNodes write FKeepCollapsedNodes;
|
|
property Owner: TCustomTreeView read FOwner;
|
|
property TopLvlCount: integer read FTopLvlCount;
|
|
property TopLvlItems[Index: integer]: TTreeNode
|
|
read GetTopLvlItems write SetTopLvlItems;
|
|
end;
|
|
|
|
|
|
{ TCustomTreeView }
|
|
|
|
TTreeViewState = (
|
|
tvsScrollbarChanged,
|
|
tvsMaxRightNeedsUpdate,
|
|
tvsTopsNeedsUpdate,
|
|
tvsMaxLvlNeedsUpdate,
|
|
tvsTopItemNeedsUpdate,
|
|
tvsBottomItemNeedsUpdate,
|
|
tvsCanvasChanged,
|
|
tvsDragged,
|
|
tvsIsEditing,
|
|
tvsStateChanging,
|
|
tvsManualNotify,
|
|
tvsUpdating,
|
|
tvsPainting,
|
|
tvsMouseCapture,
|
|
tvsWaitForDragging,
|
|
tvsDblClicked,
|
|
tvsTripleClicked,
|
|
tvsQuadClicked,
|
|
tvsSelectionChanged,
|
|
tvsEditOnMouseUp
|
|
);
|
|
TTreeViewStates = set of TTreeViewState;
|
|
|
|
TTreeViewOption = (
|
|
tvoAllowMultiselect,
|
|
tvoAutoExpand,
|
|
tvoAutoInsertMark,
|
|
tvoAutoItemHeight,
|
|
tvoHideSelection,
|
|
tvoHotTrack,
|
|
tvoKeepCollapsedNodes,
|
|
tvoReadOnly,
|
|
tvoRightClickSelect,
|
|
tvoRowSelect,
|
|
tvoShowButtons,
|
|
tvoShowLines,
|
|
tvoShowRoot,
|
|
tvoShowSeparators,
|
|
tvoToolTips,
|
|
tvoNoDoubleClickExpand
|
|
);
|
|
TTreeViewOptions = set of TTreeViewOption;
|
|
|
|
const
|
|
DefaultTreeViewOptions = [tvoShowRoot, tvoShowLines, tvoShowButtons,
|
|
tvoHideSelection, tvoToolTips,
|
|
tvoKeepCollapsedNodes, tvoAutoItemHeight];
|
|
|
|
type
|
|
TTreeViewExpandSignType = (tvestTheme, tvestPlusMinus, tvestArrow);
|
|
TTreeViewInsertMarkType = (
|
|
tvimNone,
|
|
tvimAsFirstChild, // or as root
|
|
tvimAsNextSibling,
|
|
tvimAsPrevSibling);
|
|
|
|
TCustomTreeView = class(TCustomControl)
|
|
private
|
|
FBackgroundColor: TColor;
|
|
FBottomItem: TTreeNode;
|
|
FExpandSignType: TTreeViewExpandSignType;
|
|
FExpandSignSize: integer;
|
|
FDefItemHeight: integer;
|
|
FDragImage: TDragImageList;
|
|
FDragNode: TTreeNode;
|
|
FIndent: integer;
|
|
FImageChangeLink: TChangeLink;
|
|
FImages: TCustomImageList;
|
|
FInsertMarkNode: TTreeNode;
|
|
FInsertMarkType: TTreeViewInsertMarkType;
|
|
FLastDropTarget: TTreeNode;
|
|
FLastHorzScrollInfo: TScrollInfo;
|
|
FLastVertScrollInfo: TScrollInfo;
|
|
FMaxLvl: integer; // maximum level of all nodes
|
|
FMaxRight: integer; // maximum text width of all nodes (needed for horizontal scrolling)
|
|
fMouseDownX: integer;
|
|
fMouseDownY: integer;
|
|
FOnAdvancedCustomDraw: TTVAdvancedCustomDrawEvent;
|
|
FOnAdvancedCustomDrawItem: TTVAdvancedCustomDrawItemEvent;
|
|
FOnChange: TTVChangedEvent;
|
|
FOnChanging: TTVChangingEvent;
|
|
FOnCollapsed: TTVExpandedEvent;
|
|
FOnCollapsing: TTVCollapsingEvent;
|
|
FOnCompare: TTVCompareEvent;
|
|
FOnCustomCreateItem: TTVCustomCreateNodeEvent;
|
|
FOnCustomDraw: TTVCustomDrawEvent;
|
|
FOnCustomDrawItem: TTVCustomDrawItemEvent;
|
|
FOnDeletion: TTVExpandedEvent;
|
|
FOnEditing: TTVEditingEvent;
|
|
FOnEdited: TTVEditedEvent;
|
|
FOnExpanded: TTVExpandedEvent;
|
|
FOnExpanding: TTVExpandingEvent;
|
|
FOnGetImageIndex: TTVExpandedEvent;
|
|
FOnGetSelectedIndex: TTVExpandedEvent;
|
|
FOnSelectionChanged: TNotifyEvent;
|
|
FOptions: TTreeViewOptions;
|
|
FRClickNode: TTreeNode;
|
|
FSaveItems: TStringList;
|
|
FScrollBars: TScrollStyle;
|
|
FScrolledLeft: integer; // horizontal scrolled pixels (hidden pixels at left)
|
|
FScrolledTop: integer; // vertical scrolled pixels (hidden pixels at top)
|
|
FSelectedColor: TColor;
|
|
FSelectedNode: TTreeNode;
|
|
fSelectionChangeEventLock: integer;
|
|
fSeparatorColor: TColor;
|
|
FSortType: TSortType;
|
|
FStateChangeLink: TChangeLink;
|
|
FStateImages: TCustomImageList;
|
|
FStates: TTreeViewStates;
|
|
FTopItem: TTreeNode;
|
|
FTreeLineColor: TColor;
|
|
FTreeLinePenStyle: TPenStyle;
|
|
FExpandSignColor : TColor;
|
|
FTreeNodes: TTreeNodes;
|
|
procedure CanvasChanged(Sender: TObject);
|
|
function GetAutoExpand: boolean;
|
|
function GetBottomItem: TTreeNode;
|
|
function GetDropTarget: TTreeNode;
|
|
function GetHideSelection: boolean;
|
|
function GetHotTrack: boolean;
|
|
function GetKeepCollapsedNodes: boolean;
|
|
function GetReadOnly: boolean;
|
|
function GetRightClickSelect: boolean;
|
|
function GetRowSelect: boolean;
|
|
function GetSelection: TTreeNode;
|
|
function GetShowButtons: boolean;
|
|
function GetShowLines: boolean;
|
|
function GetShowRoot: boolean;
|
|
function GetShowSeparators: boolean;
|
|
function GetToolTips: boolean;
|
|
function GetTopItem: TTreeNode;
|
|
procedure ImageListChange(Sender: TObject);
|
|
procedure OnChangeTimer(Sender: TObject);
|
|
procedure SetAutoExpand(Value: Boolean);
|
|
procedure SetBackgroundColor(Value: TColor);
|
|
procedure SetBottomItem(Value: TTreeNode);
|
|
procedure SetDefaultItemHeight(Value: integer);
|
|
procedure SetExpandSignType(Value: TTreeViewExpandSignType);
|
|
procedure SetDropTarget(Value: TTreeNode);
|
|
procedure SetHideSelection(Value: Boolean);
|
|
procedure SetHotTrack(Value: Boolean);
|
|
procedure SetIndent(Value: Integer);
|
|
procedure SetImages(Value: TCustomImageList);
|
|
procedure SetInsertMarkNode(const AValue: TTreeNode);
|
|
procedure SetInsertMarkType(const AValue: TTreeViewInsertMarkType);
|
|
procedure SetKeepCollapsedNodes(Value: Boolean);
|
|
procedure SetReadOnly(Value: Boolean);
|
|
procedure SetRightClickSelect(Value: Boolean);
|
|
procedure SetRowSelect(Value: Boolean);
|
|
procedure SetScrollBars(const Value: TScrollStyle);
|
|
procedure SetScrolledLeft(AValue: integer);
|
|
procedure SetScrolledTop(AValue: integer);
|
|
procedure SetSelectedColor(Value: TColor);
|
|
procedure SetSelection(Value: TTreeNode);
|
|
procedure SetSeparatorColor(const AValue: TColor);
|
|
procedure SetShowButton(Value: Boolean);
|
|
procedure SetShowLines(Value: Boolean);
|
|
procedure SetShowRoot(Value: Boolean);
|
|
procedure SetShowSeparators(Value: Boolean);
|
|
procedure SetSortType(Value: TSortType);
|
|
procedure SetStateImages(Value: TCustomImageList);
|
|
procedure SetToolTips(Value: Boolean);
|
|
procedure SetTreeLineColor(Value: TColor);
|
|
procedure SetTreeNodes(Value: TTreeNodes);
|
|
procedure SetTopItem(Value: TTreeNode);
|
|
procedure UpdateAllTops;
|
|
procedure UpdateBottomItem;
|
|
procedure UpdateMaxLvl;
|
|
procedure UpdateMaxRight;
|
|
procedure UpdateTopItem;
|
|
procedure UpdateScrollbars;
|
|
procedure InternalSelectionChanged;
|
|
protected
|
|
FChangeTimer: TTimer;
|
|
FEditor: TEdit;
|
|
class procedure WSRegisterClass; override;
|
|
procedure EditorEditingDone(Sender: TObject); virtual;
|
|
procedure EditorKeyDown(Sender: TObject; var Key : Word; Shift : TShiftState); virtual;
|
|
procedure BeginAutoDrag; override;
|
|
procedure BeginEditing;
|
|
function DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean): LRESULT; override;
|
|
function CanChange(Node: TTreeNode): Boolean; virtual;
|
|
function CanCollapse(Node: TTreeNode): Boolean; virtual;
|
|
function CanEdit(Node: TTreeNode): Boolean; virtual;
|
|
function CanExpand(Node: TTreeNode): Boolean; virtual;
|
|
function CreateNode: TTreeNode; virtual;
|
|
function CustomDraw(const ARect: TRect;
|
|
Stage: TCustomDrawStage): Boolean; virtual;
|
|
function CustomDrawItem(Node: TTreeNode; State: TCustomDrawState;
|
|
Stage: TCustomDrawStage; var PaintImages: Boolean): Boolean; virtual;
|
|
function GetDragImages: TDragImageList; override;
|
|
function GetMaxLvl: integer;
|
|
function GetMaxScrollLeft: integer;
|
|
function GetMaxScrollTop: integer;
|
|
function GetNodeAtInternalY(Y: Integer): TTreeNode;
|
|
function GetNodeAtY(Y: Integer): TTreeNode;
|
|
function GetNodeDrawAreaHeight: integer;
|
|
function GetNodeDrawAreaWidth: integer;
|
|
function IsCustomDrawn(Target: TCustomDrawTarget;
|
|
Stage: TCustomDrawStage): Boolean;
|
|
function IsNodeVisible(ANode: TTreeNode): Boolean;
|
|
function IsNodeHeightFullVisible(ANode: TTreeNode): Boolean;
|
|
function IsInsertMarkVisible: boolean; virtual;
|
|
procedure Change(Node: TTreeNode); virtual;
|
|
procedure Collapse(Node: TTreeNode); virtual;
|
|
procedure CreateParams(var Params: TCreateParams); override;
|
|
procedure CreateWnd; override;
|
|
procedure Delete(Node: TTreeNode); virtual;
|
|
procedure DestroyWnd; override;
|
|
procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
|
|
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
|
|
MousePos: TPoint): Boolean; override;
|
|
procedure DoPaint; virtual;
|
|
procedure DoPaintNode(Node: TTreeNode); virtual;
|
|
procedure DoStartDrag(var DragObject: TDragObject); override;
|
|
procedure DragOver(Source: TObject; X,Y: Integer; State: TDragState;
|
|
var Accept: Boolean); override;
|
|
procedure EndEditing(Cancel: boolean = false);
|
|
procedure EnsureNodeIsVisible(ANode: TTreeNode);
|
|
procedure Expand(Node: TTreeNode); virtual;
|
|
procedure GetImageIndex(Node: TTreeNode); virtual;
|
|
procedure GetSelectedIndex(Node: TTreeNode); virtual;
|
|
procedure InitializeWnd; override;
|
|
procedure KeyDown(var Key : Word; Shift : TShiftState); override;
|
|
procedure Loaded; override;
|
|
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
|
|
Integer); override;
|
|
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
|
|
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
override;
|
|
procedure Notification(AComponent: TComponent;
|
|
Operation: TOperation); override;
|
|
procedure Paint; override;
|
|
procedure SetDragMode(Value: TDragMode); override;
|
|
procedure SetOptions(NewOptions: TTreeViewOptions);
|
|
procedure UpdateDefaultItemHeight; virtual;
|
|
procedure WndProc(var Message: TLMessage); override;
|
|
procedure UpdateInsertMark(X,Y: integer); virtual;
|
|
procedure DoSelectionChanged; virtual;
|
|
procedure WMHScroll(var Msg: TLMScroll); message LM_HSCROLL;
|
|
procedure WMVScroll(var Msg: TLMScroll); message LM_VSCROLL;
|
|
procedure WMLButtonDown(var AMessage: TLMLButtonDown); message LM_LBUTTONDOWN;
|
|
procedure WMNotify(var AMessage: TLMNotify); message LM_NOTIFY;
|
|
procedure Resize; override;
|
|
protected
|
|
property AutoExpand: Boolean read GetAutoExpand write SetAutoExpand default False;
|
|
property BorderStyle default bsSingle;
|
|
property HideSelection: Boolean
|
|
read GetHideSelection write SetHideSelection default True;
|
|
property HotTrack: Boolean read GetHotTrack write SetHotTrack default False;
|
|
property Images: TCustomImageList read FImages write SetImages;
|
|
property Indent: Integer read FIndent write SetIndent default 15;
|
|
property Items: TTreeNodes read FTreeNodes write SetTreeNodes;
|
|
property OnAdvancedCustomDraw: TTVAdvancedCustomDrawEvent
|
|
read FOnAdvancedCustomDraw write FOnAdvancedCustomDraw;
|
|
property OnAdvancedCustomDrawItem: TTVAdvancedCustomDrawItemEvent
|
|
read FOnAdvancedCustomDrawItem write FOnAdvancedCustomDrawItem;
|
|
property OnChange: TTVChangedEvent read FOnChange write FOnChange;
|
|
property OnChanging: TTVChangingEvent read FOnChanging write FOnChanging;
|
|
property OnCollapsed: TTVExpandedEvent read FOnCollapsed write FOnCollapsed;
|
|
property OnCollapsing: TTVCollapsingEvent read FOnCollapsing write FOnCollapsing;
|
|
property OnCompare: TTVCompareEvent read FOnCompare write FOnCompare;
|
|
property OnCustomCreateItem: TTVCustomCreateNodeEvent read FOnCustomCreateItem write FOnCustomCreateItem;
|
|
property OnCustomDraw: TTVCustomDrawEvent read FOnCustomDraw write FOnCustomDraw;
|
|
property OnCustomDrawItem: TTVCustomDrawItemEvent
|
|
read FOnCustomDrawItem write FOnCustomDrawItem;
|
|
property OnDeletion: TTVExpandedEvent read FOnDeletion write FOnDeletion;
|
|
property OnEdited: TTVEditedEvent read FOnEdited write FOnEdited;
|
|
property OnEditing: TTVEditingEvent read FOnEditing write FOnEditing;
|
|
property OnExpanded: TTVExpandedEvent read FOnExpanded write FOnExpanded;
|
|
property OnExpanding: TTVExpandingEvent read FOnExpanding write FOnExpanding;
|
|
property OnGetImageIndex: TTVExpandedEvent
|
|
read FOnGetImageIndex write FOnGetImageIndex;
|
|
property OnGetSelectedIndex: TTVExpandedEvent
|
|
read FOnGetSelectedIndex write FOnGetSelectedIndex;
|
|
property OnSelectionChanged: TNotifyEvent
|
|
read FOnSelectionChanged write FOnSelectionChanged;
|
|
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
|
|
property RightClickSelect: Boolean
|
|
read GetRightClickSelect write SetRightClickSelect default False;
|
|
property RowSelect: Boolean read GetRowSelect write SetRowSelect default False;
|
|
property ScrolledLeft: integer read FScrolledLeft write SetScrolledLeft;
|
|
property ScrolledTop: integer read FScrolledTop write SetScrolledTop;
|
|
property ShowButtons: Boolean read GetShowButtons write SetShowButton default True;
|
|
property ShowLines: Boolean read GetShowLines write SetShowLines default True;
|
|
property ShowRoot: Boolean read GetShowRoot write SetShowRoot default True;
|
|
property ShowSeparators: Boolean read GetShowSeparators write SetShowSeparators default True;
|
|
property SortType: TSortType read FSortType write SetSortType default stNone;
|
|
property StateImages: TCustomImageList read FStateImages write SetStateImages;
|
|
property ToolTips: Boolean read GetToolTips write SetToolTips default True;
|
|
public
|
|
constructor Create(AnOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function AlphaSort: Boolean;
|
|
procedure ConsistencyCheck;
|
|
function CustomSort(SortProc: TTreeNodeCompare): Boolean;
|
|
function DefaultTreeViewSort(Node1, Node2: TTreeNode): Integer;
|
|
procedure EraseBackground(DC: HDC); override;
|
|
function GetHitTestInfoAt(X, Y: Integer): THitTests;
|
|
function GetNodeAt(X, Y: Integer): TTreeNode;
|
|
procedure GetInsertMarkAt(X, Y: Integer; var AnInsertMarkNode: TTreeNode;
|
|
var AnInsertMarkType: TTreeViewInsertMarkType);
|
|
procedure SetInsertMark(AnInsertMarkNode: TTreeNode;
|
|
AnInsertMarkType: TTreeViewInsertMarkType);
|
|
procedure SetInsertMarkAt(X,Y: integer); virtual;
|
|
procedure Invalidate; override;
|
|
function IsEditing: Boolean;
|
|
procedure BeginUpdate;
|
|
procedure EndUpdate;
|
|
procedure FullCollapse;
|
|
procedure FullExpand;
|
|
procedure LoadFromFile(const FileName: string);
|
|
procedure LoadFromStream(Stream: TStream);
|
|
procedure SaveToFile(const FileName: string);
|
|
procedure SaveToStream(Stream: TStream);
|
|
procedure WriteDebugReport(const Prefix: string; AllNodes: boolean);
|
|
procedure LockSelectionChangeEvent;
|
|
procedure UnlockSelectionChangeEvent;
|
|
function GetFirstMultiSelected: TTreeNode;
|
|
function SelectionVisible: boolean;
|
|
procedure MakeSelectionVisible;
|
|
public
|
|
property BackgroundColor: TColor
|
|
read FBackgroundColor write SetBackgroundColor default clWindow;
|
|
property BorderWidth default 0;
|
|
property BottomItem: TTreeNode read GetBottomItem write SetBottomItem;
|
|
property DefaultItemHeight: integer
|
|
read FDefItemHeight write SetDefaultItemHeight default 20;
|
|
property DropTarget: TTreeNode read GetDropTarget write SetDropTarget;
|
|
property ExpandSignType: TTreeViewExpandSignType
|
|
read FExpandSignType write SetExpandSignType default tvestTheme;
|
|
property InsertMarkNode: TTreeNode read FInsertMarkNode write SetInsertMarkNode;
|
|
property InsertMarkType: TTreeViewInsertMarkType read FInsertMarkType write SetInsertMarkType;
|
|
property KeepCollapsedNodes: boolean
|
|
read GetKeepCollapsedNodes write SetKeepCollapsedNodes;
|
|
property Options: TTreeViewOptions read FOptions write SetOptions default DefaultTreeViewOptions;
|
|
property ScrollBars: TScrollStyle
|
|
read FScrollBars write SetScrollBars default ssBoth;
|
|
property Selected: TTreeNode read GetSelection write SetSelection;
|
|
property SelectionColor: TColor read FSelectedColor write SetSelectedColor default clHighlight;
|
|
property SeparatorColor: TColor read fSeparatorColor write SetSeparatorColor default clGray;
|
|
property TopItem: TTreeNode read GetTopItem write SetTopItem;
|
|
property TreeLineColor: TColor read FTreeLineColor write FTreeLineColor default clWindowFrame;
|
|
property TreeLinePenStyle: TPenStyle read FTreeLinePenStyle write FTreeLinePenStyle default psPattern;
|
|
property ExpandSignColor: TColor read FExpandSignColor write FExpandSignColor default clWindowFrame;
|
|
published
|
|
property TabStop default true;
|
|
end;
|
|
|
|
|
|
{ TTreeView }
|
|
|
|
TTreeView = class(TCustomTreeView)
|
|
published
|
|
property Align;
|
|
property Anchors;
|
|
property AutoExpand;
|
|
property BorderSpacing;
|
|
//property BiDiMode;
|
|
property BackgroundColor;
|
|
property BorderStyle;
|
|
property BorderWidth;
|
|
property Color;
|
|
property Constraints;
|
|
property DefaultItemHeight;
|
|
property DragKind;
|
|
property DragCursor;
|
|
property DragMode;
|
|
property Enabled;
|
|
property ExpandSignType;
|
|
property Font;
|
|
property HideSelection;
|
|
property HotTrack;
|
|
property Images;
|
|
property Indent;
|
|
//property ParentBiDiMode;
|
|
property ParentColor default False;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property ReadOnly;
|
|
property RightClickSelect;
|
|
property RowSelect;
|
|
property ScrollBars;
|
|
property SelectionColor;
|
|
property ShowButtons;
|
|
property ShowHint;
|
|
property ShowLines;
|
|
property ShowRoot;
|
|
property SortType;
|
|
property StateImages;
|
|
property TabOrder;
|
|
property TabStop default True;
|
|
property Tag;
|
|
property ToolTips;
|
|
property Visible;
|
|
property OnAdvancedCustomDraw;
|
|
property OnAdvancedCustomDrawItem;
|
|
property OnChange;
|
|
property OnChanging;
|
|
property OnClick;
|
|
property OnCollapsed;
|
|
property OnCollapsing;
|
|
property OnCompare;
|
|
property OnContextPopup;
|
|
property OnCustomCreateItem;
|
|
property OnCustomDraw;
|
|
property OnCustomDrawItem;
|
|
property OnDblClick;
|
|
property OnDeletion;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEdited;
|
|
property OnEditing;
|
|
//property OnEndDock;
|
|
property OnEndDrag;
|
|
property OnEnter;
|
|
property OnExit;
|
|
property OnExpanded;
|
|
property OnExpanding;
|
|
property OnGetImageIndex;
|
|
property OnGetSelectedIndex;
|
|
property OnKeyDown;
|
|
property OnKeyPress;
|
|
property OnKeyUp;
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnSelectionChanged;
|
|
property OnShowHint;
|
|
//property OnStartDock;
|
|
property OnStartDrag;
|
|
property OnUTF8KeyPress;
|
|
property Options;
|
|
property Items;
|
|
property TreeLineColor;
|
|
property TreeLinePenStyle;
|
|
property ExpandSignColor;
|
|
end;
|
|
|
|
|
|
{ TTreeNodeExpandedState }
|
|
{ class to store and restore the expanded state of a TTreeView
|
|
The nodes are identified by their Text property.
|
|
|
|
Usage example:
|
|
// save old expanded state
|
|
OldExpanded:=TTreeNodeExpandedState.Create(ATreeView);
|
|
... change a lot of nodes ...
|
|
// restore old expanded state
|
|
OldExpanded.Apply(ATreeView);
|
|
OldExpanded.Free;
|
|
}
|
|
|
|
TTreeNodeExpandedState = class
|
|
NodeText: string;
|
|
Childs: TAvgLvlTree;
|
|
constructor Create(FirstTreeNode: TTreeNode);
|
|
constructor Create(TreeView: TCustomTreeView);
|
|
destructor Destroy; override;
|
|
procedure Clear;
|
|
procedure CreateChildNodes(FirstTreeNode: TTreeNode);
|
|
procedure Apply(FirstTreeNode: TTreeNode);
|
|
procedure Apply(TreeView: TCustomTreeView);
|
|
end;
|
|
|
|
|
|
|
|
TCustomHeaderControl = class;
|
|
|
|
|
|
{ THeaderSection }
|
|
THeaderSectionState =
|
|
(
|
|
hsNormal,
|
|
hsHot,
|
|
hsPressed
|
|
);
|
|
THeaderSection = class(TCollectionItem)
|
|
private
|
|
FAlignment: TAlignment;
|
|
FImageIndex: TImageIndex;
|
|
FMinWidth: Integer;
|
|
FMaxWidth: Integer;
|
|
FState: THeaderSectionState;
|
|
FText: string;
|
|
FVisible: Boolean;
|
|
FWidth: Integer;
|
|
FOriginalIndex: Integer;
|
|
function GetWidth: Integer;
|
|
function GetLeft: Integer;
|
|
function GetRight: Integer;
|
|
procedure SetAlignment(const AValue: TAlignment);
|
|
procedure SetMaxWidth(AValue: Integer);
|
|
procedure SetMinWidth(AValue: Integer);
|
|
procedure SetState(const AValue: THeaderSectionState);
|
|
procedure SetText(const Value: string);
|
|
procedure SetVisible(const AValue: Boolean);
|
|
procedure SetWidth(Value: Integer);
|
|
procedure SetImageIndex(const Value: TImageIndex);
|
|
procedure CheckConstraints;
|
|
public
|
|
constructor Create(ACollection: TCollection); override;
|
|
procedure Assign(Source: TPersistent); override;
|
|
property Left: Integer read GetLeft;
|
|
property Right: Integer read GetRight;
|
|
property State: THeaderSectionState read FState write SetState;
|
|
published
|
|
property Alignment: TAlignment read FAlignment write SetAlignment;
|
|
property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1;
|
|
property MaxWidth: Integer read FMaxWidth write SetMaxWidth default 10000;
|
|
property MinWidth: Integer read FMinWidth write SetMinWidth default 0;
|
|
property Text: string read FText write SetText;
|
|
property Width: Integer read GetWidth write SetWidth;
|
|
property Visible: Boolean read FVisible write SetVisible;
|
|
//index which doesn't change when the user reorders the sections
|
|
property OriginalIndex: Integer read FOriginalIndex;
|
|
end;
|
|
|
|
THeaderSectionClass = class of THeaderSection;
|
|
|
|
|
|
{ THeaderSections }
|
|
|
|
THeaderSections = class(TCollection)
|
|
private
|
|
FHeaderControl: TCustomHeaderControl;
|
|
function GetItem(Index: Integer): THeaderSection;
|
|
procedure SetItem(Index: Integer; Value: THeaderSection);
|
|
protected
|
|
function GetOwner: TPersistent; override;
|
|
procedure Update(Item: TCollectionItem); override;
|
|
public
|
|
constructor Create(HeaderControl: TCustomHeaderControl);
|
|
function Add: THeaderSection;
|
|
function AddItem(Item: THeaderSection; Index: Integer): THeaderSection;
|
|
function Insert(Index: Integer): THeaderSection;
|
|
procedure Delete(Index: Integer);
|
|
property Items[Index: Integer]: THeaderSection read GetItem write SetItem; default;
|
|
end;
|
|
|
|
TSectionTrackState = (tsTrackBegin, tsTrackMove, tsTrackEnd);
|
|
TCustomSectionTrackEvent = procedure(HeaderControl: TCustomHeaderControl; Section: THeaderSection; Width: Integer; State: TSectionTrackState) of object;
|
|
TSectionDragEvent = procedure (Sender: TObject; FromSection, ToSection: THeaderSection;
|
|
var AllowDrag: Boolean) of object;
|
|
TCustomSectionNotifyEvent = procedure(HeaderControl: TCustomHeaderControl;
|
|
Section: THeaderSection) of object;
|
|
TCustomHCCreateSectionClassEvent = procedure(Sender: TCustomHeaderControl;
|
|
var SectionClass: THeaderSectionClass) of object;
|
|
|
|
|
|
{ TCustomHeaderControl }
|
|
|
|
TCustomHeaderControl = class(TCustomControl)
|
|
private
|
|
FDragReorder: boolean;
|
|
FSections: THeaderSections;
|
|
FImages: TCustomImageList;
|
|
FPaintRect: TRect;
|
|
FDown: Boolean;
|
|
FDownPoint: TPoint;
|
|
FTracking, FDragging: Boolean;
|
|
FEndDragSectionIndex: longint;
|
|
FSelectedSection: longint;
|
|
FMouseInControl: Boolean;
|
|
|
|
FOnSectionClick: TCustomSectionNotifyEvent;
|
|
FOnSectionResize: TCustomSectionNotifyEvent;
|
|
FOnSectionTrack: TCustomSectionTrackEvent;
|
|
FOnSectionSeparatorDblClick: TCustomSectionNotifyEvent;
|
|
FOnSectionDrag: TSectionDragEvent;
|
|
FOnSectionEndDrag: TNotifyEvent;
|
|
FOnCreateSectionClass: TCustomHCCreateSectionClassEvent;
|
|
function GetSectionFromOriginalIndex(OriginalIndex: Integer): THeaderSection;
|
|
procedure SetImages(const AValue: TCustomImageList);
|
|
procedure SetSections(const AValue: THeaderSections);
|
|
procedure UpdateSection(Index: Integer);
|
|
procedure UpdateSections;
|
|
protected
|
|
function CreateSection: THeaderSection; virtual;
|
|
function CreateSections: THeaderSections; virtual;
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
procedure SectionClick(Section: THeaderSection); virtual;
|
|
procedure SectionResize(Section: THeaderSection); virtual;
|
|
procedure SectionTrack(Section: THeaderSection; State: TSectionTrackState); virtual;
|
|
procedure SectionSeparatorDblClick(Section: THeaderSection); virtual;
|
|
procedure SectionEndDrag; virtual;
|
|
function SectionDrag(FromSection, ToSection: THeaderSection): Boolean; virtual;
|
|
procedure MouseEnter; override;
|
|
procedure MouseLeave; override;
|
|
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
|
|
X, Y: Integer); override;
|
|
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
|
|
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
|
|
X, Y: Integer); override;
|
|
procedure UpdateState;
|
|
class function GetControlClassDefaultSize: TPoint; override;
|
|
public
|
|
property SectionFromOriginalIndex[OriginalIndex: Integer]: THeaderSection read GetSectionFromOriginalIndex;
|
|
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
|
|
procedure Click; override;
|
|
procedure DblClick; override;
|
|
function GetSectionAt(P: TPoint): Integer;
|
|
procedure Paint; override;
|
|
procedure PaintSection(Index: Integer); virtual;
|
|
published
|
|
property DragReorder: boolean read FDragReorder write FDragReorder;
|
|
property Images: TCustomImageList read FImages write SetImages;
|
|
property Sections: THeaderSections read FSections write SetSections;
|
|
|
|
property OnSectionDrag: TSectionDragEvent read FOnSectionDrag
|
|
write FOnSectionDrag;
|
|
property OnSectionEndDrag: TNotifyEvent read FOnSectionEndDrag write FOnSectionEndDrag;
|
|
property OnSectionClick: TCustomSectionNotifyEvent read FOnSectionClick
|
|
write FOnSectionClick;
|
|
property OnSectionResize: TCustomSectionNotifyEvent read FOnSectionResize
|
|
write FOnSectionResize;
|
|
property OnSectionTrack: TCustomSectionTrackEvent read FOnSectionTrack
|
|
write FOnSectionTrack;
|
|
property OnSectionSeparatorDblClick: TCustomSectionNotifyEvent read FOnSectionSeparatorDblClick
|
|
write FOnSectionSeparatorDblClick;
|
|
property OnCreateSectionClass: TCustomHCCreateSectionClassEvent read FOnCreateSectionClass
|
|
write FOnCreateSectionClass;
|
|
end;
|
|
|
|
|
|
{ THeaderControl }
|
|
|
|
THeaderControl = class(TCustomHeaderControl)
|
|
published
|
|
property Align;
|
|
property Anchors;
|
|
property BiDiMode;
|
|
property BorderWidth;
|
|
property BorderSpacing;
|
|
property DragCursor;
|
|
property DragKind;
|
|
property DragMode;
|
|
property Enabled;
|
|
property Font;
|
|
property Images;
|
|
property Constraints;
|
|
property Sections;
|
|
property ShowHint;
|
|
property ParentBiDiMode;
|
|
property ParentFont;
|
|
property ParentShowHint;
|
|
property PopupMenu;
|
|
property Visible;
|
|
// events
|
|
property OnContextPopup;
|
|
property OnCreateSectionClass;
|
|
property OnDragDrop;
|
|
property OnDragOver;
|
|
property OnEndDock;
|
|
property OnEndDrag;
|
|
property OnMouseDown;
|
|
property OnMouseEnter;
|
|
property OnMouseLeave;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
property OnResize;
|
|
property OnSectionClick;
|
|
property OnSectionResize;
|
|
property OnSectionTrack;
|
|
end;
|
|
|
|
function CompareExpandedNodes(Data1, Data2: Pointer): integer;
|
|
function CompareTextWithExpandedNode(Key, Data: Pointer): integer;
|
|
|
|
procedure Register;
|
|
|
|
implementation
|
|
|
|
// !!! Avoid unit circles. Only add units if really needed.
|
|
uses
|
|
WSComCtrls;
|
|
|
|
const
|
|
ScrollBarWidth = 0;
|
|
AllPanelsParts = [Low(TPanelPart)..High(TPanelPart)];
|
|
|
|
{ Toolbar menu support }
|
|
|
|
procedure Register;
|
|
begin
|
|
RegisterComponents('Common Controls',[TTrackbar,TProgressBar,TTreeView,
|
|
TListView,TStatusBar,TToolBar,TUpDown,TPageControl,TTabControl, THeaderControl]);
|
|
RegisterNoIcon([TToolButton,TTabSheet]);
|
|
end;
|
|
|
|
{$I statusbar.inc}
|
|
{$I statuspanel.inc}
|
|
{$I statuspanels.inc}
|
|
{$I tabsheet.inc}
|
|
{$I pagecontrol.inc}
|
|
{$I tabcontrol.inc}
|
|
{$I listcolumns.inc}
|
|
{$I listcolumn.inc}
|
|
{$I listitem.inc}
|
|
{$I listitems.inc}
|
|
{$I customlistview.inc}
|
|
{$I progressbar.inc}
|
|
{$I customupdown.inc}
|
|
{$I toolbutton.inc}
|
|
{$I toolbar.inc}
|
|
{$I trackbar.inc}
|
|
{$I treeview.inc}
|
|
{$I headercontrol.inc}
|
|
|
|
end.
|