Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Gibt es so etwas wie ein Modal-Flag? (https://www.delphipraxis.net/162191-gibt-es-so-etwas-wie-ein-modal-flag.html)

DeddyH 11. Aug 2011 13:27

Gibt es so etwas wie ein Modal-Flag?
 
Ich ermittle ein Fenster in einer fremden Anwendung anhand eines bekannten Klassennamens und des Titels und versuche, dieses in den Vordergrund zu holen. Das klappt auch gut, allerdings würde ich das Ganze gern etwas flexibler gestalten. Dazu müsste ich aber wissen, ob das aktuell ermittelte Fenster modal angezeigt wird. Gibt es eine Möglichkeit, das zu ermitteln?
Im MSDN habe ich bislang nur Dialog Style Bits im Zusammenhang mit Setups gefunden, das scheint ja nicht das richtige zu sein.

Memnarch 11. Aug 2011 13:51

AW: Gibt es so etwas wie ein Modal-Flag?
 
Ich kann es dir nicht 100% sagen. Auch gerade erst versucht mich dazu zu belesen.
Es scheint so zu sein, dass Modal dadurch erzielt wird, dass eine applikation in ihrer MessageLoop messages dann verwirft, wenn diese zu einem ihrer controls sollen, die nicht teil des activen modal fensters sind.

Wenn du also nen Modal dialog in Delphi hast, aber auf deine hauptform klickt, werwirft die VCL die message und weißt dich mit den windowstypischen "bling" drauaf hin dass es nicht geht.

Obwohl kann auch sein dass das vllt auch tiefer in windows passiert...leider keine genaue ahnung :(

DeddyH 11. Aug 2011 14:00

AW: Gibt es so etwas wie ein Modal-Flag?
 
Ich habe gerade einmal einen Blick in die Forms.pas (D2007) geworfen: da wird FormState geändert (fsModal hinzugefügt), dann DisableTaskWindows aufgerufen, das Formular angezeigt, anschließend EnableTaskWindows aufgerufen und fsModal wieder entfernt. Über die Windows-API scheint das also nicht so einfach zu gehen, sonst hätte man ja wohl das verwendet. Schade eigentlich.

himitsu 11. Aug 2011 14:26

AW: Gibt es so etwas wie ein Modal-Flag?
 
Zitat:

Zitat von DeddyH (Beitrag 1116261)
Über die Windows-API scheint das also nicht so einfach zu gehen, sonst hätte man ja wohl das verwendet. Schade eigentlich.

Es sei denn diese Windows-Variante war Borland/Codegear/Embarcadero unbekannt, bzw. es wurde erst später in windows integriert ... also falls es in Windows inzwischen doch etwas geben sollte.

Neutral General 11. Aug 2011 14:31

AW: Gibt es so etwas wie ein Modal-Flag?
 
Das einzige was mir jetzt einfällt, was eventuell klappen könnte ist das Parent-Window des Fensters rauszufinden und diesem eine Nachricht zu senden, auf die es irgendwie antworten muss.

Wenn nach kurzer Zeit keine Antwort kam, dann ist das Programm entweder sehr beschäftigt oder das Kindfenster wird gerade Modal angezeigt :mrgreen:

... Ist allerdings eine nicht so saubere Lösung...

DeddyH 11. Aug 2011 14:42

AW: Gibt es so etwas wie ein Modal-Flag?
 
Zumal damit meine Idee, alle modalen Fenster aufzulisten und daraus dann das oberste (Z-Order) auszusuchen, nicht funktionieren würde. Aber solange man eben die Eigenschaft "modal" nicht zuverlässig ermitteln kann, ist das eh alles hinfällig.

himitsu 11. Aug 2011 15:11

AW: Gibt es so etwas wie ein Modal-Flag?
 
Es wäre zwar theoretisch möglich, auf die Delphi-Klassen eines externen Programms, mit gleicher/ähnlicher RTTI/Klassenstruktur, übder das Handle des Windows-Controls (HWND) zuzugreifen.
Da Delphi die Delphi-Typinformationen via ATOM an jedes Windows-Control anhängt, nur mit der klitzekleinen "Gemeinhheit", daß der ATOM-Name bei jedem Programmstart per Zufall neu berechnet wird, und somit für jedes aktive Programm ein anderer Name existiert, welchen man natürlich nicht kennt, außer dem Eigenem.

Und ich glaube kaum, daß du 4 Milliarden ATOMS (zum Glück hat Delphi eine beschränkte Namensberechnung, sonst wären das um unzählige Mengen mehr) prüfen willst, um den Passenden zu finden? (bei Win32 ... k.A. ob mit XE2 dieses verändert/erweitert wurde)

Jumpy 11. Aug 2011 16:06

AW: Gibt es so etwas wie ein Modal-Flag?
 
Nur eine Idee, ist nicht das aktive Fenster immer das erste in der Liste wenn mal Alt-Tab drück? Wie heißt das nochmal Taskmaster? Kann man da nicht drankommen?

DeddyH 11. Aug 2011 16:24

AW: Gibt es so etwas wie ein Modal-Flag?
 
Genau das funktioniert nicht, deshalb ja mein Tool ;). Ich hatte vor längerer Zeit schon einmal einen Thread zum Problem erstellt, dass ein modales Fenster in den Hintergrund verschwindet und mit Bordmitteln nicht nach vorn zu bringen ist.

jbg 11. Aug 2011 16:36

AW: Gibt es so etwas wie ein Modal-Flag?
 
Zitat:

Zitat von Neutral General (Beitrag 1116268)
Das einzige was mir jetzt einfällt, was eventuell klappen könnte ist das Parent-Window des Fensters rauszufinden und diesem eine Nachricht zu senden, auf die es irgendwie antworten muss.

Nur dumm, dass das Fenster sofort antwortet, da das Programm, dank der modalen Botschaftsschleife, sehr reaktionsfreudig ist, auch wenn es nicht "Enabled" ist.

Als mögliche Lösung könnte man alle Top-Level Fenster des Prozesses durchgehen und wenn nur eines Enabled ist, dann hat man das modale Formular. Sollte eigentlich recht gut funktionieren, denn das ist gerade das, was modal bei Fenstern bedeutet.


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