任何人都知道如何修改ShellCtrls.pas?其實我想添加一些項目在資源管理器樹的頂部。添加自定義項目到TShellTreeView
例如:
-myitem
-miitemtoo
-mycomputer
-c:
-d:
也許修改此增強樹視圖:http://delphi.about.com/library/weekly/code/gtrocheckshelltreeview.zip
但我認爲ShellCtrls是要修改的主要文件。
任何人都知道如何修改ShellCtrls.pas?其實我想添加一些項目在資源管理器樹的頂部。添加自定義項目到TShellTreeView
例如:
-myitem
-miitemtoo
-mycomputer
-c:
-d:
也許修改此增強樹視圖:http://delphi.about.com/library/weekly/code/gtrocheckshelltreeview.zip
但我認爲ShellCtrls是要修改的主要文件。
我不認爲你需要修改源代碼。股票TShellTreeView是TCustomTreeView的後代,因此您可以在TreeView中添加項目。
下面的代碼是而不是通過認真考慮或測試,但它可能會讓你開始。它在ShellTreeView的頂部插入一個顯示名稱作爲可執行文件名稱和路徑作爲可執行文件路徑的項目。
uses
shlobj, activex, shellapi;
function InsertToSTV(STV: TShellTreeView; Pos: Integer;
Path, DisplayName: string): Boolean;
var
ShellFolderInterface, NodeShellFolder: IShellFolder;
ItemIDList: PItemIDList;
CharsParsed, Attributes: ULONG;
wPath: PWideChar;
Node: TTreeNode;
FileInfo: TSHFileInfo;
begin
Result:= False;
if (SHGetDesktopFolder(ShellFolderInterface) = NOERROR) then begin
wPath:= StringToOleStr(Path);
if wPath <> nil then
try
if ShellFolderInterface.ParseDisplayName(0, nil, wPath, CharsParsed,
ItemIDList, Attributes) = NO_ERROR then
ShellFolderInterface.BindToObject(ItemIDList, nil, IID_IShellFolder,
NodeShellFolder);
Node := STV.Items.Insert(STV.Items[Pos], DisplayName);
Node.Data := TShellFolder.Create(nil, ItemIDList, NodeShellFolder);
if STV.UseShellImages and not Assigned(STV.Images) then begin
SHGetFileInfo(PChar(ItemIDList), 0,
FileInfo,
SizeOf(FileInfo),
SHGFI_PIDL or SHGFI_SYSICONINDEX);
Node.ImageIndex := FileInfo.iIcon;
SHGetFileInfo(PChar(ItemIDList), 0,
FileInfo,
SizeOf(FileInfo),
SHGFI_PIDL or SHGFI_SYSICONINDEX or SHGFI_OPENICON);
Node.SelectedIndex := FileInfo.iIcon;
end;
finally
SysFreeString(wPath);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
InsertToSTV(ShellTreeView1,
0,
ExtractFilePath(Application.ExeName),
ExtractFileName(Application.ExeName));
end;
那麼,要嚴格回答你的問題,修改ShellCtrls.pas,你可以在代碼編輯器中打開它,在你想要的地方進行更改,然後將它編譯到你的應用程序中。
但是,我強烈建議不要這樣做。對其進行更改的最佳方法是創建後代組件。這就是OOP世界中事情的完成方式。
因此,而不是修改現有的類,創建一個後代類。