Autor Beitrag
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Fr 08.08.08 13:10 
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:

ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.
ausblenden 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.
ausblenden Delphi-Quelltext
1:
TNotifyEvent = procedure(Sender: TObject) of object;					

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Jann1k Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 09.08.08 14:37 
Danke, klappt wunderbar