![]() |
System Image List kopieren
Hi Leute,
ich möchte die System Image List in meine eigene ImageList kopieren, damit ich die passenden Icons zu gelisteten Dateien in meinem Listview anzeigen kann. Hierzu habe ich zwei eigene Imagelisten angelegt. Eine für die Icons 32x32 und eine für die Icons 16x16. Zum Kopieren wollte ich die Shell-Funktion Shell_GetImageLists aus Shell32.dll verwenden. Die Definition aus der Hilfe lautet: Zitat:
Zitat:
Delphi-Quellcode:
Ich denke, die Fehlermeldung kommt, weil Handle eine Nur-Lese-Eigenschaft ist.
....
function Shell_GetImageLists(LargeList : PCardinal; SmallList : PCardinal) : Boolean; stdcall; implementation function Shell_GetImageLists; external shell32 name 'Shell_GetImageLists'; .... procedure TOTFListView.CreateWnd; begin inherited; FFileImageList16 := TImageList.Create(self); FFileImageList16.Height := 16; FFileImageList16.Width := 16; self.SmallImages := FFileImageList16; FFileImageList32 := TImageList.Create(self); FFileImageList32.Height := 32; FFileImageList32.Width := 32; self.LargeImages := FFileImageList32; Shell_GetImageLists(@FFileImageList32.Handle, @FFileImageList16.Handle); // Fehler end; Gleichzeitig gehe ich aber davon aus, dass das Handle gar nicht verändert werden soll, sondern nur die Zielliste ist, in die die Icons kopiert werden sollen. Jetzt gibt es zwei Möglichkeiten, jemand weist mir den Richtigen Weg für die Benutzung dieser Funktion oder es gibt einen anderen Weg den ich nicht sehe. Schon mal Dank für die Hilfe, Gruß oki |
Re: System Image List kopieren
Du musst Zeiger auf lokale Variablen übergeben, in die dann Handles geschrieben werden. Dann musst du einen Weg finden, die Listen zu kopieren.
|
Re: System Image List kopieren
Hi,
genau das Kopieren soll die Funktion imho ja ausführen. Hier die Beschreibung aus der Hilfe: Zitat:
|
Re: System Image List kopieren
Eben nicht. Die Funktion macht dir interne Variablen zugänglich, welche in die out-Parameter geschrieben werden. Du hast jetzt das Problem, dass du die Imagelist in die Delphi-TImageList kopieren musst.
Du solltest auch beachten, dass es diese Funktion in Zukunft möglicherweise nicht mehr geben wird. Edit: Zitat:
|
Re: System Image List kopieren
Ähmm,
dann ist das klar. Nur wie kopiere ich dann die Images? Auf die kommt es mir ja eigentlich an. Gruß oki |
Re: System Image List kopieren
Sollte es bei Edits nicht auch einen roten Kasten geben?
|
Re: System Image List kopieren
OK,
jetzt hab ich das gefunden: Zitat:
Gruß oki |
Re: System Image List kopieren
Zitat:
Ich probier das mal aus. Zitat:
Gruß oki |
Re: System Image List kopieren
Lad dir mal meine nonVCL Demos zu den Tutorials runter. Da hat Mathias beim Litview-Demo mit der Systemiconlist gearbeitet.
|
Re: System Image List kopieren
Wie wäre es mit SHGetImageList?
|
Re: System Image List kopieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Dank euch beiden. Folgender Code klappt bei mir:
Delphi-Quellcode:
In den Anhang habe ich auch noch einen Screenshot gelegt.
procedure TOTFListView.CreateWnd;
var SML, ML : PLongWord; begin inherited; FFileImageList16 := TImageList.Create(self); FFileImageList16.Height := 16; FFileImageList16.Width := 16; self.SmallImages := FFileImageList16; FFileImageList32 := TImageList.Create(self); FFileImageList32.Height := 32; FFileImageList32.Width := 32; self.LargeImages := FFileImageList32; GetMem(ML, Sizeof(LongWord)); ML^ := 0; GetMem(SML, Sizeof(LongWord)); SML^ := 0; Shell_GetImageLists(ML, SML); if SML^ > 0 then FFileImageList16.Handle := SML^; if ML^ > 0 then FFileImageList32.Handle := ML^; FreeMem(ML); FreeMem(SML); end; Jetzt stellt sich nur noch die Frage mit der Sackgasse. Gruß oki |
Re: System Image List kopieren
Es ist unnötig, hier auf den Speichermanager zurückzugreifen. Deklariere SML und ML als LongWord bzw. HIMAGELIST. Dann kannst du dir die Aufrufe von GetMem und FreeMem sparen. Der Funktion kannst du einfach @SML und @ML übergeben.
|
Re: System Image List kopieren
Klar, mit den Zeigern. Eine Deklaration mittels var in der Funktion tut es sicher auch. Ist beim Probieren entstanden. Ich wollte auch erst HIMAGELIST benutzen, hab aber nicht rausbekommen wo das deklariert ist.
Gruß oki |
Re: System Image List kopieren
Hi Luckie.
Ich stell mich wohl grad etwas blöd an, aber ich kann das Demo nicht finden. Ich hab im Forum gesucht und auf deiner HomePage. Kannst du bitte mal so nett sein und mir den direkten Link posten? Auch wenn mein Code aktuell funzt möchte ich ihn trotzdem noch mal prüfen. Ich bin mir nicht sicher, ob ich wirklich alles richtig mache in der Verwendung. Schon mal Dank und Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz