| Class TCustomTreeViewEx (unit TreeVwEx) |
TCustomTreeView
| Constructors |
constructor Create(AOwner: TComponent);| Functions |
procedure Delete;
procedure DeleteNode(Node: TTreeNode);
destructor Destroy;
procedure Insert(AsChild: Boolean);
function IsRootNode(Node: TTreeNode): Boolean;if (FDisableCount = 0) and (Selected <> nil) then Selected.
function IsSingleRootNode(Node: TTreeNode): Boolean;This function was improved by Zlatko Ivankovic: THANKS!
function MoveNode(Source, Destination: TTreeNode;
Mode: TNodeAttachMode): Boolean;
function CanDelete(Node: TTreeNode): Boolean;
function CanEdit(Node: TTreeNode): Boolean;
function DoDelete(Node: TTreeNode): Boolean;
procedure DoStartDrag(var DragObject: TDragObject);
function DragAllowed(Node: TTreeNode): Boolean;
procedure DragCanceled;
procedure DragDrop(Source: TObject; X, Y: Integer);
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
var Accept: Boolean);
procedure Expand(Node: TTreeNode);
function GetDeleteQuestion(Node: TTreeNode): string;
function GetDragImages: TCustomImageList;
procedure InternalDeleteNode(Node: TTreeNode;
AskForDeleteAll: Boolean; var DeleteAll, Canceled: Boolean;
IsRecursiveCall: Boolean);
procedure KeyDown(var Key: Word; Shift: TShiftState);
procedure KillAllTimer;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
procedure MouseMove(Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
function ShowDeletePrompt(Node: TTreeNode;
var DeleteAll: Boolean; ShowDeleteAllButton: Boolean): Boolean;
procedure WndProc(var Message: TMessage);
procedure CMDrag(var Message: TCMDrag);
procedure CNNotify(var Message: TWMNotify);
procedure DoDragOver(Source: TDragObject; X, Y: Integer;
PossibleDrop: Boolean);
procedure DoScroll(Node: TTreeNode; MouseX, MouseY: Integer);
function MultipleRootsAllowed: Boolean;
procedure WMChar(var Message: TWMKeyDown);
procedure WMRButtonUp(var Message: TWMRButtonUp);
procedure WMTimer(var Msg: TWMTimer);| Properties |
property Align :
property BorderStyle :
property Color :
property Ctl3D :
property DragCursor :
property DragImageShow : TTVDragImageShow
property DragMode :
property Enabled :
property Font :
property HideSelection :
property IgnoreWMChars : TIgnoreWMChars
property Images :
property Indent :
property Items :
property Options : TTreeViewExOptions
property ParentColor :
property ParentCtl3D :
property ParentFont :
property ParentShowHint :
property PopupMenu :
property ReadOnly :
property RSelected : TTreeNode
property ShowButtons :
property ShowHint :
property ShowLines :
property ShowRoot :
property SortType :
property StateImages :
property TabOrder :
property TabStop :
property Visible : | Events |
event OnChange :
event OnChanging :
event OnClick :
event OnCollapsed :
event OnCollapsing :
event OnCompare :
event OnDblClick :
event OnDeleting : TTVDeletingEvent
event OnDeletion :
event OnDragDrop :
event OnDragging : TTVDraggingEvent
event OnDragOver :
event OnEdited :
event OnEditing :
event OnEndDrag :
event OnEnter :
event OnExit :
event OnExpanded :
event OnExpanding :
event OnGetImageIndex :
event OnGetSelectedIndex :
event OnKeyDown :
event OnKeyPress :
event OnKeyUp :
event OnMouseDown :
event OnMouseMove :
event OnMouseSelect : TNotifyEvent
event OnMouseUp :
event OnStartDrag : | Variables |
FDisableCount : Integer;
FRSelected : TTreeNode;
FDelRootID : LongInt;
FDontAcceptLastPossibleDropTarget : Boolean;
FDragImage : TImageList;
FDragImageShow : TTVDragImageShow;
FDragScrollTickCount : Integer;
FIgnoreWMChars : TIgnoreWMChars;
FLastPossibleDropTarget : TTreeNode;
FLMouseDownTickCount : Integer;
FMouseSelectTimer : Longint;
FOnDeleting : TTVDeletingEvent;
FOnDragging : TTVDraggingEvent;
FOnMouseSelect : TNotifyEvent;
FOptions : TTreeViewExOptions;
FScrollTimer : Longint;
FState : TTreeViewExStates;| Constructors |
constructor Create(AOwner: TComponent);TCustomTreeViewEx ----------------------------------------------------------
| Functions |
procedure Delete;
procedure DeleteNode(Node: TTreeNode);
destructor Destroy;
procedure Insert(AsChild: Boolean);
function IsRootNode(Node: TTreeNode): Boolean;IsRootNode is true if the node has no parent:
if (FDisableCount = 0) and (Selected <> nil) then Selected.MakeVisible;
function IsSingleRootNode(Node: TTreeNode): Boolean;IsSingleRootNode is true if the node is the only one without parent:
This function was improved by Zlatko Ivankovic: THANKS!
function MoveNode(Source, Destination: TTreeNode;
Mode: TNodeAttachMode): Boolean;htNowhere, htOnIndent,
function CanDelete(Node: TTreeNode): Boolean;Original IsSingleRootNode: Look at this, and you will see how elegant the above solution from Zlatko Ivankovic is: function TCustomTreeViewEx.IsSingleRootNode(Node: TTreeNode): Boolean; var i: Integer; begin Result := false; if not IsRootNode(Node) then exit; for i := 0 to Items.Count - 1 do if (Items[i] <> Node) and IsRootNode(Items[i]) then exit; { found another root } Result := true; end;
function CanEdit(Node: TTreeNode): Boolean;
function DoDelete(Node: TTreeNode): Boolean;
procedure DoStartDrag(var DragObject: TDragObject);Allow PopupMenu if CNNotify was called with NM_RCLICK:
function DragAllowed(Node: TTreeNode): Boolean;
procedure DragCanceled;DestinationNode is a candidate to get the new parent of the dragged node
procedure DragDrop(Source: TObject; X, Y: Integer);
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
var Accept: Boolean);
procedure Expand(Node: TTreeNode);
function GetDeleteQuestion(Node: TTreeNode): string;
function GetDragImages: TCustomImageList;This is why I have copied this part from TCustomTreeView: // SetDragImage(0, 2, 2); By calling SetDragImage, the original procedure sets the ImageList.Dragging property to true. If no real drag happens (no mouse move), the ImageList will call ShowCursor(True) without a call of ShowCursor(False) before - so the cursor remains visible while dragging. This is a bug of TCustomImageList (in Delphi 2.0, I don't know if in D3 too), but it is not possible to overwrite TCustomImageList to make it bugfree.
procedure InternalDeleteNode(Node: TTreeNode;
AskForDeleteAll: Boolean; var DeleteAll, Canceled: Boolean;
IsRecursiveCall: Boolean);
procedure KeyDown(var Key: Word; Shift: TShiftState);
procedure KillAllTimer;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
procedure MouseMove(Shift: TShiftState; X, Y: Integer);maybe it becomes a doubleclick, wait a little bit:
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
function ShowDeletePrompt(Node: TTreeNode;
var DeleteAll: Boolean; ShowDeleteAllButton: Boolean): Boolean;
procedure WndProc(var Message: TMessage);Message.Result := 1;
procedure CMDrag(var Message: TCMDrag);with WMMouse do begin Msg := WM_MOUSEMOVE; Keys := 0; Result := 0; Pos.X := MouseX; Pos.Y := MouseY; end; LastDragSource.MouseMsg(WMMouse); private >:-(
procedure CNNotify(var Message: TWMNotify);no PopupMenu anyway
procedure DoDragOver(Source: TDragObject; X, Y: Integer;
PossibleDrop: Boolean);if PossibleDrop and FDontAcceptLastPossibleDropTarget then Selected.DropTarget := true;
procedure DoScroll(Node: TTreeNode; MouseX, MouseY: Integer);case
function MultipleRootsAllowed: Boolean;
procedure WMChar(var Message: TWMKeyDown);bugfix part 2:
procedure WMRButtonUp(var Message: TWMRButtonUp);make changes of the tree invisible
procedure WMTimer(var Msg: TWMTimer);, htOnIcon, htOnIndent, htOnRight
| Properties |
property Align :
property BorderStyle :
property Color :
property Ctl3D :
property DragCursor :
property DragImageShow : TTVDragImageShowDragImageShow: tvdisDefault: Show a dragimage if the Images property is not nil tvdisAlways: Show a dragimage even if Images is nil (text only) tvdisNever: No dragimage anyway
property DragMode :
property Enabled :
property Font :
property HideSelection :
property IgnoreWMChars : TIgnoreWMChars
property Images :
property Indent :
property Items :
property Options : TTreeViewExOptionspossible published:
property ParentColor :
property ParentCtl3D :
property ParentFont :
property ParentShowHint :
property PopupMenu :
property ReadOnly :
property RSelected : TTreeNodeThe last node that was clicked with the right mouse-button:
property ShowButtons : possible published, inherited from TCustomTreeView:
property ShowHint :
property ShowLines :
property ShowRoot :
property SortType :
property StateImages :
property TabOrder :
property TabStop :
property Visible : | Events |
event OnChange :
event OnChanging :
event OnClick :
event OnCollapsed :
event OnCollapsing :
event OnCompare :
event OnDblClick :
event OnDeleting : TTVDeletingEventCalled before the deleting of a node starts:
event OnDeletion :
event OnDragDrop :
event OnDragging : TTVDraggingEventpossible published: } { Called before the dragging of a node starts:
event OnDragOver :
event OnEdited :
event OnEditing :
event OnEndDrag :
event OnEnter :
event OnExit :
event OnExpanded :
event OnExpanding :
event OnGetImageIndex :
event OnGetSelectedIndex :
event OnKeyDown :
event OnKeyPress :
event OnKeyUp :
event OnMouseDown :
event OnMouseMove :
event OnMouseSelect : TNotifyEvent
event OnMouseUp :
event OnStartDrag : | Variables |
FDisableCount : Integer;
FRSelected : TTreeNode;
FDelRootID : LongInt;
FDontAcceptLastPossibleDropTarget : Boolean;
FDragImage : TImageList;
FDragImageShow : TTVDragImageShow;
FDragScrollTickCount : Integer;
FIgnoreWMChars : TIgnoreWMChars;
FLastPossibleDropTarget : TTreeNode;
FLMouseDownTickCount : Integer;
FMouseSelectTimer : Longint;
FOnDeleting : TTVDeletingEvent;
FOnDragging : TTVDraggingEvent;
FOnMouseSelect : TNotifyEvent;
FOptions : TTreeViewExOptions;
FScrollTimer : Longint;
FState : TTreeViewExStates;