Jann1k - Fr 08.08.08 13:10
Titel: Prozedur dynamisch zuweisen
Ich habe ein problem damit eine Prozedur für eine Klasse dynamisch zuzuweisen, hab schon mehrere Threads dazu gefunden aber irgendwie hat keiner weitergeholfen:
Erstmal mein "Stück" Quellltext:
Meine Klasse:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type Tmenuepunkt=class(TObject) private public name:string; posi:Tpoint; width,height:integer; farbe:Tcolor; change:boolean; constructor create(pname:string;pposi:Tpoint;pwidth,pheight:integer;pchange:boolean); published procedure onclick(sender:tobject); end; |
Und meine Prozedurzuweisung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var punkt:tmenuepunkt;
...
punkt:=tmenuepunkt.create('Neues Spiel',Point(378,200),193,25,true); punkt.onclick:=option1; |
Die Prozedur option1 hat dieselbe Paramterliste wie die onclick Prozedur. Der Compiler spuckt mir aber "Not enough actual Parameters" als Fehler aus.
Ich weiß nicht ob es wichtig ist, aber die Klasse TmenuePunkt und die Prozedur Option1 sind in verschiedenen Units.
MfG
Basti
Lossy eX - Fr 08.08.08 13:59
Du musst das OnClick natürlich auch als Prozedurzeiger ausweisen. Also aktuell handelt es sich bei OnClick um eine echte Funktion die aufgerufen werden kann. Ein Prozedurzeiger aber hingegen ist eine Variable auf die eine Methode zugewiesen werden kann.
Für OnClick gibt es bereits ein vorgefertigten Typen. Nämlich TNotifyEvent. Dann könnte das so aussehen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private fOnClick: TNotifyEvent; publisched property OnClick: TNotifyEvent read fOnClick write fOnClick; end;
if Assigned(fOnClick) then fOnClick(Self); |
Definiert ist TNotifyEvent im übrigen wie folgt.
Delphi-Quelltext
1:
| TNotifyEvent = procedure(Sender: TObject) of object; |