AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi MenuItems hinzufügen und mit OnClick ausrüsten
Thema durchsuchen
Ansicht
Themen-Optionen

MenuItems hinzufügen und mit OnClick ausrüsten

Ein Thema von daniel8520 · begonnen am 3. Jul 2004 · letzter Beitrag vom 27. Mär 2006
Antwort Antwort
daniel8520
(Gast)

n/a Beiträge
 
#1

MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 14:36
Hallo Leute,

ich hab ein relativ großes Problem:
Ich hab eine StringList. Nun würde ich ganz gern jeden einzelnen String in dieser Liste als MenuItem in mein MainMenu hinzufügen, und auch noch für jedes einzelne MenuItem eine EIGENE OnClick Prozedur festlegen.
Habt ihr mein Problem verstanden?
Kann mir bitte jemand helfen?
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 14:47
OnCreate ist soweit ich weiß auch nur eine Eigenschaft, d.h. Du kannst OnCreate eine Funktion zuweisen. Die muß dann natürlich die gewünschten Parameter haben. Vielleicht schick ich gleich mal ein Beispiel.
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#3

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 14:49
sorry, OnClick natürlich
  Mit Zitat antworten Zitat
daniel8520
(Gast)

n/a Beiträge
 
#4

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 14:49
Wär echt nett. Aber kann mir auch jemand dabei helfen, die Strings aus einer StringList als TMenuItem hinzuzufügen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 14:50
Steht zwar schon tausend und einmal in der DP aber für dich noch mal hier:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    mnuFile: TMenuItem;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure MyMenuItemClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyMenuItemClick(Sender: TObject);
begin
  case (Sender as TMenuItem).Tag of
    0: ShowMessage('Foo');
    1: ShowMessage('bar');
    2: ShowMessage('Foobar');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  sl: TStringList;
  NewItem: TMenuItem;
begin
  sl := TStringList.Create;
  try
    for i := 0 to 9 do
      sl.Add('Eintrag: '+IntToStr(i));
    for i := 0 to sl.Count-1 do
    begin
      NewItem := TMenuItem.Create(MainMenu1);
      NewItem.Caption := sl.Strings[i];
      NewItem.Tag := i;
      NewItem.OnClick := MyMenuItemClick;
      mnuFile.Add(NewItem); // Der Hauptmenüpunkt vom TMainmenu heißt "mnuFile"
    end;
  finally
    FreeAndNil(sl);
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#6

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 14:53
Diese Frage gabs schon mal: http://www.delphipraxis.net/internal...844&highlight=

Greetz

EDIT: Mist zu spät
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#7

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 14:59
Und wenn Du's nicht mit dem Tag-Feld machen willst, weil das bei vielen Funktionen zu Mammut-OnClick-Funktionen führt, geht's auch so (Form mit MainMenu und in MainMenu ein Hauptmenü Test und ein Untermenu Test1):

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Test1: TMenuItem;
    Test11: TMenuItem;
    procedure Test11Click(Sender: TObject);
  private
    { Private-Deklarationen }
    MenuItemStrings: TStringList;
    procedure Test21Click(Sender: TObject);
    procedure Test31Click(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Test11Click(Sender: TObject);
var
  mi: TMenuItem;
  i: Integer;
begin
  ShowMessage('Test1');
  MenuItemStrings := TStringList.Create;
  MenuItemStrings.Add('Item 1');
  MenuItemStrings.Add('Item 2');
  for i := 0 to MenuItemStrings.Count - 1 do
  begin
    mi := TMenuItem.Create(self);
    mi.Caption := MenuItemStrings[i];
    if i = 0 then
      mi.OnClick := Test21Click
    else
      mi.OnClick := Test31Click;
    Test1.Add(mi);
  end;
end;

procedure TForm1.Test21Click(Sender: TObject);
begin
  ShowMessage('Test21');
end;

procedure TForm1.Test31Click(Sender: TObject);
begin
  ShowMessage('Test31');
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 3. Jul 2004, 15:01
Und wie soll das ganze dynamisch funktionieren?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#9

Re: MenuItems hinzufügen und mit OnClick ausrüsten

  Alt 27. Mär 2006, 15:36
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 = 'Germanthen
  ...
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
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:25 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