Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TIcon / Extracticon... 16x16?


FriFra - Di 08.04.03 11:00
Titel: TIcon / Extracticon... 16x16?
Ich will wie folgt ein Icon laden:

Quelltext
1:
icon.Handle := ExtractIcon(Handle, 'c:\windows\system32\shell32.dll', 10);                    


Das Problem an der Sache ist allerdings, dass ich so immer nur das 32x32 (Truecolor) Icon bekomme, ich will aber das 16x16 (256 Farben) haben. Wie komme ich an dieses Icon?


wulfskin - Di 08.04.03 12:25

Schau dir mal ExtractIconEx an, ich glaub, dass ist genau das richtige für dich!


FriFra - Di 08.04.03 15:52

ExtractIconEx liefert mir jetzt endlich die 16x16 Icons. allerdings weiss ich noch nicht, wie ich an die 256 farbigen Icons komme...
Ich benötige die Icons für eine TreeView, dabei stört natürlich der Alphakanal (Transparenz unter XP), welcher im TreeView schwarz erscheint...
Wie bekomme ich das 256 farb Icon?


FriFra - Di 15.04.03 08:40

Ich habs... Mein Problem mit den schwarzen alpha Kanälen kann man lösen, indem man der ImageList zur Laufzeit den kompletten Inhalt einer andeen Imagelist zuweist, welche derartige Icons bereits enthällt. Es ist also offensichtlich ein bug der Komponente...

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.FormCreate(Sender: TObject);
var
  SHFileInfo: TSHFileInfo;
  SysIcons: THandle;
begin
    // Handle der "ShellImageList" ermitteln
    SysIcons := SHGetFileInfo(PChar('C:\'), 0, SHFileInfo,
      SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_ICON);

    // Handle temporärer ImageList zuweisen
    ImageListTemp.Handle := SysIcons;

    // Assign ist wichtig, da bei der Zuweisung eines Handle
    // an z.B. mehrere ImageList immer alle geändert würden
    MyImageList.Assign(ImageListTemp); 
end;