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; 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
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!