Hallo, hatte auch mal so eine Funktion brauchen müssen und habe das folgendermaßen gelöst.
Ich erstelle aus einer Liste alle Menüeinträge an eine bestimmte Position:
Delphi-Quellcode:
s := TStringList.Create;
ico := TIcon.Create;
try
ini.ReadSections(s);
for i := 0 to s.Count - 1 do
begin
MItem := TMenuItem.Create(nil);
MItem.Caption := s.Strings[i];
MItem.Name := MItem.Caption;
ico.LoadFromFile(myIcon);
MItem.ImageIndex := ImageList.AddIcon(ico);
anz := MainMenu1.Items.Items[1].Items[0].Count;
MainMenu1.Items.Items[1].Items[0].Insert(anz, MItem);
MainMenu1.Items.Items[1].Items[0].Items[0].OnClick := MenuItem.OnClick;
end; // for i:=0...
finally
s.Free;
ico.Free;
end;
Wie man im Code sieht weise ich dem neu erstellten Item ein bestimmtes OnClick-Ereignis zu. Das bezieht sich auf den folgenden Menupunkt.
Im Menü habe ich einen Eintrag erstellt, auf invisible gesetzt und dort ein OnClick-Ereignis erstellt, in dem ich dann unterschiedliche Funktionen ausführe, die der einzelne Menüpunkt ausführen soll. Dort überprüfe ich nach der Caption des Eintrags welche Funktion ausgeführt werden soll.
Delphi-Quellcode:
myLang := (Sender as TMenuItem).Caption;
if myLang = 'German' then
...
Das funktioniert wunderbar und ich kann den Sender bzw. den Menüpunkt abfragen welcher gerade das Onlick-Ereignis ausgeführt hat.
Hoffe das hilft dir weiter.
Gruß, Moony