AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

System Image List kopieren

Ein Thema von oki · begonnen am 7. Nov 2008 · letzter Beitrag vom 9. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2      
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
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: System Image List kopieren

  Alt 7. Nov 2008, 19:58
Du musst Zeiger auf lokale Variablen übergeben, in die dann Handles geschrieben werden. Dann musst du einen Weg finden, die Listen zu kopieren.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
oki

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

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:34
Hi,

genau das Kopieren soll die Funktion imho ja ausführen. Hier die Beschreibung aus der Hilfe:
Zitat:
Shell_GetImageLists Function

--------------------------------------------------------------------------------

Retrieves system image lists for large and small icons.
Gruß oki
42
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:38
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:
Ich denke, die Fehlermeldung kommt, weil Handle eine Nur-Lese-Eigenschaft ist.
Zumindest in Delphi 2006 hat Handle einen Setter. Die Fehlermeldung kommt, weil eine Eigenschaft keine Adresse hat. Du kannst also einfach die von Shell_GetImageLists zurückgegebenen Handles in die Imagelisten einsetzen, wenn du ShareImages auf True setzt.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
oki

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

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:42
Ähmm,

dann ist das klar. Nur wie kopiere ich dann die Images? Auf die kommt es mir ja eigentlich an.

Gruß oki
42
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:47
Sollte es bei Edits nicht auch einen roten Kasten geben?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
oki

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

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:48
OK,

jetzt hab ich das gefunden:
Zitat:
_GetIcon Function
Creates an icon from an image and mask in an image list.

Syntax


HICON ImageList_GetIcon(
HIMAGELIST himl,
int i,
UINT flags
);

Parameters

himl
A handle to the image list.
i
An index of the image.
flags
A combination of flags that specify the drawing style. For a list of values, see the description of the fStyle parameter of the ImageList_Draw function.
Return Value

Returns the handle to the icon if successful, or NULL otherwise.
Stellt sich als nächstes die Frage; Wie bekomme ich das Icon von dem ich das Handle habe in meine Imagelist?

Gruß oki
42
  Mit Zitat antworten Zitat
oki

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

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:51
Zitat von Apollonius:
Sollte es bei Edits nicht auch einen roten Kasten geben?
Zumindest bei mir kam der rote Kasten.

Ich probier das mal aus.

Zitat:
Du solltest auch beachten, dass es diese Funktion in Zukunft möglicherweise nicht mehr geben wird.
dann ist das eine Sackgasse. Gib es einen besseren Weg?

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:57
Lad dir mal meine nonVCL Demos zu den Tutorials runter. Da hat Mathias beim Litview-Demo mit der Systemiconlist gearbeitet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: System Image List kopieren

  Alt 7. Nov 2008, 21:58
Wie wäre es mit SHGetImageList?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz