Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#11

AW: Formular korrekt Freigeben

  Alt 2. Jun 2016, 13:33
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Jun 2016 um 13:38 Uhr)
  Mit Zitat antworten Zitat