Home > other >  How to extract the folder path from PItemIDList parameter in TRzShellTree.OnAddItem event handler?
How to extract the folder path from PItemIDList parameter in TRzShellTree.OnAddItem event handler?

Time:02-03

In a 32-bit VCL Application in Windows 10 in Delphi 11 Alexandria, I have a TRzShellTree control (by Ray Konopka from the Konopka Signature VCL Controls 7.0 available in GetIt):

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

...where in the TRzShellTree.OnAddItem event handler I need to get the PATH of each added folder:

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;

I assume this could be done by extracting the path from the ItemRelIdList: PItemIDList parameter. But I don't know how to do that.

CodePudding user response:

If you need the full path, then combine the ParentAbsIdList and ItemRelIdList lists into a new absolute PItemIDList list:

How do I convert a relative PIDL into an absolute PIDL?

And then use SHGetPathFromIDList().

If you just need the name of the new folder within its parent folder, you can just use ParentIShf.GetDisplayNameOf() instead, passing it ItemRelIdList as-is.

  •  Tags:  
  • Related