Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Sichtbares Fenster kann nicht in modales geändert werden (https://www.delphipraxis.net/212691-sichtbares-fenster-kann-nicht-modales-geaendert-werden.html)

striderx 15. Mär 2023 22:48

Sichtbares Fenster kann nicht in modales geändert werden
 
Bei einer Anwendung, die bereits seit ein paar Wochen läuft, ist jetzt die Meldung 'Sichtbares Fenster kann nicht in modales geändert werden' gekommen. Und zwar an einer Stelle, an der mit ShowModal eine (bei Programmstart automatisch generierte) Form auf gerufen wird.

Diese Fehlermeldung kommt wohl dann, wenn man eine Form aufruft, bei der Visible auf True steht. Da ich den Fehler nicht nachstellen kann und er zuvor auch nicht aufgetaucht ist, bis ich jetzt ziemlich ratlos. Das einzige, was mir einfällt, ist vor dem ShowModal die Visible-Eigenschaft der aufzurufenden Form Visible explizit auf False zu setzen.


Hat jemand eine Idee?

himitsu 15. Mär 2023 23:13

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Du hast doch schon den Grund und die Lösung?

Im FormDesigner sollte Visible nicht auf True stehen.
(oder vorher eben Hide, bzw. Visible:=False)



Und warum werden sinnlos ALLE Forms beim Start automatisch erzeugt?
Forms die man nur kurz und/oder selten benötigt, werden dann erstellt (selber das Create ausführen), wenn man sie braucht und anschließend wieder freigeben.

striderx 15. Mär 2023 23:23

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Zitat:

Zitat von himitsu (Beitrag 1519925)
Du hast doch schon den Grund und die Lösung?

Im FormDesigner sollte Visible nicht auf True stehen.
(oder vorher eben Hide, bzw. Visible:=False)

Im Form-Designer steht/stand Visible auf False.

himitsu 16. Mär 2023 01:40

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Tja, dann hast du entweder irgendwo ein .Visible:=True oder ein .Show

oder in der automatischen Reihenfolge ist diese Form die Erste.
Die erste Form (über Application.CreateForm) ist immer die MainForm
und die MainForm wird immer atomatisch sichtbar gemacht ... somit wäre diese Form entweder falsch eine Main oder du bist falsch und es ist ein Fehler sie selber nochmals sichtbar machen zu wollen.


Zitat:

Da ich den Fehler nicht nachstellen kann und er zuvor auch nicht aufgetaucht ist
Würde jemand eine Versionierung benutzen, oder einen Blick in die Historie werfen,
dann würde Dieser schnell wissen, was sich geändert hat und eventuell auch warum es plötzlich nicht mehr geht.

striderx 16. Mär 2023 06:59

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Zitat:

Zitat von himitsu (Beitrag 1519927)
Tja, dann hast du entweder irgendwo ein .Visible:=True oder ein .Show

oder in der automatischen Reihenfolge ist diese Form die Erste.
Die erste Form (über Application.CreateForm) ist immer die MainForm
und die MainForm wird immer atomatisch sichtbar gemacht ... somit wäre diese Form entweder falsch eine Main oder du bist falsch und es ist ein Fehler sie selber nochmals sichtbar machen zu wollen.

Da gibt es kein ".Visible:=True oder ein .Show ", und die Form ist auch nicht die erste, die erstellt wird.


Zitat:

Zitat von himitsu (Beitrag 1519927)
Würde jemand eine Versionierung benutzen, oder einen Blick in die Historie werfen,
dann würde Dieser schnell wissen, was sich geändert hat und eventuell auch warum es plötzlich nicht mehr geht.

Wie gesagt: Die Anwendung ist seit einiger Zeit unverändert gelaufen, ohne dass der Fehler aufgetaucht ist. Und reproduzieren kann ich ihn jetzt auch nicht.

Die selbe Fehlermeldung kommt übrigens auch, wenn die aufgerufende Form Enabled = False hat (was hier nicht der Fall ist).

haentschman 16. Mär 2023 07:28

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Moin...8-)

Zitat:

Bei einer Anwendung, die bereits seit ein paar Wochen läuft
Du hast vergessen zu erwähnen:
1. Debug Modus in der Entwicklung?
2. Release Modus in der Entwicklung?
3. Release beim "Kunden"?
4. MadExcept oder EurekaLog vorhanden?
5. Versionskontrollsystem vorhanden?

striderx 16. Mär 2023 09:26

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Zitat:

Zitat von haentschman (Beitrag 1519932)
Moin...8-)

Zitat:

Bei einer Anwendung, die bereits seit ein paar Wochen läuft
Du hast vergessen zu erwähnen:
1. Debug Modus in der Entwicklung?
2. Release Modus in der Entwicklung?
3. Release beim "Kunden"?
4. MadExcept oder EurekaLog vorhanden?
5. Versionskontrollsystem vorhanden?

Debug Mode beim Kunden
Kein Madexcept oder EurekaLog
VCS m.E. hier nicht relevant, da unveränderte Version seit einiger Zeit ohne diesen Fehler läuft

haentschman 16. Mär 2023 11:57

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Zitat:

VCS m.E. hier nicht relevant
Schon relevant. Weil du ggf. einen Schritt zurück machen kannst bzw. zu sehen was konkret geändert wurde.
Zitat:

da unveränderte Version seit einiger Zeit ohne diesen Fehler läuft
Ist ist Delphi aktualisiert worden? Die Version mit der neuen Version compiliert worden?
Zitat:

Kein Madexcept oder EurekaLog
Schlecht! Dann wüßtest du WO (Zeilennummer) das ausgelöst wird!

himitsu 16. Mär 2023 12:42

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Das wo weiß er ja so auch schon.
-> da wo er ShowModal aufruft

Man könnte sich z.B. ins OnShow der Form hängen, und schauen wo es vorher sichtbar gemacht wird.

striderx 16. Mär 2023 18:29

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Nachdem schließlich ein Start des Programms jedes Mal zu einer Access Violation in GDI32Full.DLL führte, ist der PC neu aufgesetzt worden und seit her ist kein Fehler mehr aufgetreten (Daumen drücken).

Kann soetwas wirklich von soetwas kommen? :gruebel:

Blup 17. Mär 2023 20:00

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Ohne den Quelltext deine Anwendung zu kennen, ist das nur ein Ratespiel.
Du verwendest die Form-Variablen die Delphi automatisch zu jedem Formular anlegt?
Hast du sichergestellt das diese Variablen wieder auf nil gesetzt werden, wenn das entsprechende Formular freigegeben wird?
Falls nähmlich nicht, zeigen diese Variablen dann auf einen Speicherbereich, der alles mögliche enthält, nur kein Formular.
Das führt dann zu interessanten Effekten, z.B. so wie du sie beschrieben hast.

jaenicke 17. Mär 2023 22:32

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Zitat:

Zitat von striderx (Beitrag 1519964)
Kann soetwas wirklich von soetwas kommen? :gruebel:

Ja, allerdings kann das auch ein schlechtes Zeichen sein. Das Speicherlayout hängt von vielen Faktoren ab, z.B. davon, welche Treiber geladen sind usw., so dass nach einer Neuinstallation z.B. Speicheradressen belegt sein können, die es vorher nicht waren oder umgekehrt. Wenn nun im Programm ein Fehler enthalten ist, kann das dazu führen, dass der Fehler rein zufällig nicht mehr auftritt.

Letztlich bleibt nur zu schauen, ob dieser Fehler erneut auftritt oder auch ob andere Speicherfehler auftreten. Außerdem sollte FastMM im FullDebugMode mal mit laufen. Bei vielen Speicherfehlern schlägt das sofort an.

himitsu 17. Mär 2023 23:16

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
In Windows nun per Standard und auch in neuen Delphi11-Projekten ist auch noch ASLR standardmäßig aktiv.

Witzig, was da alles für Fehler nun auffallen.

striderx 18. Mär 2023 07:21

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
Zitat:

Zitat von jaenicke (Beitrag 1520018)
Letztlich bleibt nur zu schauen, ob dieser Fehler erneut auftritt oder auch ob andere Speicherfehler auftreten.

Ja, das ist wohl leider so.

Allerdings finde ich die Fehlermeldung selbst schon problematisch. Wenn man in die Source von Showmodal schaut, dann findet man:

Delphi-Quellcode:
if Visible or not Enabled or (fsModal in FFormState) or
    (FormStyle = fsMDIChild) then
    raise EInvalidOperation.Create(SCannotShowModal);
D.h. die selbe Nachricht kommt auch in drei ganz anderen Fällen.

himitsu 18. Mär 2023 09:39

AW: Sichtbares Fenster kann nicht in modales geändert werden
 
zwei

fsModal bedingt auch Visible=True
und fsMDIChild sind auch immer sichtbar.



Der Name der Konstante ist aber korrekt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz