Wie kann ich die Wert einer Variablen, die einen Zeiger auf eine Funktion mit einer Funktionsadresse enthält?
Ich bearbeite gerade einen Code, der in Delphi 2007 nicht funktioniert. Die Erklärung ist:
var
EditorFrameWindow: Function: HWnd Of Object = Nil;
In einer Formularaktivierung, habe ich:
procedure TEditForm.FormActivate(Sender: TObject);
begin
EditorFrameWindow := GetFrameWindow;
end;
Und im Formular Deaktivierung habe ich:
procedure TEditForm.FormDeactivate(Sender: TObject);
begin
if EditorFrameWindow = GetFrameWindow then
EditorFrameWindow := nil;
end;
Was also passiert, ist, dass das Formular zweimal deaktiviert wird, und es schlägt fehl, da nichts anderes aktiviert wurde. FormDeactivate wird aufgerufen, es passt, und das globale EditorFrameWindow wird auf (null,null) gesetzt (laut Debugger). Dann wird es erneut aufgerufen, und die in der Variablen gespeicherte Funktion wird aufgerufen, aber natürlich ist keine gespeichert, also springt es durch nil und erzeugt eine Ausnahme.
Was sollte ich tun, um dies zu verhindern? (Das Framework wurde auf ein Registerkartensystem umgestellt, so dass sich die Bedienung wahrscheinlich geändert hat).