Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

System Image List kopieren

  Alt 7. Nov 2008, 19:55
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:
BOOL Shell_GetImageLists(
HIMAGELIST *phiml,
HIMAGELIST *phimlSmall
);

Parameters

phiml
[in] Pointer to the handle of an image list which, on success, receives the system image list for large (32 x 32) icons.
phimlSmall
[in] Pointer to the handle of an image list which, on success, receives the system image list for small (16 x 16) icons.
Leider klappt das nicht. Ich bekomme folgende Fehlermeldung:
Zitat:
E2036 Variable erforderlich
Eingebunden und benutzt habe ich die Funktion folgendermaßen:

Delphi-Quellcode:
....
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;
Ich denke, die Fehlermeldung kommt, weil Handle eine Nur-Lese-Eigenschaft ist.
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
42
  Mit Zitat antworten Zitat