Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Prozedur dynamisch zuweisen


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;

// Benutzung
if Assigned(fOnClick) then
  fOnClick(Self);


Definiert ist TNotifyEvent im übrigen wie folgt.

Delphi-Quelltext
1:
TNotifyEvent = procedure(Sender: TObject) of object;                    


Jann1k - Sa 09.08.08 14:37

Danke, klappt wunderbar