Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Menüs zur Laufzeit ok, aber wie anwählen? (https://www.delphipraxis.net/21310-menues-zur-laufzeit-ok-aber-wie-anwaehlen.html)

TheMiller 30. Apr 2004 18:15


Menüs zur Laufzeit ok, aber wie anwählen?
 
Hi Leute,

ich erstelle Menüs (ist jetzt nur ein Test) zur Laufzeit. Wie kann ich aber eine Prozedur schreiben, in der ich die Menüs auch anwählen kann. Mein Code sieht bis jezt so aus:

Delphi-Quellcode:
var fav:TMenuItem;
    a : Integer;
begin
   for a:=0 to 20 do begin
   fav:=TMenuItem.Create(Self);
   fav.Caption:=Edit1.Text+' '+(inttostr(a));
   MainMenu1.Items.Items[0].Add(fav);
Wäre cool, wenn ihr mir helfen könnt!

alcaeus 30. Apr 2004 18:23

Re: Menüs zur Laufzeit ok, aber wie anwählen?
 
Was meinst du denn mit Anwählen? Anklicken?
Delphi-Quellcode:
procedure MenueClick(Sender: TObject);
...
fav.OnClick := MenueClick;

Luckie 30. Apr 2004 18:23

Re: Menüs zur Laufzeit ok, aber wie anwählen?
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Button1: TButton;
    mnuFile: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure MyMenuItemOnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyMenuItemOnClick(Sender: TObject);
begin
  case (Sender as TMenuItem).Tag of
    0: ShowMessage((Sender as TMenuItem).Caption);
    1: ShowMessage((Sender as TMenuItem).Caption);
    2: ShowMessage((Sender as TMenuItem).Caption);
    3: ShowMessage((Sender as TMenuItem).Caption);
    4: ShowMessage((Sender as TMenuItem).Caption);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  NewItem: TMenuItem;
  i: Integer;
begin
  for i := 0 to 4 do
  begin
    NewItem := TMenuItem.Create(Form1);
    NewItem.Caption := IntToStr(i);
    NewItem.Tag := i;
    NewItem.OnClick := MyMenuItemOnClick;
    mnuFile.Add(NewItem);
  end;
end;

GuenterS 4. Mai 2004 21:16

Re: Menüs zur Laufzeit ok, aber wie anwählen?
 
Du könntest auch dem Name Property etwas zuweisen und dann aufgrund des Namens die auszuführende Action wählen...
Dann könntest Du den Tag nach Belieben auch nochanderweitig verwenden.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Button1: TButton;
    mnuFile: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure MyMenuItemOnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyMenuItemOnClick(Sender: TObject);
begin
  if (Sender is TMenuItem) then
  case StrToIntDef(TMenuItem(Sender).Name,-1) of
    0: ShowMessage((Sender as TMenuItem).Caption);
    1: ShowMessage((Sender as TMenuItem).Caption);
    2: ShowMessage((Sender as TMenuItem).Caption);
    3: ShowMessage((Sender as TMenuItem).Caption);
    4: ShowMessage((Sender as TMenuItem).Caption);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  NewItem: TMenuItem;
  i: Integer;
begin
  for i := 0 to 4 do
  begin
    NewItem := TMenuItem.Create(Form1);
    NewItem.Caption := IntToStr(i);
    NewItem.Name := IntToStr(i);
    NewItem.OnClick := MyMenuItemOnClick;
    mnuFile.Add(NewItem);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 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