Autor Beitrag
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 16.12.10 11:27 
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:
ausblenden volle Höhe 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!

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)