Man kann Objekte in den eigenen Events freigeben, allerdings nur dann, wenn in den aufrufenden Funktionen nicht nochmal auf das Objekt zugegriffen wird und man das nicht irgendwie unterbinden kann.
Also nach dem END deiner Event-Methode darf nicht nochmal auf das Objekt zugegriffen werden, dann kann man sowas machen.
Close bei der Form kann man überall aufrufen, da es die Form nicht sofort frei gibt, sondern der Form eine Message sendet, in der die Form freigegeben wird.
PS: Da gibt die Form sich dann auch in einer eigenen Methode selber frei.
Zitat:
Ich höre sowieso immer man soll das "ProcessMessages" nicht benutzen... warum ist mir entgangen...
Weil das "unvorhersehbare" Aktionen an der Stelle ausführt und das den aktuellen Arbeitspfad stören könnte?
Delphi-Quellcode:
Form.Caption := 'blubb';
Form.Close;
Application.ProcessMessages; // oder ShowMessage('Hallo');
ShowMessage(Form.Caption); // peng...
Neben der Message für CM_RELEASE können/werden hier auch noch viele andere Messages ausgeführt.
Es braucht also nichtmal Form.Close, wenn du z.B. vorher auf das [X] der Form klickst, aber das Ereignis/die Message erst jetzt verarbeitet würde.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Button1.Tag := 1; // eine globale Variable
for i := 1 to 15 do begin
Sleep(1000);
Application.ProcessMessages;
Memo1.Lines.Add(Format('%d %d', [i, Button1.Tag]));
Button1.Tag := Button1.Tag + 1;
end;
end;
Knopf drücken und nach über 15 Sekunden nochmal drücken
und dann auch einmal Knopf drücken und innerhalb der 15 Sekunden nochmal drücken.