The following example is taken from JamExplorer and shows a small samples implementation for a TJamShellList and TJamShellTree.
unit CustomIconsExample; interface uses Vcl.Forms, ShellControls, Vcl.Controls, Jam.Shell.Controls.Types; type TMainForm = class(TForm) CustomSmallImages: TImageList; //contains the custom icons. In newer Delphi version a TVirtualImageList can be used instead. ShellList: TJamShellList; ShellTree: TJamShellTree; procedure FormCreate(Sender: TObject); private fCustomIconPath: string; procedure GetCustomIcon(Sender: TObject; const pPath: string; var pEventArgs: TCustomizeIconEventArgs); end; implementation uses System.SysUtils, ShellBrowser; procedure TMainForm.FormCreate(Sender: TObject); begin //registers GetCustomIcon as global eventhandler. TGlobalCustomIconHandler.SetOnGetCustomIconForPath(GetCustomIcon) //activates the eventhandler for the ShellList and the ShellTree ShellTree.CustomIcons := true; ShellList.CustomIcons := true; end; procedure TMainForm.GetCustomIcon(Sender: TObject; const pPath: string; var pEventArgs: TCustomizeIconEventArgs); begin if (Sender = ShellList) then begin if (Uppercase(ExtractFileExt(pPath)) = '.TXT') then begin pEventArgs.ImageList := CustomSmallImages; pEventArgs.ImageIndex := 0; end; end else if (Sender = ShellTree) then begin if SamePath(pPath, fCustomIconPath) then begin pEventArgs.ImageList := CustomSmallImages; pEventArgs.ImageIndex := 1; end; end; end; end.