AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Probleme beim Form schließen mit neuem Delphi 10.4.2
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim Form schließen mit neuem Delphi 10.4.2

Ein Thema von AuronTLG · begonnen am 11. Mai 2021 · letzter Beitrag vom 18. Mai 2021
Antwort Antwort
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
269 Beiträge
 
Delphi 12 Athens
 
#1

Probleme beim Form schließen mit neuem Delphi 10.4.2

  Alt 11. Mai 2021, 15:39
Moin,

ich habe diese Woche mein Delphi von 10.4.1 auf 10.4.2 (insklusive der drei Patches) geupdatet und habe seitdem ein gravierendes Problem, das mir Kopfzerbrechen bereitet:

Schließe ich eine fast beliebige Form, so bewirkt das, dass sich das gesamte Programm schließt, aber der Prozess in solch einer Form weiterläuft, dass man ihn im Taskmanager killen muss.
Lässt man das ganze im Debugger mit aktivierten Sprachexceptions ablaufen, so passiert dasselbe, ohne dass eine Exception auftritt, nur dass in diesem Fall in der Ausgabe "Thread-Ende" angezeigt wird, das Programm geschlossen ist, aber der Debugger immer noch läuft, bis man ihn per STRG + F2 abbricht.
Vor dem Update auf 10.4.2 hat alles problemlos funktioniert.

Nach dem bisherigen Rumprobieren sind mir folgende Dinge aufgefallen:
  • Das Problem tritt grundsätzlich nur dann auf, wenn man die Form über den Systembutton schließt, NICHT aber, wenn man ESC drückt.
  • Das Problem tritt in bestimmten Forms nicht auf, ohne dass dafür ein besonderer Grund oder Zusammenhang ersichtlich wäre.
  • Das Programm verwendet Styles. Deaktiviert man diese, d.h. durch "TStyleManager.TrySetStyle" auskommentieren, so funktioniert alles. Die Styles beeinflussen auch das Aussehen der Systembuttons.

Momentan sieht das Ganze so aus, als wären die Styles, welche aber bearbeitete vorgefertigte Delphi-Styles sind, die Ursache. Das macht aber irgendwie wenig Sinn...
Hat irgendjemand ne Ahnung, was das sein könnte oder vielleicht sogar ähnliche Probleme gehabt?
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
269 Beiträge
 
Delphi 12 Athens
 
#2

AW: Probleme beim Form schließen mit neuem Delphi 10.4.2

  Alt 11. Mai 2021, 16:21
UPDATE:

Es scheint so, als wäre das Ganze schon als Fehler reported: https://quality.embarcadero.com/browse/RSP-33848
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
269 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme beim Form schließen mit neuem Delphi 10.4.2

  Alt 18. Mai 2021, 15:40
Es scheint so, als hätte ich einen Workaround gefunden...

Diese Konstruktion löst den Fehler aus:

Code:
Form.Create
Form.ShowModal
Form.Release
Form := Nil
Diese nicht:

Code:
Form.Create
Form.ShowModal
Form.Free
Form := Nil
D.h. Free anstatt Release funktioniert.
Man korrigiere mich, sollte ich falsch liegen, aber ein Form.Free nach einem ShowModal sollte in keinem Fall ein Problem sein, oder gibt es Situationen, in denen damit dennoch etwas schiefgehen kann?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Probleme beim Form schließen mit neuem Delphi 10.4.2

  Alt 18. Mai 2021, 16:21
Hallo,
ich habe noch nie Form.Release benutzt.
Mag sein, dass es älteren Delphi-Versionen funktioniert hat,
aber komisch sieht der Quellcode mit dem Release schon aus.

Ah ja die Frage:
Ein Form.Free hat bei mir noch nie einen Fehler erzeugt.


Und wenn danach eh ein nil folgt -> FreeAndNil(FormX)
Heiko

Geändert von hoika (18. Mai 2021 um 16:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: Probleme beim Form schließen mit neuem Delphi 10.4.2

  Alt 18. Mai 2021, 16:37
Release bietet sich an, wenn du das Form in einem Eventhandler freigeben willst, was bei einem Free ungefähr einem Absägen des Astes entspricht auf dem man gerade sitzt.

Das Release sorgt dafür, dass vor der Freigabe erst der aktuelle Event beendet wird und auch alle anderen Messages für das Form abgearbeitet werden. Release wird z.B. auch verwendet, wenn in einem FormClose-Event der Parameter Action auf caFree gesetzt wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz