📄 comctrls.pas
字号:
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;
property Items[Index: Integer]: THeaderSection read GetItem write SetItem; default;
end;
TSectionTrackState = (tsTrackBegin, tsTrackMove, tsTrackEnd);
TCustomDrawSectionEvent = procedure(HeaderControl: TCustomHeaderControl;
Section: THeaderSection; const Rect: TRect; Pressed: Boolean) of object;
TCustomSectionNotifyEvent = procedure(HeaderControl: TCustomHeaderControl;
Section: THeaderSection) of object;
TCustomSectionTrackEvent = procedure(HeaderControl: TCustomHeaderControl;
Section: THeaderSection; Width: Integer;
State: TSectionTrackState) of object;
TSectionDragEvent = procedure (Sender: TObject; FromSection, ToSection: THeaderSection;
var AllowDrag: Boolean) of object;
TCustomHCCreateSectionClassEvent = procedure(Sender: TCustomHeaderControl;
var SectionClass: THeaderSectionClass) of object;
THeaderStyle = (hsButtons, hsFlat);
TCustomHeaderControl = class(TWinControl)
private
FSections: THeaderSections;
FSectionStream: TMemoryStream;
FUpdatingSectionOrder,
FSectionDragged: Boolean;
FCanvas: TCanvas;
FFromIndex,
FToIndex: Integer;
FFullDrag: Boolean;
FHotTrack: Boolean;
FDragReorder: Boolean;
FImageChangeLink: TChangeLink;
FImages: TCustomImageList;
FStyle: THeaderStyle;
FTrackSection: THeaderSection;
FTrackWidth: Integer;
FTrackPos: TPoint;
FOnDrawSection: TCustomDrawSectionEvent;
FOnSectionClick: TCustomSectionNotifyEvent;
FOnSectionResize: TCustomSectionNotifyEvent;
FOnSectionTrack: TCustomSectionTrackEvent;
FOnSectionDrag: TSectionDragEvent;
FOnSectionEndDrag: TNotifyEvent;
FOnCreateSectionClass: TCustomHCCreateSectionClassEvent;
function DoSectionDrag(FromSection, ToSection: THeaderSection): Boolean;
procedure DoSectionEndDrag;
procedure ImageListChange(Sender: TObject);
procedure SetDragReorder(const Value: Boolean);
procedure SetFullDrag(Value: Boolean);
procedure SetHotTrack(Value: Boolean);
procedure SetSections(Value: THeaderSections);
procedure SetStyle(Value: THeaderStyle);
procedure UpdateItem(Message, Index: Integer);
procedure UpdateSection(Index: Integer);
procedure UpdateSections;
procedure CMBiDiModeChanged(var Message: TMessage); message CM_BIDIMODECHANGED;
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
protected
function CreateSection: THeaderSection; virtual;
function CreateSections: THeaderSections; virtual;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure DrawSection(Section: THeaderSection; const Rect: TRect;
Pressed: Boolean); dynamic;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure SectionClick(Section: THeaderSection); dynamic;
procedure SectionDrag(FromSection, ToSection: THeaderSection; var AllowDrag: Boolean); dynamic;
procedure SectionEndDrag; dynamic;
procedure SectionResize(Section: THeaderSection); dynamic;
procedure SectionTrack(Section: THeaderSection; Width: Integer;
State: TSectionTrackState); dynamic;
procedure SetImages(Value: TCustomImageList); virtual;
procedure WndProc(var Message: TMessage); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Canvas: TCanvas read FCanvas;
procedure FlipChildren(AllLevels: Boolean); override;
published
property Align default alTop;
property Anchors;
property BiDiMode;
property BorderWidth;
property DragCursor;
property DragKind;
property DragMode;
property DragReorder: Boolean read FDragReorder write SetDragReorder default False;
property FullDrag: Boolean read FFullDrag write SetFullDrag;
property HotTrack: Boolean read FHotTrack write SetHotTrack;
property Enabled;
property Font;
property Images: TCustomImageList read FImages write SetImages;
property Constraints;
property Sections: THeaderSections read FSections write SetSections;
property Style: THeaderStyle read FStyle write SetStyle;
property OnCreateSectionClass: TCustomHCCreateSectionClassEvent read FOnCreateSectionClass
write FOnCreateSectionClass;
property OnDrawSection: TCustomDrawSectionEvent read FOnDrawSection write FOnDrawSection;
property OnSectionClick: TCustomSectionNotifyEvent read FOnSectionClick
write FOnSectionClick;
property OnSectionDrag: TSectionDragEvent read FOnSectionDrag
write FOnSectionDrag;
property OnSectionEndDrag: TNotifyEvent read FOnSectionEndDrag
write FOnSectionEndDrag;
property OnSectionResize: TCustomSectionNotifyEvent read FOnSectionResize
write FOnSectionResize;
property OnSectionTrack: TCustomSectionTrackEvent read FOnSectionTrack
write FOnSectionTrack;
end;
{ THeaderControl }
TDrawSectionEvent = procedure(HeaderControl: THeaderControl;
Section: THeaderSection; const Rect: TRect; Pressed: Boolean) of object;
TSectionNotifyEvent = procedure(HeaderControl: THeaderControl;
Section: THeaderSection) of object;
TSectionTrackEvent = procedure(HeaderControl: THeaderControl;
Section: THeaderSection; Width: Integer;
State: TSectionTrackState) of object;
THCCreateSectionClassEvent = procedure(Sender: THeaderControl;
var SectionClass: THeaderSectionClass) of object;
THeaderControl = class(TCustomHeaderControl)
private
function GetOnDrawSection: TDrawSectionEvent;
function GetOnSectionClick: TSectionNotifyEvent;
function GetOnSectionResize: TSectionNotifyEvent;
function GetOnSectionTrack: TSectionTrackEvent;
procedure SetOnDrawSection(const Value: TDrawSectionEvent);
procedure SetOnSectionClick(const Value: TSectionNotifyEvent);
procedure SetOnSectionResize(const Value: TSectionNotifyEvent);
procedure SetOnSectionTrack(const Value: TSectionTrackEvent);
published
property Align default alTop;
property Anchors;
property BiDiMode;
property BorderWidth;
property DragCursor;
property DragKind;
property DragMode;
property DragReorder;
property Enabled;
property Font;
property FullDrag default True;
property HotTrack default False;
property Images;
property Constraints;
property Sections;
property ShowHint;
property Style default hsButtons;
property ParentBiDiMode;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property Visible;
property OnContextPopup;
property OnCreateSectionClass;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
// Required for backwards compatibility with the old events
property OnDrawSection: TDrawSectionEvent read GetOnDrawSection write SetOnDrawSection;
property OnSectionClick: TSectionNotifyEvent read GetOnSectionClick
write SetOnSectionClick;
property OnSectionResize: TSectionNotifyEvent read GetOnSectionResize
write SetOnSectionResize;
property OnSectionTrack: TSectionTrackEvent read GetOnSectionTrack
write SetOnSectionTrack;
property OnSectionDrag;
property OnSectionEndDrag;
property OnStartDock;
property OnStartDrag;
end;
{ TTreeNode }
TCustomTreeView = class;
TTreeNodes = class;
TNodeState = (nsCut, nsDropHilited, nsFocused, nsSelected, nsExpanded);
TNodeAttachMode = (naAdd, naAddFirst, naAddChild, naAddChildFirst, naInsert);
TAddMode = (taAddFirst, taAdd, taInsert);
PNodeInfo = ^TNodeInfo;
TNodeInfo = packed record
ImageIndex: Integer;
SelectedIndex: Integer;
StateIndex: Integer;
OverlayIndex: Integer;
Data: Pointer;
Count: Integer;
Text: string[255];
end;
TTreeNodeClass = class of TTreeNode;
TTreeNode = class(TPersistent)
private
FOwner: TTreeNodes;
FText: string;
FData: Pointer;
FItemId: HTreeItem;
FImageIndex: TImageIndex;
FSelectedIndex: Integer;
FOverlayIndex: Integer;
FStateIndex: Integer;
FDeleting: Boolean;
FInTree: Boolean;
function CompareCount(CompareMe: Integer): Boolean;
function DoCanExpand(Expand: Boolean): Boolean;
procedure DoExpand(Expand: Boolean);
procedure ExpandItem(Expand: Boolean; Recurse: Boolean);
function GetAbsoluteIndex: Integer;
function GetExpanded: Boolean;
function GetLevel: Integer;
function GetParent: TTreeNode;
function GetChildren: Boolean;
function GetCut: Boolean;
function GetDropTarget: Boolean;
function GetFocused: Boolean;
function GetIndex: Integer;
function GetItem(Index: Integer): TTreeNode;
function GetSelected: Boolean;
function GetCount: Integer;
function GetTreeView: TCustomTreeView;
procedure InternalMove(ParentNode, Node: TTreeNode; HItem: HTreeItem;
AddMode: TAddMode);
function IsEqual(Node: TTreeNode): Boolean;
function IsNodeVisible: Boolean;
procedure ReadData(Stream: TStream; Info: PNodeInfo);
procedure SetChildren(Value: Boolean);
procedure SetCut(Value: Boolean);
procedure SetData(Value: Pointer);
procedure SetDropTarget(Value: Boolean);
procedure SetItem(Index: Integer; Value: TTreeNode);
procedure SetExpanded(Value: Boolean);
procedure SetFocused(Value: Boolean);
procedure SetImageIndex(Value: TImageIndex);
procedure SetOverlayIndex(Value: Integer);
procedure SetSelectedIndex(Value: Integer);
procedure SetSelected(Value: Boolean);
procedure SetStateIndex(Value: Integer);
procedure SetText(const S: string);
procedure WriteData(Stream: TStream; Info: PNodeInfo);
protected
function GetState(NodeState: TNodeState): Boolean;
procedure SetState(NodeState: TNodeState; Value: Boolean);
procedure SetSelectedBit(Value: Boolean);
public
constructor Create(AOwner: TTreeNodes);
destructor Destroy; override;
function AlphaSort(ARecurse: Boolean = False): Boolean;
procedure Assign(Source: TPersistent); override;
procedure Collapse(Recurse: Boolean);
function CustomSort(SortProc: TTVCompare; Data: Longint; ARecurse: Boolean = False): Boolean;
procedure Delete;
procedure DeleteChildren;
function DisplayRect(TextOnly: Boolean): TRect;
function EditText: Boolean;
procedure EndEdit(Cancel: Boolean);
procedure Expand(Recurse: Boolean);
function getFirstChild: TTreeNode; {GetFirstChild conflicts with C++ macro}
function GetHandle: HWND;
function GetLastChild: TTreeNode;
function GetNext: TTreeNode;
function GetNextChild(Value: TTreeNode): TTreeNode;
function getNextSibling: TTreeNode; {GetNextSibling conflicts with C++ macro}
function GetNextVisible: TTreeNode;
function GetPrev: TTreeNode;
function GetPrevChild(Value: TTreeNode): TTreeNode;
function getPrevSibling: TTreeNode; {GetPrevSibling conflicts with a C++ macro}
function GetPrevVisible: TTreeNode;
function HasAsParent(Value: TTreeNode): Boolean;
function IndexOf(Value: TTreeNode): Integer;
procedure MakeVisible;
procedure MoveTo(Destination: TTreeNode; Mode: TNodeAttachMode); virtual;
property AbsoluteIndex: Integer read GetAbsoluteIndex;
function IsFirstNode: Boolean;
property Count: Integer read GetCount;
property Cut: Boolean read GetCut write SetCut;
property Data: Pointer read FData write SetData;
property Deleting: Boolean read FDeleting;
property Focused: Boolean read GetFocused write SetFocused;
property DropTarget: Boolean read GetDropTarget write SetDropTarget;
property Selected: Boolean read GetSelected write SetSelected;
property Expanded: Boolean read GetExpanded write SetExpanded;
property Handle: HWND read GetHandle;
property HasChildren: Boolean read GetChildren write SetChildren;
property ImageIndex: TImageIndex read FImageIndex write SetImageIndex;
property Index: Integer read GetIndex;
property IsVisible: Boolean read IsNodeVisible;
property Item[Index: Integer]: TTreeNode read GetItem write SetItem; default;
property ItemId: HTreeItem read FItemId;
property Level: Integer read GetLevel;
property OverlayIndex: Integer read FOverlayIndex write SetOverlayIndex;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -