我自己修改了一个下d7中的shellctrl,你将它重新编译并安装到delphi中就可以了:procedure TCustomShellTreeView.InitNode(NewNode: TTreeNode; ID: PItemIDList; ParentNode: TTreeNode); var CanAdd: Boolean; NewFolder: IShellFolder; AFolder: TShellFolder; begin AFolder := TShellFolder(ParentNode.Data); NewFolder := GetIShellFolder(AFolder.ShellFolder, ID); NewNode.Data := TShellFolder.Create(AFolder, ID, NewFolder); with TShellFolder(NewNode.Data) do begin NewNode.Text := DisplayName; if FUseShellImages and not Assigned(Images) then begin NewNode.ImageIndex := GetShellImage(AbsoluteID, False, False); NewNode.SelectedIndex := GetShellImage(AbsoluteID, False, True); end; if NewNode.SelectedIndex = 0 then NewNode.SelectedIndex := NewNode.ImageIndex; //to************** if NewNode.Level<=2 then begin NewNode.HasChildren:=true; end else begin NewNode.HasChildren := SubFolders; if fpShared in Properties then NewNode.OverlayIndex := 0; end; if (otNonFolders in ObjectTypes) and (ShellFolder <> nil) then NewNode.HasChildren := GetHasSubItems(ShellFolder, ObjectFlags(FObjectTypes)); end; CanAdd := True; if Assigned(FOnAddFolder) then FOnAddFolder(Self, TShellFolder(NewNode.Data), CanAdd); if not CanAdd then NewNode.Delete; end;我用它做的一个程序: http://www.tonixsoft.com/index.php?mmenu_id=3&smenu_id=0005
var
CanAdd: Boolean;
NewFolder: IShellFolder;
AFolder: TShellFolder;
begin
AFolder := TShellFolder(ParentNode.Data);
NewFolder := GetIShellFolder(AFolder.ShellFolder, ID);
NewNode.Data := TShellFolder.Create(AFolder, ID, NewFolder);
with TShellFolder(NewNode.Data) do
begin
NewNode.Text := DisplayName;
if FUseShellImages and not Assigned(Images) then
begin
NewNode.ImageIndex := GetShellImage(AbsoluteID, False, False);
NewNode.SelectedIndex := GetShellImage(AbsoluteID, False, True);
end;
if NewNode.SelectedIndex = 0 then NewNode.SelectedIndex := NewNode.ImageIndex;
//to**************
if NewNode.Level<=2 then begin
NewNode.HasChildren:=true;
end
else begin
NewNode.HasChildren := SubFolders;
if fpShared in Properties then NewNode.OverlayIndex := 0;
end;
if (otNonFolders in ObjectTypes) and (ShellFolder <> nil) then
NewNode.HasChildren := GetHasSubItems(ShellFolder, ObjectFlags(FObjectTypes));
end; CanAdd := True;
if Assigned(FOnAddFolder) then FOnAddFolder(Self, TShellFolder(NewNode.Data), CanAdd);
if not CanAdd then
NewNode.Delete;
end;我用它做的一个程序:
http://www.tonixsoft.com/index.php?mmenu_id=3&smenu_id=0005
不知道大家有没有现成的控件?