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/)
-   -   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

wadriller 18. Jan 2010 14:45

Re: Showmodal ist nicht modal
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Hilfe hatte ich auch gelesen. Daher war ich auch sehr verwundert.

Hab mir dein DummyProjekt vom Nachbarthread mal genommen und bei Application.Run nen Breakpoint gesetzt.

Wie du im Anhang siehst ist MainFormOnTaskbar False

ChrisE 18. Jan 2010 14:51

Re: Showmodal ist nicht modal
 
:wiejetzt: :shock:

Wie ich sehe, ist das bei meinem eigentlichen Projekt auch so. Komisch, dann verstehe ich die Onlinehilfe wohl falsch :gruebel:

Aber ich setze es trotzdem noch im eigentlichen Projekt auf FALSE. Sicher ist sicher :drunken:

Greez, Chris

[EDIT]Tja wer lesen kann...
Ok, da steht ja
Zitat:

Die Standardeinstellung von MainFormOnTaskBar für in Delphi 2007 und späteren Produkten erstellte Anwendungen ist True, für frühere Produkte False.
nicht, dass es damit erstellt wurde im Sinne von Compiliert sondern eben erstellt :-)
[/EDIT]

wadriller 18. Jan 2010 15:36

Re: Showmodal ist nicht modal
 
Die meinen da wirklich "erstellt".

Wenn ich im D2007 ein neues Projekt erstelle wird in der DPR nach dem Initialize die Zeile "Application.MainformonTaskBar := true" aufgerufen.

Die Property ist per Default im Code anscheinend False und wird direkt in der DPR auf true gesetzt.

beamer 27. Mär 2012 08:23

AW: Showmodal ist nicht modal
 
Tut mir leid wenn ich den Thread wieder ausgrabe, habe aber mit den hier angegebenen Methoden etwas getestet und dabei etwas sonderbares festgestellt, dass ich euch mitteilen möchte:

Die Verwendung von

Code:
Application.ModalPopupMode := pmAuto;
führt bei Textboxen des Typs TRichEdit dazu dass bei sehr langen Texten nur noch asiatische Schriftzeichen angezeigt werden. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 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