Windows System Icons in TreeView [erstmal gelöst]

Windows System Icons in TreeView [erstmal gelöst]

Beitragvon CoolT » 1. Sep 2012, 09:19 Windows System Icons in TreeView [erstmal gelöst]

Hallo,

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.
Zuletzt geändert von CoolT am 1. Sep 2012, 15:04, insgesamt 1-mal geändert.
CoolT
 
Beiträge: 5
Registriert: 31. Aug 2012, 20:10

Beitragvon MmVisual » 1. Sep 2012, 10:08 Re: Windows System Icons in TreeView

Ich vermute mal dass die Lazarus TImageList / TTreeView von einer ganz anderen Datenstruktur sind als die TreeView/ImageList von Windows und daher kann man nicht einfach ein wildfremdes Handle zuweisen.
Du musst das Image auslesen und selbst deiner Lazarus-ImageList zuweisen.
MmVisual
 
Beiträge: 945
Registriert: 10. Okt 2008, 22:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3) | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon theo » 1. Sep 2012, 10:13 Re: Windows System Icons in TreeView

Kommst du denn damit nicht weiter?
viewtopic.php?p=43502#p43502
theo
 
Beiträge: 7881
Registriert: 11. Sep 2006, 18:01

Beitragvon CoolT » 1. Sep 2012, 10:37 Re: Windows System Icons in TreeView

@MmVisual:
Deine Aussage kann ich nicht nachvollziehen, da es mit einer ListView und 'ListView_SetImageList' funktioniert (Beispiel: http://www.lazarus.freepascal.org/index.php/topic,12300.0.html).

@theo:
Eigentlich keine schlechte Idee (hätte ich auch darauf kommen können :oops: ), aber noch keine für mich zufrienden stellende Lösung.
Wird mir wohl nix anderes übrig bleiben als erstmal diese Variante zu nutzen.

Danke euch für die Antworten.
CoolT
 
Beiträge: 5
Registriert: 31. Aug 2012, 20:10

Beitragvon CoolT » 1. Sep 2012, 14:59 Re: Windows System Icons in TreeView [erstmal gelöst]

So, auf Grundlage von theo's Beitrag habe ich mir eine funktionierende Lösung gebastelt.

Die TImageList-Klasse habe ich abgeleitet und um neue Funktionen/Properties erweitert, die das entsprechende ShellIcon der Dateien von Windows holen und in die ImageList nur einmal einfügen. Bei der Prüfung, ob das Icon schon in der Liste ist werden zusätzlich die graphischen Inhalte der Icons zu Hilfe genommen.

ShellTreeView.JPG

CoolT
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
CoolT
 
Beiträge: 5
Registriert: 31. Aug 2012, 20:10

Beitragvon CoolT » 1. Sep 2012, 15:03 Re: Windows System Icons in TreeView [erstmal gelöst]

Und natürlich noch die Unit mit der TShellImageList-Klasse. Viel Spass damit.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
CoolT
 
Beiträge: 5
Registriert: 31. Aug 2012, 20:10

Beitragvon MemberOfClub » 17. Feb 2016, 10:15 Re: Windows System Icons in TreeView [erstmal gelöst]

So, ich hab jetzt mal das lazfm3-Paket und Deine Lösung zusammengeknüppelt,
es passiert aber noch nichts sinnvolles mit Deiner Image-List im Treeview.

Zumindest - gemäß Screenshot - ist der Reihenabstand gewachsen,
(siehe Treeview links oben ..) Icons würden jetzt dahin passen .. :)

Was muß ich machen damit die ImageList-Icons sichtbar werden im Treeview ?

MfG,
Peter

lazfm3 screenshot 01.png

lazfm3 01.zip
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MemberOfClub
 
Beiträge: 2
Registriert: 16. Feb 2016, 09:54

• Themenende •

Zurück zu Windows



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried