Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Delphi Showmodal ist nicht modal (https://www.delphipraxis.net/146329-showmodal-ist-nicht-modal.html)

wadriller 18. Jan 2010 09:42


Showmodal ist nicht modal
 
Hallo zusammen.

Ich habe ein recht kurioses Problem.

Wir haben einen Anwendung mit einem Hauptfenster. Hier liegt ein Grid mit Datensätzen.
Beim Doppelklick auf einen Datensatz wird ein Fenster Modal (showmodal) angezeigt.
Aus dem Modalen Fenster wird dann ein weiteres Fenster Modal aufgerufen.

Jetzt habe ich im Hintergrund mein Hauptfenster, modal darüber meine erste Form und modal über dieser wieder meine zweite Form.

Soweit so gut.

Jetzt wechselt der Nutzer in eine Fremdsoftware. Diese wird komplett im Vollbild angezeigt (legt sich komplett vor die Windowstaskleiste und hat keinen Minimierenknopf).
Wenn der Nutzer aus der Fremdsoftware jetzt wieder in unsere Software wechseln will, drückt er die Windowstaste und klickt auf der Taskleiste auf unsere Software.

Jetzt kommt es manchmal vor das dann das Hauptfenster zu sehen ist und im Hintergrund sind die 2 (eigentlich) modalen Fenster.
Ich kann jetzt sowohl das Hauptfenster bedienen als auch bei Forms.

Hatte jemand schonmal ein solches Problem ? Kann es sein das die Fremdsoftware hier irgendwie per Windowsmessages unseren Fenstern sagt das sie nicht mehr modal sind ?

Wie kann ich das rausfinden bzw. abfangen ??

fatalerror 18. Jan 2010 10:00

Re: Showmodal ist nicht modal
 
Ja: [sorry, ignorieren]showmodal ist in Windows leider nicht modal![ende fehler]

[eedit]
sorry, war ein Fehler. Aber trotzdem, Modale Fenster sind in Windows ein bekanntes Problem.[/edit]


Wikipedia:
Zitat:

Modal windows in Windows are instead implemented as transient windows. Transient windows behave similarly to modal windows – they are always on top of the parent window and are not shown in the window list, but they do not disable the use of other windows in the application.

Sherlock 18. Jan 2010 10:07

Re: Showmodal ist nicht modal
 
Das glaube ich nicht. Wenn ich einen Dialog modal zeige, dann kann ich den Rest meiner Applikation nicht bedienen, bis der Dialog weg ist. Das ist modal genug.

Die Schwierigkeit dürfte eher sein, daß ein modaler Dialog einen anderen modalen Dialog öffnet. Ich weiss nicht, ob das nicht irgendwie Windows in Erklärungsnot bringt...

Sherlock

wadriller 18. Jan 2010 10:11

Re: Showmodal ist nicht modal
 
Danke euch beiden.

Ich glaube aber nicht das das Problem daher kommt das ein Modales Fenster ein modales Fenster aufruft.

Sonst müsste es ja auch Probleme geben wenn ein Form1 eine Form2 modal anzeigt und das Form2 z.B. einen OpenDialog.

Komisch ist halt das das Problem nur dann auftritt wenn er aus dem Fremdsoftware in unsere wechselt.

Sherlock 18. Jan 2010 10:14

Re: Showmodal ist nicht modal
 
Hast Du das mit dem Form1, Form2 und nen Dateidialog schon probiert?

Übrigens, der Vollständigkeit halber, die Wiki wurde oben nicht komplett zitiert, weshalb da ein falscher Eindruck entsteht:
Zitat:

Modal windows are more common in the Microsoft Windows world, where modal windows frequently are an element of Multiple Document Interface applications, than in that of Mac OS, Unix-derivates, and the X Window System. In these OSes, many features that would be represented by modal windows in Windows are instead implemented as transient windows. Transient windows behave similarly to modal windows – they are always on top of the parent window and are not shown in the window list, but they do not disable the use of other windows in the application.
Es ist also so, daß andere BS als Windows modale Fenster anders handhaben. ;)

Sherlock

ChrisE 18. Jan 2010 10:15

Re: Showmodal ist nicht modal
 
Hallo wadriller,

ich hatte das selbe Problem hier

Es hat sich folgendes gezeigt:
1. Es passiert nicht mit Delphiversionen > 2007
2. Man kann es D2007 abgewöhnen wenn man
a)
Delphi-Quellcode:
Application.MainFormOnTaskbar := FALSE;
in der DPR setzen direkt nach
Delphi-Quellcode:
Application.Initialize;
b)
Delphi-Quellcode:
Application.ModalPopupMode := pmAuto;
bringt bei mir außerdem noch Verbesserung.

Scheint leider ein Fehler zu sein, aus dem man bei D2007 nicht ohne weiters raus kommt. Wie man bei dem Thread von mir sieht, tritt dass Problem nicht mehr in höheren Versionen von Delphi auf.

Sorry, dass ich dir keine besseren Meldungen liefern kann. Solltest du jedoch zu neuen / besseren Erkenntnissen kommen, wäre es toll wenn du die mitteilen könntest.

Greez, Chris

[Edit]Schreiben ist bei mir heut Glückssache :-( [/Edit]

wadriller 18. Jan 2010 10:27

Re: Showmodal ist nicht modal
 
Hallo ChrisE.

Danke für die Infos. Sind zwar keine "guten" Nachrichten, aber immerhin scheine ich nicht allein mit dem Problem zu sein.

Wir haben jetzt zu dem Thema in einer Ausgabe des "Entwicklers" einen Tipp gefunden das man vor "FormXY.Showmodal" noch "FormXY.Popupparent := self" aufrufen soll.
Damit wäre das Problem auch behoben. Da es bei uns aber sehr viele Stellen betrifft wäre mir deine Variante sympathischer.

Vielleicht hilft dir mein Tip aber noch weiter.

ChrisE 18. Jan 2010 10:36

Re: Showmodal ist nicht modal
 
Hallo wadriller,

der Tip ist nicht schlecht, aber löst leider auch nicht alle Probleme. Denn wenn die einen MessageDialog aufrufst kannst du da nur schwer einen Popupparent angeben. Und diese Fenster "verschwinden" leider genauso beim umschalten zwischen Anwendungen hinter dem Mainform.
Und der Parameter
Delphi-Quellcode:
ModalPopupMode := pmAuto;
regelt auch die Geschichte mit PopupParent. Allerdings halt versuchsweise Automatisch.

Greez, Chris

wadriller 18. Jan 2010 14:30

Re: Showmodal ist nicht modal
 
Ich werde auf jeden Fall mal noch den PopupMode testen.

Habe gerade nachgeschaut. In unserer DPR wird nirgends "MainFormOnTaskbar" gesetzt.

Wenn ich auf "Application.Run" einen Haltepunkt setze sehe ich das "MainFormOnTaskbar" per Default auf "False" steht.

Ein Unterschied zu deinem Problem in dem verlinkten Thread ist ja noch, das bei mir sowohl das Hauptform als auch die anderen 2 Forms (welche per Showmodal aufgerufen wurden) sich bedienen lassen.
Bei dir ist es ja so das das Modale Fenster hinter der Form liegt und die Form sich nicht bedienen lässt.

ChrisE 18. Jan 2010 14:38

Re: Showmodal ist nicht modal
 
Laut der hilfe von Delphi 2007:
Zitat:

Die Standardeinstellung von MainFormOnTaskBar für in Delphi 2007 und späteren Produkten erstellte Anwendungen ist True, für frühere Produkte False.
und vielleicht auch noch wichtig:
Zitat:

MainFormOnTaskBar sollte beim Start gesetzt werden und während der gesamten Anwendungsdauer erhalten bleiben. Das Ändern dieser Eigenschaft zur Laufzeit könnte unerwartetes Verhalten verursachen.
Und bei mir ist es so, dass die Fenster nach dem Wechsel hinter dem MainForm sind. Da sie aber Modal sind kann die Anwendung unbediehnbar werden, da man das eigentlich modale oberste Fenster nicht mehr erreichen kann.

Aber das nur anbei.

Viel Erfolg.

Greez, Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 Uhr.
Seite 1 von 2  1 2      

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