AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dynamisches Popup » Procedure mit Parametern
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Popup » Procedure mit Parametern

Ein Thema von hibbert · begonnen am 23. Sep 2005 · letzter Beitrag vom 24. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von hibbert
hibbert

Registriert seit: 26. Aug 2003
Ort: Berlin
262 Beiträge
 
Delphi 2005 Personal
 
#1

Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 15:21
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 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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 15:39
Hi,
naja... du rufst meineproc als eine Funktion auf, aber in Wirklichkeit ist es eine Prozedur. Irgendwie kann das nicht ganz gehen.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von hibbert
hibbert

Registriert seit: 26. Aug 2003
Ort: Berlin
262 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 15:56
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Dynamisches Popup » Procedure mit Parametern

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

Also z.B.:
NewItem(..., MeinEvent, ...); Chris
  Mit Zitat antworten Zitat
Benutzerbild von hibbert
hibbert

Registriert seit: 26. Aug 2003
Ort: Berlin
262 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 16:27
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 von Compiler:
[Fehler] Unit1.pas(151): Inkompatible Typen: 'TObject' und 'String'
also mach ich das so:
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 von Compiler:
[Fehler] Unit1.pas(151): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'
Wie übergebe ich nun die Parameter ??

hibbert
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 16:38
Zitat von Chakotay1308:
NewItem(..., MeinEvent, ...);
Ohne Parameter musst du das angeben. Die Parameter weist das entsprechende Objekt selber zu.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von hibbert
hibbert

Registriert seit: 26. Aug 2003
Ort: Berlin
262 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 16:59
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 19:06
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
  Mit Zitat antworten Zitat
Benutzerbild von hibbert
hibbert

Registriert seit: 26. Aug 2003
Ort: Berlin
262 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 19:32
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 von Message:
TMenuItem
Das bingt mir jetzt auch nicht wirklich viel

hibbert
  Mit Zitat antworten Zitat
Benutzerbild von Grishnak
Grishnak

Registriert seit: 15. Sep 2005
Ort: Neu-Ulm
111 Beiträge
 
RAD-Studio 2009 Arc
 
#10

Re: Dynamisches Popup » Procedure mit Parametern

  Alt 23. Sep 2005, 22:10
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!
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 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