![]() |
Dynamisches Popup » Procedure mit Parametern
Hi,
ich habe ein Popupmenü welches ich dynamisch erzeuge. Nun soll der User auf ein Item klicken können und eien Procedure mit Parametern soll aufgerufen werden:
Delphi-Quellcode:
doch dabei erhalte ich diese Fehlermeldung des Compilers:
procedure tform1.meineproc(pname:string);
begin showmessage(pname); end; {...} aNewItem : array of TMenuItem; begin setlength(aNewItem,11); for i:= 0 to 10 do begin aNewItem[i] := NewItem(listbox1.Items[i], 0, False, True, meineporc(listbox1.Items[i]), 0, 'item'+inttostr(i)); end; {...} Zitat:
thx hibbert |
Re: Dynamisches Popup » Procedure mit Parametern
Hi,
naja... du rufst meineproc als eine Funktion auf, aber in Wirklichkeit ist es eine Prozedur. Irgendwie kann das nicht ganz gehen. :zwinker: Chris |
Re: Dynamisches Popup » Procedure mit Parametern
OK, ich habe meine "Procedur" anders geschrieben:
Delphi-Quellcode:
So nun kann ich auch das Project compilieren.
function tform1.meineproc(pname:string):tnotifyevent;
begin showmessage(pname); result:=onClick; end; Ich rufe die Procedure, die das PopUpMenü erstellt bei OnFormCreate auf. Da steht ja folgendes drin:
Delphi-Quellcode:
so wenn ich mein Projekt jetzt starte, dann wird aber gleich meine Procedur meineproc ausgeführt, undzwar 11 mal, klicke ich aber auf ein erzeugtes Item passiert nix :?
{...}
aNewItem : array of TMenuItem; begin setlength(aNewItem,11); for i:= 0 to 10 do begin aNewItem[i] := NewItem(listbox1.Items[i], 0, False, True, meineporc(listbox1.Items[i]), 0, 'item'+inttostr(i)); end; {...} warum ? thx hibbert |
Re: Dynamisches Popup » Procedure mit Parametern
Hi,
ah... ich denke ich habe das etwas anders verstanden. Egal, jetzt weiß ich was das Problem ist: du willst eine eigene Methode als Ereignis zuweisen. Das Problem ist nur, dass deine Methode kein Ereignis ist, sonder eine einfache Methode. Du musst daraus schon ein "TNotifyEvent" machen. Also deine Methode muss ungefähr so aussehen:
Delphi-Quellcode:
Außerdem darfst du nur den Namen der Methode ohne Parameter angeben bei der Zuweisung.
procedure TfrmMain.MeinEvent(Sender: TObject);
Also z.B.:
Delphi-Quellcode:
Chris
NewItem(..., MeinEvent, ...);
|
Re: Dynamisches Popup » Procedure mit Parametern
hi,
das habe ich auch schon versuicht, aber ich möchte ja noch zusaätzlich Variablen übergeben:
Delphi-Quellcode:
doch da bekomme ich diese Meldung:
procedure tform1.meineproc(Sender: TObject;pname:string);
{...} aNewItem[i] := NewItem(listbox1.Items[i], 0, False, True, meineproc(listbox1.Items[i]), 0, 'item'+inttostr(i)); Zitat:
Delphi-Quellcode:
da bekomme ich dann diese Fehlermeldung:
aNewItem[i] := NewItem(listbox1.Items[i], 0, False, True, meineproc(popupmenu1,listbox1.Items[i]), 0, 'item'+inttostr(i));
Zitat:
hibbert |
Re: Dynamisches Popup » Procedure mit Parametern
Zitat:
Chris |
Re: Dynamisches Popup » Procedure mit Parametern
Zitat:
Wie erkenne ich jetzt, welches Item angeklickt wurde ? hibbert |
Re: Dynamisches Popup » Procedure mit Parametern
Hi,
ich schätze über den Parameter Sender. Dieser ist zwar vom Typ TObject, aber über ein wenig rumspielen (z.B. mit der Eigenschaft ![]() Ich schätze mal, dass in Sender genau das Item drinsteckt, was angeklickt wurde. Chris |
Re: Dynamisches Popup » Procedure mit Parametern
ich habe jetzt folgendes gemacht:
Delphi-Quellcode:
und das zeigt mir die Messae an:
procedure tform1.meineproc(Sender: TObject);
begin showmessage(sender.ClassName); end; Zitat:
hibbert |
Re: Dynamisches Popup » Procedure mit Parametern
TMenuItem hat - wie alle von TComponent abgeleiteten Klassen - ein Property mit Namen "Tag". Darin kannst du ein Integer-Wert abspeichern und über ihn den Sender eindeutig identifizieren!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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