![]() |
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:
Wobei 'AddPopMenue' alle Tabellennamen einer DB zum Popupmenue hinzufügt.
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; 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! |
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; |
Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
Zitat:
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; |
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; |
Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
Hi,
Zitat:
Ach Mensch! Stimmt! Ich muss jedem Item die Eventbehandlung einzeln zuweisen! Danke Leute! |
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:
|
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: |
Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
Zitat:
|
Re: PopupMenü.Items.OnClick neue Prozedur zuweisen
Das dürfte ja nicht das Problem sein:
Code:
OK, der kleine Fehler wurde behoben :roll:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz