Und TierhalterFrm ist auch wirklich die Instanz von Form1, in der der gezeigte Aufruf von Form2 ausgeführt wurde,
Du nutzt aber nicht zufällig die globale Variable der Form1?
Wenn ja, bist'e dir sicher, dass diese Form1 zu dem Zeitpunkt noch da ist?
Niemand weiß, wie TTierhalterFrm erstellt wurde, aber wenn ich den Hauch von Code sehe, wie TPatientenblattFrm erstellt wurde, dann hätte ich da auch große Zweifel.
Was ist nun eigentlich das Problem, oder hab ich hier wirklich übersehn, dass irgendwo der "Fehler" genannt wurde?
Wie funktioniert PostMessage? (von form zu form) habe es noch nie benutzt.
Genauso, wie immer Form.Handle, Edit.Handle .... das THandle (eigentlich HWND) des WinControl.
Dieses gibt man zu Beginn dem mit, welcher es dann später aufrufen soll.
in der Fomm dann entweder global reinhängen
procedure WndProc(var Message: TMessage); override;
oder explit
procedure WMMyMessage(var Message: TMessage); message WM_MYMESSAGE;
Als MessageID entweder mit WM_USER+x oder
RegisterWindowMessage.
Will man den Code ordentlich trennen, dann darf Form2 garnichts von Form1 wissen,
drum übergibt man im Constructor oder via Property das Event.
Delphi-Quellcode:
type
TForm1 = class(TForm)
...
public
procedure MyCallback;
end;
// hab hier einen vordefinieren Typen aus System.Classes verwendet
//TThreadMethod = procedure of object;
TForm2 = class(TForm)
...
private
FCallback: TThreadMethod;
public
constructor Create(Owner: TComponent; ....; Callback: TThreadMethod);
end;
TForm2.Create(...., MyCallback);
constructor TForm2.Create(Owner: TComponent; ....; Callback: TThreadMethod);
begin
inherited Create(Owner);
FCallback := Callback;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
if Assigned(FCallback) then
Callback();
end;