ich bin mit meiner Programmierung mittlerweile auch auf das schon hier diskutierte Problem der Windows System Icons in ein TreeView zubringen gestoßen (http://www.lazarusforum.de/viewtopic.php?f=15&t=2587). Da dieser Beitrag schon ein bisschen älter ist und für mich kein zufrieden stellendes Ergebnis geliefert hat mein erneutes Nachfragen. Da ja nun Lazarus Erwachsen georden ist (Version 1.0) hoffe ich das dieses Problem irgend eine Lösung bekommen hat.
Mein bisheriger Weg:
Ich habe mir durch die Windows-Funktion 'SHGetFileInfo' den Handle zur System-ImageList geholt. Doch leider kann ich jetzt diesen Handle nicht der ImageList zuweisen, da der Handle nur Lesen-Eigenschaft hat . Auch die Windows-Funktion 'TreeView_SetImageList' funktioniert nicht mit dem SystemImageList-Handle.
Nun aber ein wenig Code, der sagt mehr als 1000 Worte.
Code: Alles auswählen
function GetShellImageList(Large: boolean): HImageList;
var
fi: TSHFileInfo;
AFlags: integer;
begin
AFlags:=SHGFI_SYSICONINDEX;
if Large then
AFlags:=AFlags OR SHGFI_LARGEICON
else
AFlags:=AFlags OR SHGFI_SMALLICON;
result:=SHGetFileInfo('', 0, fi, sizeof(fi), AFlags);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sih: HIMAGELIST;
begin
sihandle:=GetShellImageList(false);
//1. Versuch
TreeView1.Images.Handle:=sihandle; //direkter Zugriff fkt. nicht, nur Lesen
//2.Versuch
TreeView_SetImageList(TreeView1.Handle, sihandle, TVSIL_NORMAL); //wird ausgeführt, doch bringt kein Ergebnis - Keine Icons vor den Items
end;
Gibt es einen Weg den Handle der ImageList bzw. dem TreeView zu übergeben?
Warum ist der Handle nur noch lesend?
Nur so nebenbei: Gibt es eine Möglichkeit System-Icons die größer als 32x32 sind auszulesen?
Danke. CoolT
P.S. Da ich neu bin und zum ersten mal hier poste, erst einmal ein Lob an dieses Forum und den fleisigen Helfern. Es hat mir schon bei so manchen Problem geholfen.