소스를 수정해야한다고 생각하지 않습니다. 재고 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;