Ich habe es nochmal geändert aber irgendwie ist das ein Hack weil Hardgecoded.
Delphi-Quellcode:
procedure TSkinComboBox.FillList(Path: WideString);
var
FileInfo: SHFILEINFO;
IntI: Integer;
PathRecursive: TSplitStrArray;
s: string;
begin
SetLength(PathRecursive, 0);
PathRecursive := Split(Path, '\');
// PathRecursive + 3 der erste Eintrag in der Combo beginnt bei 1
// 0 ist weg bleiben noch 2
// 1 für den Desktop und 2 für Computer
SetLength(IconHandle, High(PathRecursive) + 3);
for IntI := 1 to High(IconHandle) do
begin
if IntI = 1 then
s := GetSpecialFolder(CSIDL_DESKTOPDIRECTORY)
else if IntI = 2 then
s := GetSpecialFolder(CSIDL_DRIVES)
else
// - 3 damit wir wieder auf 0 gelangen.
// 0 ist der erste Eintrag im Split Array PathRecursive
s := s + PathRecursive[IntI - 3] + '\';
SHGetFileInfo(PWideChar(s), FILE_ATTRIBUTE_NORMAL, FileInfo, sizeof(FileInfo),
SHGFI_DISPLAYNAME Or SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON);
IconHandle[IntI] := FileInfo.HIcon;
end;
end;
Bei Computer gibt er mir ein Folder Icon und das Letzte ist auch irgendwie daneben.
Sieht nach einem Icon mit "Wait Cursor aus."
CSIDL_DRIVES für Computer scheint falsch zu sein. Muss noch mal schaun.
Die anderen sind soweit in Ordnung.
Die Icons sind etwas nach unten gerutscht sollte aber das kleinste Problem sein.
gruss