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:
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!