Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Exception in IsFormSizeStored

  Alt 13. Apr 2021, 12:49
Die VCL hat nach dem ShowModal das Windows-Control (HWND) der nicht mehr sichtbaren TForm bereits freigegeben.
Im Release wird aber auf das Handle zugegriffen *1 und weil es nicht mehr da ist, wird das Windows-Control neu erstellt, um danach erneut freigegeben zu werden.
Da gibt es wohl ein kleines Problemchen.

1) das Handle wird gebraucht, um dem Fenster eine Message zu schicken "gib dich frei", was aber erst "irgendwann" nach dem letzten END; ausgeführt wird, sobald die VCL jene Message verarbeitet.
Und Free gibt direkt frei, ohne unnötige Umwege.


Es passiert nicht immer, aber in der VCL ist es möglich die gekapselten Windows-Controls freizugeben, wenn sie nicht benötigt werden, um Systemressourcen zu sparen.
Und hier passiert es zufällig mal.
Das ist z.B. der Grund, warum manchmal Dinge "verschwinden", welche man selbst direkt über die WinAPI gemacht hat, weil beim Wiederherstellen die VCL davon natürlich nichts weiß.


Und warum für eine lokale Sache diese besch*** globalen Variablen benutzen?
Am Besten löscht man diese Variablen und kommt dann garnicht erst auf die Idee sie verwenden zu wollen.

Delphi-Quellcode:
procedure TMainDlg.ShowAbrechnungDlg;
var
  Dlg: TAbrechnungDlg;
begin
  Dlg := TAbrechnungDlg.Create(nil); // oder mit Self statt nil
  try
    Dlg.ShowModal;
  finally
    Dlg.Free;
  end;
end;

// ab 10.4
procedure TMainDlg.ShowAbrechnungDlg;
begin
  var Dlg := TAbrechnungDlg.Create(nil); // oder mit Self statt nil
  try
    Dlg.ShowModal;
  finally
    Dlg.Free;
  end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Apr 2021 um 12:59 Uhr)
  Mit Zitat antworten Zitat