![]() |
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. |
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 :( |
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.
|
AW: Gibt es so etwas wie ein Modal-Flag?
Zitat:
|
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... |
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.
|
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) |
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?
|
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.
|
AW: Gibt es so etwas wie ein Modal-Flag?
Zitat:
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 10:46 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