Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamisches Popup » Procedure mit Parametern (https://www.delphipraxis.net/53842-dynamisches-popup-%BB-procedure-mit-parametern.html)

hibbert 23. Sep 2005 15:21


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:
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;
{...}
doch dabei erhalte ich diese Fehlermeldung des Compilers:
Zitat:

Zitat von Compiler
[Fehler] Unit1.pas(151): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'

Wie kann ich nun die Procedure aufrufen und die Parameter übergeben ?

thx
hibbert

CalganX 23. Sep 2005 15:39

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

hibbert 23. Sep 2005 15:56

Re: Dynamisches Popup » Procedure mit Parametern
 
OK, ich habe meine "Procedur" anders geschrieben:
Delphi-Quellcode:
function tform1.meineproc(pname:string):tnotifyevent;
begin
showmessage(pname);
result:=onClick;
end;
So nun kann ich auch das Project compilieren.

Ich rufe die Procedure, die das PopUpMenü erstellt bei OnFormCreate auf. Da steht ja folgendes drin:
Delphi-Quellcode:
{...}
  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;
{...}
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 :?

warum ?

thx hibbert

CalganX 23. Sep 2005 16:21

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:
procedure TfrmMain.MeinEvent(Sender: TObject);
Außerdem darfst du nur den Namen der Methode ohne Parameter angeben bei der Zuweisung.

Also z.B.:
Delphi-Quellcode:
NewItem(..., MeinEvent, ...);
Chris

hibbert 23. Sep 2005 16:27

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:
procedure tform1.meineproc(Sender: TObject;pname:string);
{...}
aNewItem[i] := NewItem(listbox1.Items[i], 0, False, True, meineproc(listbox1.Items[i]), 0, 'item'+inttostr(i));
doch da bekomme ich diese Meldung:
Zitat:

Zitat von Compiler
[Fehler] Unit1.pas(151): Inkompatible Typen: 'TObject' und 'String'

also mach ich das so:
Delphi-Quellcode:
aNewItem[i] := NewItem(listbox1.Items[i], 0, False, True, meineproc(popupmenu1,listbox1.Items[i]), 0, 'item'+inttostr(i));
da bekomme ich dann diese Fehlermeldung:
Zitat:

Zitat von Compiler
[Fehler] Unit1.pas(151): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'

Wie übergebe ich nun die Parameter ??

hibbert

CalganX 23. Sep 2005 16:38

Re: Dynamisches Popup » Procedure mit Parametern
 
Zitat:

Zitat von Chakotay1308
Delphi-Quellcode:
NewItem(..., MeinEvent, ...);

Ohne Parameter musst du das angeben. Die Parameter weist das entsprechende Objekt selber zu. ;)

Chris

hibbert 23. Sep 2005 16:59

Re: Dynamisches Popup » Procedure mit Parametern
 
Zitat:

Zitat von Chakotay1308
Die Parameter weist das entsprechende Objekt selber zu. ;)

OK und wie siht das ganze dann in meiner Procedure aus ?
Wie erkenne ich jetzt, welches Item angeklickt wurde ?

hibbert

CalganX 23. Sep 2005 19:06

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 Delphi-Referenz durchsuchenClassName) kannst du rausfinden, was das eigentlich ist. ;)
Ich schätze mal, dass in Sender genau das Item drinsteckt, was angeklickt wurde.

Chris

hibbert 23. Sep 2005 19:32

Re: Dynamisches Popup » Procedure mit Parametern
 
ich habe jetzt folgendes gemacht:
Delphi-Quellcode:
procedure tform1.meineproc(Sender: TObject);
begin
showmessage(sender.ClassName);
end;
und das zeigt mir die Messae an:
Zitat:

Zitat von Message
TMenuItem

Das bingt mir jetzt auch nicht wirklich viel :?

hibbert

Grishnak 23. Sep 2005 22:10

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 10:39 Uhr.
Seite 1 von 2  1 2      

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