(Erl) MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

(Erl) MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Beitragvon Hercules » 25. Jun 2015, 10:20 (Erl) MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Hallo an Alle und einen schönen Guten Tag erst mal. :D

Ich möchte zur Laufzeit ein MainMenu1 erstellen,
dazu habe ich auf einer Form ein TMainmenu1 platziert.

Im FormCreate habe ich zur Laufzeit dann zwei Menü-Punkte
mit jeweils drei Untermenü-Punkten erstellt.

Mein Problem ist:

Wenn ich einen Click auf ein solches Untermenü mache,
dann tut sich nichts. Mir ist auch klar, warum sich nichts tut,
denn wie und wo kann ich bei Menü-Punkten, die zur Laufzeit
erstellt wurden, ein OnClick-Ereignis einfügen ?

Ich habe es schon wie ein Weltmeister bei Google versucht,
aber gebracht hat es nicht viel. Ich habe da gerade mal
lernen können, wie man es erstellen kann.

Bitte, was muss ich denn da noch machen ?
Weiß vielleicht jemand, was ich da vergessen habe?

Der Source-Code:

Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, Forms, Graphics, Menus;
type
  { TForm1 }
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    procedure FormCreate(Sender: TObject);
    Procedure NeuesMenu;
    Procedure UnterMenu;
  private
    { private declarations }
  public
    { public declarations }
  end;
var
  Form1: TForm1;
  A : Integer;
  B : Integer;
  C : Integer;
  MenuText : String;
  UnterMenuText : String;
  NeuesItem: TMenuItem;
  UnterItem: TMenuItem;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
MenuText := 'Menü';
UnterMenuText := 'Untermenü';
A := 0;
B := 0;
NeuesMenu;                   // Hinzufügen erstes Menü
UnterMenu;                   // Hinzufügen von drei Untermenüs zum ersten Menü
NeuesMenu;                   // Hinzufügen zweites Menü
UnterMenu;                   // Hinzufügen von drei Untermenüs zum zweiten Menü
end;
// Prozedur zum erstellen von Menü-Punkten
Procedure TForm1.NeuesMenu;
Begin
 A := A + 1;
 NeuesItem := TMenuItem.Create(mainmenu1) ;
 NeuesItem.Caption := MenuText + ' ' + IntToStr(A);
 Mainmenu1.Items.Add(NeuesItem);
end;
// Prozedur zum erstellen von drei Untermenüpunkten
Procedure TForm1.UnterMenu;
Begin
  B := B + 1;
  UnterItem := TMenuItem.Create(mainmenu1);
  UnterItem.Caption := UnterMenuText + ' ' + IntToStr(B);
  NeuesItem.Add(UnterItem);
  B := B + 1;
  UnterItem := TMenuItem.Create(mainmenu1);
  UnterItem.Caption := UnterMenuText + ' ' + IntToStr(B);
  NeuesItem.Add(UnterItem);
  B := B + 1;
  UnterItem := TMenuItem.Create(mainmenu1);
  UnterItem.Caption := UnterMenuText + ' ' + IntToStr(B);
  NeuesItem.Add(UnterItem);
end;
end.


Im Anhang habe ich mal eine GIF-Datei eingefügt, damit man sehen
kann, wie die Wirkung ist, wenn ich die Menüs anklicke.

Mit freundlichen Grüßen,
Hercules.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Hercules am 25. Jun 2015, 18:59, insgesamt 1-mal geändert.
Hercules
 
Beiträge: 101
Registriert: 2. Jun 2010, 16:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon theo » 25. Jun 2015, 10:41 Re: MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Hercules hat geschrieben:denn wie und wo kann ich bei Menü-Punkten, die zur Laufzeit
erstellt wurden, ein OnClick-Ereignis einfügen ?


Im Code, wie alles andere auch.

Code: Alles auswählen
...
MenuItem1.OnClick:=@MenuItem1Click;
...
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
  //
end
theo
 
Beiträge: 7885
Registriert: 11. Sep 2006, 18:01

Beitragvon Hercules » 25. Jun 2015, 12:25 Re: MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Hallo Theo,
vielen Dank für Deine schnelle Antwort.
Dein Tipp hat mich schon ein gutes Stück weiter gebracht.
Jetzt kommt das Programm nach einem Click in
der neuen Prozedur auch an. Dabei ist es allerdings
unerheblich, welchen Menü-Punkt ich anclicke.
Ich muss jetzt nur noch herausfinden, welches Item
ich angeclickt habe. Da bin ich noch nicht ganz durch......

Vielen Dank, Hercules.
Hercules
 
Beiträge: 101
Registriert: 2. Jun 2010, 16:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon baumina » 25. Jun 2015, 12:42 Re: MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Den TMenuItem der geklickt wurde findest du im Sender, z.B. TMenuItem(Sender).Caption .
.
baumina
 
Beiträge: 152
Registriert: 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Hercules » 25. Jun 2015, 13:10 Re: MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Hallo baumina,
danke für die Antwort, aber was muss ich denn als (Sender)
eintragen? Ich glaub, ich steh auf dem Schlauch.....
Hercules.
Hercules
 
Beiträge: 101
Registriert: 2. Jun 2010, 16:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon baumina » 25. Jun 2015, 13:17 Re: MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Um das Beispiel von oben nochmal zu nennen, die Variable Sender wird dir in der Procedure zur Verfügung gestellt.

Code: Alles auswählen
...
MenuItem1.OnClick:=@MenuItem1Click;
...
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
  showmessage('Geklickt wurde: ' + TMenuItem(Sender).Caption);
end;
 
.
baumina
 
Beiträge: 152
Registriert: 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon Hercules » 25. Jun 2015, 13:35 Re: MainMenu1 zur Laufzeit erstellen und darauf zugreifen

Hallo baumina, hallo Theo,
jetzt hab' ich das verstanden und es funktioniert.
Vielen Dank nochmal an Euch beide.
Hercules.
Hercules
 
Beiträge: 101
Registriert: 2. Jun 2010, 16:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

• Themenende •

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried