4Dv17-Win: BRING TO FRONT(4D)?

Gibt es eine Möglichkeit, das 4D-Applikations-Fenster (MDI-Fenster) nach vorn zu bringen?

(Ich weiß, dass das als schlechter Programmierstil gilt, aber bei uns soll der User selbst wählen können, ob er das will)

Bislang (4Dv15) kam 4D immer automatisch nach vorn, wenn in 4D ein neues Fenster geöffnet wurde, und wenn 4D in diesem Moment minimiert war. Das konnte man als Workaround nutzen (4D minimieren und dann OPEN FORM WINDOW aufrufen, dann kam 4D nach vorn). Mit 4Dv17 wurde dieses Verhalten geändert, 4D kommt nicht mehr nach vorn wenn ein Fenster geöffnet wird).

Wir haben zur weiteren Bearbeitung Ihrer Anfrage einen TAOW-Case eröffnet.
Der weitere Informationsaustausch findet dort mit Ihnen direkt statt.

mfg

Nur über Plugin. Sie hatten die URL ja selbst im anderen Thread genannt:

Im Plug-in Window Control habe ich dafür nichts gefunden, außer dem Workaround:
Fenster minimieren und danach sofort wieder Restore.

Das geht zwar, aber schöner wäre, wenn es einen direkten Befehl gäbe.
Oder hab ich da was übersehen?

Ich habe es jetzt nicht ausprobiert, nur die Doku überflogen.

Bei WND SET POSITION können Sie als $5 HWND_TOPMOST übergeben

: Thomas MAUL

… nicht ausprobiert … WND SET POSITION … als $5 HWND_TOPMOST…

Scheint nicht zu funktionieren.
<code 4D>
DELAY PROCESS(Current process;300)
WND SET POSITION (WND_MDI;100;100;1000;800;HWND_TOPMOST)

</code 4D>

Die Größe/Position des MDI-Fensters ändert sich zwar, aber es bleibt hinter den anderen Anwendungen.

Wenn man den Befehl nicht auf das MDI-Fenster anwendet, sondern auf Current form window innerhalb 4D, dann wird das entsprechende Fenster nach vorn geholt. Allerdings immer, unabhängig von HWND_TOPMOST.

Ich muss zugeben, dass ich keine Ahnung habe, was die ganzen Parameter bedeuten, die unter https://github.com/miyako/4d-plugin-window-control beschrieben sind.

: Joerg BUCHWITZ

ch muss zugeben, dass ich keine Ahnung habe, was die ganzen Parameter
bedeuten, die unter
https://github.com/miyako/4d-plugin-window-control beschrieben sind.

Das ist der einfache Teil:

dort werden sie alle erklärt.

Schwieriger: Liest man lange genug, wird auch klar warum es nicht geht:
If an application is not in the foreground, and should be in the foreground, it must call the SetForegroundWindow function.

Jetzt etwas googeln, und wieder war Keisuke schneller:

Das Plugin fragt das MDI Fenster ab (falls es eins gibt) und ruft dann

SetWindowPos(window, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
SetForegroundWindow(window);
AllowSetForegroundWindow(ASFW_ANY);

auf - und sollte so Ihren Wunsch erfüllen. Ich sehe im Code keine Berücksichtigung von SDI Modus, aber MDI wird sowohl für <=15 und danach unterstützt (unterschiedlicher Code).

Das Plug-in Activate mit Befehl ACTIVATE 4D bringt 4D leider auch nicht nach vorn.

Es lässt nur das 4D-Icon in der Task-Leiste blinken.
Anscheinend ist das auch so gewollt. Keisuke schreibt:
Following SetForegroundWindow recommendations, the plugin does not attempt to steal the foreground status from the current foreground application.

Auch das dort verlinkte Programm activate-4d.exe hat keine Wirkung.

Immerhin funktioniert ja WND MINIMIZE und danach sofort WND RESTORE, das bringt 4D zuverlässig nach vorn.
Vielleicht muss ich ja das ganze Konzept überdenken…