Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - FUnktionzeiger vergleichen


Timbo - Di 25.04.06 16:30
Titel: FUnktionzeiger vergleichen
Hallo,

ich habe eine variable, die ich mit einer Procedure belegen kann. möchte aber vorm ausführen testen, ob sie belegt ist... leider mekert der compiler



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
TFunction = procedure of Object;
VarFunction: TFunction;

procedure MachWas;
begin
  showmessage('Hallo');
end;

procedure VarFunctionRuecksetzen;
begin
  VarFunction:= nil;
end;

procedure VarFunctionSetzen;
begin
  VarFunction:= MachWas;
end;

procedure VarFunctionAusfuehren;
begin
  if VarFunction <> nil then VarFunction; //hier ist das problem, "incompatible Types"
end;


hat jemand eine idee, wie ich das machen kann?

ein workaround wäre das hier:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure VarFunctionRuecksetzen;
begin
  VarFunction:= doNothing;
end;

procedure doNothing;
begin
  //
end;

procedure VarFunctionAusfuehren;
begin
  doNothing;
end;


vielen dank.
tim.


BenBE - Di 25.04.06 20:19


Delphi-Quelltext
1:
@VarFunction <> nil                    


Referenzen-Vergleiche immer mit @ davor ...


Timbo - Di 25.04.06 20:26

Bingo, danke.


Simon Joker - Mi 26.04.06 10:43

Vernünftigerweise sollte man die Funktion

Delphi-Quelltext
1:
function Assigned(const P): Boolean;                    

nutzen. Das ist eigentlich Standard und wird für jegliche CallBack-Events der VCL genutzt.
Du mußt dich dann auch nicht kümmern, ob du einen Pointer oder eine Procedural-Variable testest.

Bespiel OnClick-Event mit TNotifyEvent.

Delphi-Quelltext
1:
2:
3:
4:
...
if Assigned(FOnClick) then
  FOnClick(Self);
...


MfG Simon