在 Delphi 11 Alexandria 的 Windows 10 中的 32 位 VCL 應用程式中,我有一個TRzShellTree控制元件(來自 GetIt 中可用的 Konopka Signature VCL Controls 7.0 的 Ray Konopka):
object RzShellTree1: TRzShellTree
Left = 0
Top = 41
Width = 201
Height = 428
Align = alLeft
BaseFolder.Pidl = {
004301000014001F50E04FD020EA3A6910A2D808002B30309D19002F433A5C00
00000000000000000000000000000000000054003100000000003D5465581100
44454C50484900003E0009000400EFBE1423F90E42549B502E00000000930F00
000001000000000000000000000000000000DFED4800440045004C0050004800
4900000016005A0031000000000042546956100053757065724D525500004200
09000400EFBE2154F655425469562E000000210A000000004B00000000000000
0000000000000000C43CDA00530075007000650072004D005200550000001800
660031000000000042546F56100050524F4A45437E3100004E0009000400EFBE
4254695642546F562E00000043EB0A0000000B00000000000000000000000000
000008E22E00500052004F004A004500430054002000470052004F0055005000
5300000018000000}
Indent = 19
ReadOnly = True
SelectionPen.Color = clBtnShadow
TabOrder = 0
OnChange = RzShellTree1Change
OnDragOver = RzShellTree1DragOver
end
...在TRzShellTree.OnAddItem事件處理程式中,我需要獲取每個添加檔案夾的 PATH:
procedure TformMain.RzShellTreeGroupsAddItem(Sender: TObject; ParentIShf: IShellFolder_NRC; ParentAbsIdList, ItemRelIdList: PItemIDList; Attribs: Integer; var AllowAdd: LongBool);
begin
// How to get the PATH of the added folder?
end;
我認為這可以通過從ItemRelIdList: PItemIDList引數中提取路徑來完成。但我不知道該怎么做。
uj5u.com熱心網友回復:
RzShellUtils 單元包含許多有用的函式來處理這類事情。特別是,
uses
RzShellUtils;
procedure TForm13.RzShellTree1AddItem(Sender: TObject; ParentIShf: IShellFolder_NRC; ParentAbsIdList,
ItemRelIdList: PItemIDList; Attribs: Integer; var AllowAdd: LongBool);
var
S: string;
begin
S := ShellGetPathFromIdList( ItemRelIdList );
CodeSite.Send( 'S', S );
end;
uj5u.com熱心網友回復:
如果您需要完整路徑,則將ParentAbsIdList和ItemRelIdList串列組合成一個新的絕對PItemIDList串列:
如何將相對 PIDL 轉換為絕對 PIDL?
然后使用SHGetPathFromIDList().
或者,您可以使用原樣ParentIShf.GetDisplayNameOf()傳遞它ItemRelIdList。如果您只指定SHGDN_FORPARSING標志,您將獲得孩子的完整路徑。如果您包含該SHGDN_INFOLDER標志,您將獲得子項相對于其父項的路徑。
該RzShellUtils單元提供了使用PItemIDLists 的實用功能。例如,
ConcatIdLists()(和ShellMemFree()) ShellGetPathFromIdList()、 和ShellGetFriendlyNameFromIdList():
Path := ShellGetFriendlyNameFromIdList(ParentIShf, ItemRelIdList, fnForParsing);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424524.html
標籤:壳 德尔福 温纳皮 delphi-11-亚历山大
上一篇:Delphi中檢查FreeOnTerminate=True的非暫停創建的TThread是否仍在執行的正確方法是什么?
