Class TSystemTreeView (unit SystemTreeView)

Inherits from

TCustomTreeView

Constructors


constructor Create(AOwner: TComponent);

****************************************************************************** Create:


Functions

function AddNewNode(const ParentNode: TTreeNode; const NodeName: string; SelectNewNode: boolean): boolean;


function DeleteNode(const Node: TTreeNode): boolean;

Don't forget to free the OLE string

destructor Destroy;

Create} (******************************************************************************* Destroy:

function DisplayContextMenu(Node: TTreeNode; Where: TPoint): boolean;

****************************************************************************** DisplayContextMenu:

function GetNodePath(const Node: TTreeNode): string;

is it file that the user selected?

function RenameNode(const Node: TTreeNode; const NewName: string): boolean;

Useful functions for applications.

procedure ResetNode(const Node: TTreeNode);


procedure ResetTreeView;

****************************************************************************** ResetTreeView:

procedure ThreadDone(Sender: TObject);

it will destroy itself.

procedure WatchDirectoryForChanges(const ANode: TTreeNode);


function AddNode(const ShellFolder: IShellFolder; FQ_IDList, IDList: PItemIDList; const ParentNode: TTreeNode): TTreeNode;

event for this?

****************************************************************************** AddNode:


function AlphaSort: Boolean;

CustomSort

function CanEdit(Node: TTreeNode): boolean;

****************************************************************************** CanEdit - 29/8/96 (By Thomas AW Brown)

function CanExpand(Node: TTreeNode): boolean;

CNNotify} (******************************************************************************* CanExpand:

procedure Change(Node: TTreeNode);


procedure CNNotify(var Message: TWMNotify);

****************************************************************************** CNNotify: Trap notification messages sent to the window.

procedure CreateWnd;

Destroy

function CustomSort(SortProc: TTVCompare; Data: Longint): Boolean;


procedure DeleteItem(Node: TTreeNode);

Helpers Why isn't there one of these in TTreeView????

CanExpand} (******************************************************************************* DeleteItem:


procedure DestroyWnd;

If we are loading object from stream (form file), we have to wait until everything is loaded before populating the list.

procedure DoStartDrag(var DragObject: TDragObject);


procedure Edit(const Item: TTVItem);

****************************************************************************** Edit - 29/8/96 (By Thomas AW Brown) - 11/9/96 Moved guts of it to RenameNode so it could be used programatically.

procedure Expand(Node: TTreeNode);


function FindNodeFromID(AnID: PItemIDList): TTreeNode;

Searches the tree for a fully qualified PIDL, expanding as it finds nodes that match.

function GetItemData(Index: integer): TFolderItemData;

These two do the same thing, just take different parameters.

function GetNodeData(Node: TTreeNode): TFolderItemData;


function GetNodeFromItem(const Item: TTVItem): TTreeNode;

DeleteItem

procedure Loaded;

The window is only being recreated.

procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);


procedure SetCustomDir(const Val: string);


procedure SetCustomDirCaption(const Val: string);


procedure SetListView(Val: TSystemListView);

SetRootFolder

procedure SetRootFolder(Val: TRootFolder);

Property methods.

procedure SetShowFiles(Val: boolean);


function AddItemData(ItemFolder: IShellFolder; aIDList, aFQ_IDList: PItemIDList; Attrs: UINT): TFolderItemData;

AddNode} (******************************************************************************* AddItemData:

function EnumerateFolders(const ShellFolder: IShellFolder; const ParentNode: TTreeNode): boolean;

ResetTreeView} (******************************************************************************* EnumerateFolders:

procedure FreeAllItemData;

FreeItemData} (******************************************************************************* FreeAllItemData:

procedure FreeItemData(Item: TTreeNode);

AddItemDta} (******************************************************************************* FreeItemData:

function GetFolderID: integer;


function GetIDFromPath(const ShellFolder: IShellFolder; const APath: string; var ID: PItemIDList): boolean;


function GetSelection: string;

We've finished loading, we can populate the tree now.

function GetValidHandle: HWND;

DoDragDrop

procedure SetSelection(const ASel: string);

FindNodeFromID This will work ONLY with files or directories.

Properties

property Align :


property BorderStyle :


property Color :


property Ctl3D :


property CustomDir : string


property CustomDirCaption : string


property DragCursor :


property DragMode :


property Enabled :


property ExpandRoot : boolean


property Font :


property HideSelection :


property Indent :


property Items :


property ListView : TSystemListView


property ParentColor :


property ParentCtl3D :


property ParentFont :


property ParentShowHint :


property ReadOnly :


property RootFolder : TRootFolder


property Selection : string


property ShowButtons :

Publish protected properties.

property ShowFiles : boolean


property ShowHiddenDirs : boolean


property ShowHint :


property ShowLines :


property ShowRoot :


property TabOrder :


property TabStop :


property Visible :


property ShowErrorsInMsgBox : boolean


Events

event OnChange :


event OnChanging :


event OnClick :


event OnCollapsed :


event OnCollapsing :


event OnCompare :


event OnDblClick :


event OnDeletion :


event OnDragDrop :


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 OnMouseUp :


event OnStartDrag :


Variables

FCThread : TFileChangeThread;


FCustomDir : string;


FCustomDirCaption : string;


FExpandRoot : boolean;


FListView : TSystemListView;


FRecreatingWnd : boolean;


FRootFolder : TRootFolder;


FShowErrorsInMsgBox : boolean;


FShowFiles : boolean;


FShowHiddenDirs : boolean;


WatchedNode : TTreeNode;



Constructors


constructor Create(AOwner: TComponent);

****************************************************************************** Create:


Functions


function AddNewNode(const ParentNode: TTreeNode; const NodeName: string; SelectNewNode: boolean): boolean;


function DeleteNode(const Node: TTreeNode): boolean;

Don't forget to free the OLE string


destructor Destroy;

Create} (******************************************************************************* Destroy:


function DisplayContextMenu(Node: TTreeNode; Where: TPoint): boolean;

****************************************************************************** DisplayContextMenu:


function GetNodePath(const Node: TTreeNode): string;

is it file that the user selected?


function RenameNode(const Node: TTreeNode; const NewName: string): boolean;

Useful functions for applications. These modify permanently, not just the node. i.e. if you rename 'My Computer' to 'Crasher', it is renamed system wide, not just in your app. If you delete the 'C:\WINDOWS' folder, you are in deep trouble.


procedure ResetNode(const Node: TTreeNode);


procedure ResetTreeView;

****************************************************************************** ResetTreeView:


procedure ThreadDone(Sender: TObject);

it will destroy itself.


procedure WatchDirectoryForChanges(const ANode: TTreeNode);


function AddNode(const ShellFolder: IShellFolder; FQ_IDList, IDList: PItemIDList; const ParentNode: TTreeNode): TTreeNode;

event for this?

****************************************************************************** AddNode:


function AlphaSort: Boolean;

CustomSort


function CanEdit(Node: TTreeNode): boolean;

****************************************************************************** CanEdit - 29/8/96 (By Thomas AW Brown)


function CanExpand(Node: TTreeNode): boolean;

CNNotify} (******************************************************************************* CanExpand:


procedure Change(Node: TTreeNode);


procedure CNNotify(var Message: TWMNotify);

****************************************************************************** CNNotify: Trap notification messages sent to the window. This is damn silly, but it's the only way we can know when a node is being deleted. I think it's an oversight in the VCL, so until Borland fixes it, just live with it.


procedure CreateWnd;

Destroy


function CustomSort(SortProc: TTVCompare; Data: Longint): Boolean;


procedure DeleteItem(Node: TTreeNode);

Helpers Why isn't there one of these in TTreeView????

CanExpand} (******************************************************************************* DeleteItem:


procedure DestroyWnd;

If we are loading object from stream (form file), we have to wait until everything is loaded before populating the list. If we are not loading, i.e. the component was created dynamically or was just dropped on a form, we need to populate it now since the Loaded method will never get called.


procedure DoStartDrag(var DragObject: TDragObject);


procedure Edit(const Item: TTVItem);

****************************************************************************** Edit - 29/8/96 (By Thomas AW Brown) - 11/9/96 Moved guts of it to RenameNode so it could be used programatically. (bds)


procedure Expand(Node: TTreeNode);


function FindNodeFromID(AnID: PItemIDList): TTreeNode;

Searches the tree for a fully qualified PIDL, expanding as it finds nodes that match.


function GetItemData(Index: integer): TFolderItemData;

These two do the same thing, just take different parameters.

try


function GetNodeData(Node: TTreeNode): TFolderItemData;


function GetNodeFromItem(const Item: TTVItem): TTreeNode;

DeleteItem


procedure Loaded;

The window is only being recreated. See CNNotify method.


procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);


procedure SetCustomDir(const Val: string);


procedure SetCustomDirCaption(const Val: string);


procedure SetListView(Val: TSystemListView);

SetRootFolder


procedure SetRootFolder(Val: TRootFolder);

Property methods.

FreeAllItemData} (******************************************************************************* SetRootFolder:


procedure SetShowFiles(Val: boolean);


function AddItemData(ItemFolder: IShellFolder; aIDList, aFQ_IDList: PItemIDList; Attrs: UINT): TFolderItemData;

AddNode} (******************************************************************************* AddItemData:


function EnumerateFolders(const ShellFolder: IShellFolder; const ParentNode: TTreeNode): boolean;

ResetTreeView} (******************************************************************************* EnumerateFolders:


procedure FreeAllItemData;

FreeItemData} (******************************************************************************* FreeAllItemData:


procedure FreeItemData(Item: TTreeNode);

AddItemDta} (******************************************************************************* FreeItemData:


function GetFolderID: integer;


function GetIDFromPath(const ShellFolder: IShellFolder; const APath: string; var ID: PItemIDList): boolean;


function GetSelection: string;

We've finished loading, we can populate the tree now.


function GetValidHandle: HWND;

DoDragDrop


procedure SetSelection(const ASel: string);

FindNodeFromID This will work ONLY with files or directories. Currenly there is no way of passing stuff like the Control Panel node.


Properties


property Align :


property BorderStyle :


property Color :


property Ctl3D :


property CustomDir : string


property CustomDirCaption : string


property DragCursor :


property DragMode :


property Enabled :


property ExpandRoot : boolean


property Font :


property HideSelection :


property Indent :


property Items :


property ListView : TSystemListView


property ParentColor :


property ParentCtl3D :


property ParentFont :


property ParentShowHint :


property ReadOnly :


property RootFolder : TRootFolder


property Selection : string


property ShowButtons :

Publish protected properties.


property ShowFiles : boolean


property ShowHiddenDirs : boolean


property ShowHint :


property ShowLines :


property ShowRoot :


property TabOrder :


property TabStop :


property Visible :


property ShowErrorsInMsgBox : boolean


Events


event OnChange :


event OnChanging :


event OnClick :


event OnCollapsed :


event OnCollapsing :


event OnCompare :


event OnDblClick :


event OnDeletion :


event OnDragDrop :


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 OnMouseUp :


event OnStartDrag :


Variables


FCThread : TFileChangeThread;


FCustomDir : string;


FCustomDirCaption : string;


FExpandRoot : boolean;


FListView : TSystemListView;


FRecreatingWnd : boolean;


FRootFolder : TRootFolder;


FShowErrorsInMsgBox : boolean;


FShowFiles : boolean;


FShowHiddenDirs : boolean;


WatchedNode : TTreeNode;