Entwickler-Ecke

Windows API - Icon aus Exe in Menu


Nersgatt - Do 16.12.10 11:27
Titel: Icon aus Exe in Menu
Moin,

ich hab eine Prozedur aus Delphi 2006 übernommen, wo sie jahrlang klaglos lief.
Nur in Delphi 2010 hab ich damit Probleme.

Ich möchte einem TMenuItem das Icon einer Exe zuordnen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
procedure GetIcon4Programm(FN: TFileName; MI: TMenuItem);
var
  IH: HICON;
  LH: HMODULE;
  Icon: TIcon;
  MM: TMenu;
  IL: TCustomImageList;
begin
  MM := MI.GetParentMenu;
  if not Assigned(MM) then
    Exit;

  IL := MM.Images;
  if not Assigned(IL) then
    Exit;

  LH := LoadLibrary(PChar(FN));
  if LH <> 0 then
  begin
    try
      IH := LoadIcon(LH, 'MAINICON');
      if IH <> 0 then
      begin
        Icon := TIcon.Create;
        try
          Icon.Handle := IH;
          MI.ImageIndex := IL.AddIcon(Icon);
        finally
          Icon.Free;
        end;
      end
      else
        mi.ImageIndex := -1;
    finally
      FreeLibrary(LH);
    end;

  end
  else
    MI.ImageIndex := -1;

end;


Das läuft auch scheinbar problemlos durch. Nur wenn ich den Menüpunkt aufklappe, der das MenuItem enthält, bekomme ich die Meldung "Listindex überschreitet das maximum (51)". Ich habe alle Menüitems kontrolliert, sie bekommen nie ein ImageIndex > 51. In der Imagelist sind 52 Icons.
Ich hab so überhaupt keine Idee, woran das hängen könnte.

Für Tipps bin ich dankbar!