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 MainMenu (https://www.delphipraxis.net/12184-mainmenu.html)

SvenT 22. Nov 2003 15:04


MainMenu
 
Hallo!

Ich habe ein MainMenu mit mehreren Einträgen und auch Untermenus. Wenn ich auf ein Untermenu klicke, möchte ich eine Anweisung ausführen. Nun möchte ich für eine case-Anweisung wissen, welches Untermenu ausgewählt wurde.

Delphi-Quellcode:
  case MainMenu.??? of
  0 : Anweisung1;
  1 : Anweisung2;
  2 : Anweisung3;
  3 : Anweisung4;
  end;
Schon mal Danke im Vorraus.

Gruß
SvenT

neolithos 22. Nov 2003 15:08

Re: MainMenu
 
Delphi-Quellcode:
if Sender = mnuFileNew then ???
else if Sender = mnuFileOpen then ???
else if Sender = mnuFileSave then ???;
In das gemeinsame Click-Ereignis

Luckie 22. Nov 2003 15:14

Re: MainMenu
 
Oder setz die Tag-Eigenschaft und mach es mit case.

choose 22. Nov 2003 15:18

Re: MainMenu
 
Was spricht dagegen, jeweils eine OnClick-Behandlungsroutine zu verwenden?

Wenn sie relativ gleichen Code verwenden sollten, könntest Du das hinbekommen, in sie eine zentrale Methode mit einem geeigneten Parameter aufrufen.

Vorteil: Du kannst die Logik (hier: die zentrale Methode) ohne Wissen um die Menüeinträge (und deren Namen oder Tag-Werte) entwickeln, sie von anderen Punkten aus verwenden, vielleicht sogar ohne ein Fenster. Später können beliebig viele Routinene diese Methode nutzen, zB auch, wenn Du Dich entscheidest, das plötzlich auch ein Button die Logik verwenden soll, oder das Verlassen eines Edit-Feldes zunächst die Methode mit dem Parameter Foo und anschließend mit dem Parameter Bar aufruft...

SvenT 22. Nov 2003 15:22

Re: MainMenu
 
Danke für die schnellen Antworten. Mit dem Sender hatte ich das auch schon. Mit dem Tag hat es bei mir nicht geklappt. Dann werde ich das mit dem Sender machen.

Luckie 22. Nov 2003 15:50

Re: MainMenu
 
So geht es:
Delphi-Quellcode:
procedure TForm1.MenuClick(Sender: TObject);
var
  s: string;
begin
  if (Sender is TMenuItem) then
  begin
    case (Sender as TMenuItem).Tag of
      1: s := (Sender as TMenuItem).Caption;
      2: s := (Sender as TMenuItem).Caption;
    end;
    ShowMessage(s);
  end;
end;
Und das jedem MenüItem zuweisen.

SvenT 22. Nov 2003 16:01

Re: MainMenu
 
Hi Luckie!

Super! Genau das wollte ich. Danke für die Antwort. Aber auch den anderen ein dickes Dankeschön.


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