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 PopupMenü.Items.OnClick neue Prozedur zuweisen (https://www.delphipraxis.net/20339-popupmenue-items-onclick-neue-prozedur-zuweisen.html)

barnti 16. Apr 2004 09:19


PopupMenü.Items.OnClick neue Prozedur zuweisen
 
Hallo,
ich habe eine Popupmenü, zu dem ich zur Laufzeit MenüItems hinzufüge. Jetzt möchte ich jedem Item den Eventhandler
'OnClick' zuweisen. Wird ein Item im PopupMenu geklickt, soll diese Prozedur ausgeführt werden.

Meine Vorgenhensweise:
Delphi-Quellcode:
procedure TForm_Main.FormCreate(Sender: TObject);
begin
  PopupMenu1.Items.OnClick:= PopMenuOnClick;
end;


procedure TForm_Main.PopMenuOnClick(Sender: TObject);
begin
  Showmessage('Klick!')
end;


procedure AddPopMenue(Tablename: String);
var Item: TMenuItem;
begin
  Item:= TMenuItem.Create(Form_Main.PopupMenu1);
  Item.Caption:= Tablename;
  Form_Main.PopupMenu1.Items.Add(Item);
end;
Wobei 'AddPopMenue' alle Tabellennamen einer DB zum Popupmenue hinzufügt.

Leider geht es so nicht. Die Prozedur in 'FormCreate' wird zwar zugewiesen, aber beim Klick auf einen PopupmenüItem wird die Prozedur 'PopMenuOnClick' nicht ausgeführt?!

Wo liegt mein Fehler? Habe ich die Prozedur falsch zugewiesen? Kann ich überhaupt jedem Item so diese Prozedur zuweisen?

Danke!

himitsu 16. Apr 2004 09:24

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
und wie sieht es damit aus?

Code:
procedure AddPopMenue(Tablename: String);
var Item: TMenuItem;
begin
  Item:= TMenuItem.Create(Form_Main.PopupMenu1);
  Item.Caption:= Tablename;
  [color=red]Item.OnClick:= Form_Main.PopMenuOnClick;[/color]
  Form_Main.PopupMenu1.Items.Add(Item);
end;

Sharky 16. Apr 2004 09:27

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
Zitat:

Zitat von himitsu
und wie sieht es damit aus?...

Dann wird der Compiler schimpfen weil er PopMenuOnClick nicht kennt denke ich.

Code:
procedure [color=red]TForm_Main.[/color]AddPopMenue(Tablename: String);
var Item: TMenuItem;
begin
  Item:= TMenuItem.Create(Form_Main.PopupMenu1);
  Item.Caption:= Tablename;
  item.OnClick := PopMenuOnClick;
  Form_Main.PopupMenu1.Items.Add(Item);
end;

Luckie 16. Apr 2004 09:28

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
Soll das so was werden:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    procedure Button1Click(Sender: TObject);
    procedure PopupItemClick(Sender: TObject);
  private
    { Private declarations }
    ItemCount: Cardinal;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PopupItemClick(Sender: TObject);
begin
  case (Sender as TMenuItem).Tag of
  1: ShowMessage(IntToStr((Sender as TMenuItem).Tag));
  2: ShowMessage(IntToStr((Sender as TMenuItem).Tag));
  else
    ShowMessage('foo');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Item: TMenuItem;
begin
  Inc(ItemCount);
  Item := TMenuItem.Create(PopupMenu1);
  Item.Caption := IntToStr(ItemCount);
  Item.Tag := ItemCount;
  Item.OnClick := PopupItemClick;
  PopupMenu1.Items.Add(Item);
end;

barnti 16. Apr 2004 09:38

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
Hi,

Zitat:

Zitat von Luckie
Soll das so was werden:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    procedure Button1Click(Sender: TObject);
    procedure PopupItemClick(Sender: TObject);
  private
    { Private declarations }
    ItemCount: Cardinal;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PopupItemClick(Sender: TObject);
begin
  case (Sender as TMenuItem).Tag of
  1: ShowMessage(IntToStr((Sender as TMenuItem).Tag));
  2: ShowMessage(IntToStr((Sender as TMenuItem).Tag));
  else
    ShowMessage('foo');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Item: TMenuItem;
begin
  Inc(ItemCount);
  Item := TMenuItem.Create(PopupMenu1);
  Item.Caption := IntToStr(ItemCount);
  Item.Tag := ItemCount;
  Item.OnClick := PopupItemClick;
  PopupMenu1.Items.Add(Item);
end;

Genau!
Ach Mensch! Stimmt! Ich muss jedem Item die Eventbehandlung einzeln zuweisen!

Danke Leute!

Luckie 16. Apr 2004 09:39

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
Bin ich nicht gut? Bin ich nicht genial? Nun sagt schon und spart nicht mit Lob, ich habe es verdient. :mrgreen: :zwinker:

himitsu 16. Apr 2004 09:42

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
ich war schneller :mrgreen:

@Sharky
ich hab ja nur die Änderung gepostet - PopMenuOnClick stand ja schon bei barnti drin :wink:

Sharky 16. Apr 2004 09:46

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
Zitat:

Zitat von himitsu
.... PopMenuOnClick stand ja schon bei barnti drin :wink:

Aber seine Procedure zum erstellen der Items war nicht bei der TForm deklariert. Darum mein Hinweis :stupid:

himitsu 16. Apr 2004 09:56

Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
 
Das dürfte ja nicht das Problem sein:
Code:
procedure AddPopMenue(Tablename: String);
var Item: TMenuItem;
begin
  Item:= TMenuItem.Create([color=red]Form_Main.[/color]PopupMenu1);
  Item.Caption:= Tablename;
  Item.OnClick:= [color=red]Form_Main.[/color]PopMenuOnClick;
  [color=red]Form_Main.[/color]PopupMenu1.Items.Add(Item);
end;
OK, der kleine Fehler wurde behoben :roll:


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