Mega Code Archive

 
Categories / Delphi / VCL
 

An Descendant from TTreView which shows the hierarchy of LAN

Title: An Descendant from TTreView which shows the hierarchy of LAN Question: The component shows you LAN resources which are represented as a tree. How to use ? Set Component on Form and assign property Active in True Enjoy ! Answer: unit mmLanTreeView; interface uses Windows,Messages,SysUtils, Classes, Controls, ComCtrls; type TmmLanTreeView = class(TCustomTreeView) private FActive: Boolean; FOnProgress: TNotifyEvent; FOnEndScan: TNotifyEvent; procedure SetActive(const Value: Boolean); procedure SetOnProgress(const Value: TNotifyEvent); procedure SetOnEndScan(const Value: TNotifyEvent); { Private declarations } protected procedure LoadLevel(aRoot:pointer;aRootTree:TTreeNode); { Protected declarations } public property Items; procedure RefreshTree; { Public declarations } published property OnProgress:TNotifyEvent read FOnProgress write SetOnProgress; property Active:Boolean read FActive write SetActive; property OnEndScan:TNotifyEvent read FOnEndScan write SetOnEndScan; property Align; property Anchors; property AutoExpand; property BevelEdges; property BevelInner; property BevelOuter; property BevelKind default bkNone; property BevelWidth; property BiDiMode; property BorderStyle; property BorderWidth; property ChangeDelay; property Color; property Ctl3D; property Constraints; property DragKind; property DragCursor; property DragMode; property Enabled; property Font; property HideSelection; property HotTrack; { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('mmVCL', [TmmLanTreeView]); end; { TmmLanTreeView } procedure TmmLanTreeView.LoadLevel(ARoot: Pointer; ARootTree: TTreeNode); var Buffer: array [1..512] of TNetResource; hEnum,Count,BufSize:Cardinal; s:String; vNode:TTreeNode; i:integer; R:TNetResource; vData:^TNetResource; begin Count:=512; BufSize:=SizeOf(TNetResource)*512; if WNetOpenEnumA(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,aRoot,HEnum)=NO_ERROR then begin while WNetEnumResourceA(HEnum,Count,@Buffer,BufSize)=NO_ERROR do for i:=1 to Count do begin s:=String(Buffer[i].lpRemoteName); if s='' then break; vNode:=Items.AddChild(aRootTree,s); if Assigned(FOnProgress) then FOnProgress(Self); if not Active then Exit; with vNode do begin New(vData); vData^:=Buffer[i]; Data:=vData; if (Buffer[i].dwUsage=RESOURCEUSAGE_CONTAINER) or (Buffer[i].dwUsageRESOURCEUSAGE_RESERVED) then begin r:=Buffer[i]; LoadLevel(@r,vNode); end; end; end; WNetCloseEnum(hEnum); end; //if Items.Count15 then exit; end; procedure TmmLanTreeView.RefreshTree; begin LoadLevel(nil,nil); if Assigned( FOnEndScan) then FOnEndScan(Self); end; procedure TmmLanTreeView.SetActive(const Value: Boolean); begin FActive := Value; if Value then RefreshTree else Items.Clear; end; procedure TmmLanTreeView.SetOnEndScan(const Value: TNotifyEvent); begin FOnEndScan := Value; end; procedure TmmLanTreeView.SetOnProgress(const Value: TNotifyEvent); begin FOnProgress := Value; end; end.