so ich muss leider das Thema wieder aufrollen.
Diese Lösung wie oben funktioniert, allerdings wenn in der OnCreate Routine der
Handle vom ImageList mit dem ERSTEN Icon beschrieben wurde.
ist dieses ICON wenn ich es zur laufzeit neu lade, gleiche Routine, nicht mehr vorhanden.
Delphi-Quellcode:
mainForm.OnCreate()
// PChar(copy(ParamStr(0),1,3) = C:\
try
SysIcons := SHGetFileInfo(PChar(copy(ParamStr(0),1,3)), 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
SHGFI_ICON);
finally
DestroyIcon(SHFileInfo.hIcon);
end;
ImageList1.Handle := SysIcons;
ImageList1.Masked := False;
ImageList1.BkColor := clNone;
ImageList1.BlendColor := clNone;
ImageList1.Clear;
...
TreeView.Parse()
Icon := TIcon.Create;
try
//Get The Icon That Represents The File ----------------------
SysIcons := SHGetFileInfo(PChar('C:\'), 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON);
Icon.Handle := SHFileInfo.hIcon;
// Icon wird dem Item des TreeView zugeordnet
tn.ImageIndex := ImageList1.AddIcon(Icon);
tn.SelectedIndex := tn.ImageIndex;
finally
DestroyIcon(SHFileInfo.hIcon)
end;
Das Laufwerksicon ( C:\ ), das beim Windows Explorer erscheint, ist beim Ausführen der Parse Routine im Programm selbst nicht mehr vorhanden.
Wo geht es verloren und warum werden die Informationen nicht neu geholt wenn ich die 'SHGetFileInfo' Methode neu aufrufe.
Vielleicht weiß jemand von euch warum das so ist.