Thomymaster

how to force a window into the foreground (of another window)

5 posts in this topic

Hi

 

I created my main GUI form and want to have like a message display box saying something like "please wait". It will then disappear once the process finished. It shouldn't include a maximize/minimize/close control and when shown, be on the foreground exclusively (you cannot click the main GUI until it disappears).

 

How can i do that?

 

Global Const $hGUIPicturemanager_WordRead=GUICreate("Please Wait",300,150,-1,-1,$WS_DLGFRAME,-1) 
Global Const $hGUIPicturemanager_WordRead_Text_static=GUICtrlCreateLabel("Please wait, processing",15,20,100,10)

GUISetState(@SW_SHOW,$hGUIPicturemanager_WordRead)

; do something

GUISetState(@SW_HIDE,$hGUIPicturemanager_WordRead)


;WinSetOnTop($hGUIPicturemanager_WordRead,"",1) doesn't work

 

 

Share this post


Link to post
Share on other sites



Use the last (optional) parameter "parent" with GuiCreate. Here's a small example:

#include <GUIConstantsEx.au3>
#include<WindowsConstants.au3>

Global $hGui1, $hGui2 = -99, $idMsgBox, $idZurueck, $idbtnExit2
;_CreateGui2() ;entweder hier oder erst wenn benötigt ($idbtmToGui2 Klick)
#Region GUI1 #####################################################################################
$hGui1 = GUICreate('GUI 1', 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
;erzeugt eine GUI , das zurückgebebene Handle wird in der Variablen $hGui1 gespeichert
;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar

$idbtnToGui2 = GUICtrlCreateButton('&Aufruf GUI 2', 20, 20, 100, 21)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
;verankert den Button "Aufruf Gui 2" links und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

$idbtnICQ = GUICtrlCreateButton('&ICQ', 20, 50, 100, 21)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
;verankert den Button "ICQ" links und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

$idbtnExit1 = GUICtrlCreateButton('be&enden', 280, 225, 100, 21)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
;verankert den Button "beenden" links und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand

GUISetState(@SW_SHOW, $hGui1)
#EndRegion ###########################################################################################

While 1
    $nMsg = GUIGetMsg(1) ;extended Modus wichtig!!
    Switch $nMsg[1] ;für welches Fenster ist die Message
        Case $hGui1 ;ab hier ist Gui 1 dran
            Switch $nMsg[0] ;welche Message wurde ausgelöst
                Case $idbtnToGui2
                    GUISetState(@SW_DISABLE, $hGui1) ;Gui 1 gegen Benutzereingaben sperren
                    If $hGui2 = -99 Then _CreateGui2() ;nur wenn nicht am Anfang bereits erzeugt nötig, dann auf Vorbelegung der Variable in Global achten)
                    GUISetState(@SW_SHOW, $hGui2) ;Gui 2 anzeigen
                Case $idbtnICQ
                    MsgBox(0, "", "Jetzt würde ICQ gestartet", 0, $hGui1)
                    ;Run("C:\Program Files\ICQ7.0\ICQ.exe")
                Case $idbtnExit1, $GUI_EVENT_CLOSE
                    _end()
            EndSwitch
        Case $hGui2 ;ab hier ist Gui 2 dran
            Switch $nMsg[0] ;welche Message wurde ausgelöst
                Case $idMsgBox
                    MsgBox(0, 'Test', 'Test', 0, $hGui2)
                Case $idZurueck, $GUI_EVENT_CLOSE
                    GUISetState(@SW_ENABLE, $hGui1) ;Gui 1 wieder entsperren
                    GUISetState(@SW_HIDE, $hGui2)   ;Gui 2 verstecken
                Case $idbtnExit2
                    _end()
            EndSwitch
    EndSwitch
WEnd

Func _CreateGui2()
    $hGui2 = GUICreate('GUI 2', 400, 280, 200, 50, -1, -1, $hGui1) ;wichtig ist der letzte Parameter
    ;erzeugt eine GUI als Child von Gui1, das zurückgebebene Handle wird in der Variablen $hGui2 gespeichert
    $idMsgBox = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21)
    $idZurueck = GUICtrlCreateButton('&Zurück zu GUI 1', 20, 50, 100, 21)
    $idbtnExit2 = GUICtrlCreateButton('be&enden', 280, 250, 100, 21)
    GUISetState(@SW_HIDE, $hGui2) ;Gui 2 vorerst verstecken
EndFunc   ;==>_CreateGui2

Func _end()
    GUIDelete($hGui2)
    GUIDelete($hGui1)
    Exit
EndFunc   ;==>_end

 

Share this post


Link to post
Share on other sites

Hi

 

This still doesn't work, see

Local Const $hGUIPicturemanager_PicturesRename=GUICreate("Bitte warten",300,120,-1,-1,$WS_DLGFRAME,-1,$hGUIPicturemanager_main)
    Local Const $hGUIPicturemanager_PicturesRename_Text_static=GUICtrlCreateLabel("Bitte warten Sie, die Bilder werden umbenannt",20,20,300,30)
    Local Const $idmPicturesRename_Progress=GUICtrlCreateLabel("",20,50,300,30) ; !!
    GUISetState(@SW_SHOW,$hGUIPicturemanager_PicturesRename)
    WinSetOnTop($hGUIPicturemanager_PicturesRename,"",1)

$hGUIPicturemanager_main is the main UI. The child UI is displayed but it is still possible to switch focus to the main UI (which shouldn't).

Share this post


Link to post
Share on other sites

Hi

 

Yes that works, thanks ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now