Child-GUI - im Vordergrund und getrennt von Haupt-GUI schließen

  • Ich habe eine Haupt-GUI erstellt und mein Script läuft im OnEventMode.
    In der GUI habe ich eine Menü-Leiste über die ich ein weiteres Fenster öffnen möchte, wo ich dann vorgebene Einstellungen über Checkboxen vornehmen möchte (Einstell-Optionen). Dieses soll, wenn es geöffnet wird im Vordergrund stehen und getrennt von der Haupt-GUI schließbar sein.

    Das Aufrufen des Child-GUI´s ist nicht das Problem, nur komm ich nicht dahinter wie ich es anstelle es in den Vordergrund zu stellen, da ich in der Haupt-GUI schon ein fest eingebettetes Child habe (2. Child liegt bei Aufruf unter dem 1.Child). Beim Anklicken kommt es dann aber in den Vordergrund. Und wie kann ich es realisieren dieses Child getrennt zu schließen?

    Edit: Script von unnötigem Inhalt befreit zur besseren Problem-Analyse

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <mod_MultiGraph.au3>
    #include <Date.au3>
    #include <file.au3>
    #include <GUIScrollbars_Ex.au3>
    #Include <WinAPI.au3>
    #include <_GetTaskBarProps.au3>
    #include <GuiComboBoxEx.au3>
    #include <GuiImageList.au3>
    #include <GuiStatusBar.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $WorkingHeight= _GetworkingAreaHeight()- _GetTaskBarProps("Height")+6
    $WorkingWidht= _GetworkingAreaWidth() -14

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hGUI= GUICreate("Diagramm-Tool", $WorkingWidht, $WorkingHeight, 3, 3)
    ; Menü erzeugen mit allen Unterpunkten
    $nFileMenu = GUICtrlCreateMenu("Datei")
    $nOpenLogfile = GUICtrlCreateMenuitem("Logfile öffnen", $nFileMenu)
    $nExititem = GUICtrlCreateMenuitem("Beenden", $nFileMenu)
    $nOptionsMenu = GUICtrlCreateMenu("Optionen")
    $nOptionsItem = GUICtrlCreateMenuitem("Einstellungen", $nOptionsMenu)
    $nHelpMenu = GUICtrlCreateMenu("?")
    $nHelpItem = GUICtrlCreateMenuItem("Hilfe", $nHelpMenu)
    $nInfoItem = GUICtrlCreateMenuItem("Info", $nHelpMenu)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $plot = 0, _
    $iHorzPos, _ ; horizontale Position der Scrollbar
    $iVertPos, _ ; vertikale Position der Scrollbar
    $iXY_Pos, _ ; Koordinaten der Scrollbar
    $iX_Pos, _ ; X-Koordinate der Scrollbar
    $iY_Pos, _ ; Y-Koordiante der Scrollbar
    $sLogfile = "", _ ; Pfad des Logfiles
    $ClientSize = WinGetClientSize($hGUI), _ ; Größe der Client
    $hImage, _ ; Inhalt der Imagelist
    $aBuffer, _ ; Array für Inhalt des Logfiles
    $i, _
    $iChannel, _ ; Zähler-Variable für die Farbkanäle
    $i_Index, _ ; Zähler-Variable für den Farb-Index
    $Graph, _
    $GraphSizeX = 5760, _ ; X-Größe des Graphen (Länge)
    $GraphSizeY = 2400, _ ; Y-Größe des Graphen (Höhe)
    $Colour[16], _ ; Array für die Farben in der Imagelist
    $Colour_Channel[9], _ ; Array für die Farbe im Kanal (Graph)
    $indexFarbwert[9], _ ; Array für hinterlegten Farbwert zum dem einzelnen Index in Imagelist
    $indexAlpha[9], _ ; Array für Alpha-Wert für die jeweilige Farbe
    $MittelWert[7], _ ; Arry für Mittelwerte aus den jeweiligen Max- und Min-Werten
    $MaxWert[7], _ ; Array für Max-Werte
    $MinWert[7] ; Array für Min-Werte

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    if $ClientSize[1] < 700 Then
    $HsizeGraph = $ClientSize[1]-180
    Else
    $HsizeGraph = 675
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ Child-GUI erstellen
    $GUI_Graph = GUICreate("Graph", $ClientSize[0]-25, $HsizeGraph, 10, 10, $WS_Child, Default, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Scrollbar erzeugen

    [/autoit] [autoit][/autoit] [autoit]

    _GUIScrollbars_Generate($GUI_Graph, $GraphSizeX+150, $GraphSizeY+100)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    GUICtrlSetResizing($GUI_Graph, $GUI_DOCKALL)

    [/autoit] [autoit][/autoit] [autoit]

    ; Zur urprünglichen GUI wechseln
    GUISwitch($hGUI)
    GUICtrlSetResizing($hGUI, $GUI_DOCKALL)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Events")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_Events")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_Events")
    GUICtrlSetOnEvent($nExititem, "_Events")
    GUICtrlSetOnEvent($nOptionsItem, "_Options")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    WinMove($hGUI,"",3,3)

    [/autoit] [autoit][/autoit] [autoit]

    _ScrollPosition()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Sleep (10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Events() ; hier sind die Events der GUI:
    ; Fenster Schliessen, Minimieren, Maximieren,

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE

    [/autoit] [autoit][/autoit] [autoit]

    Case @GUI_CtrlId = $GUI_EVENT_RESTORE

    [/autoit] [autoit][/autoit] [autoit]

    Case $nExititem
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Ermitteln der Scrollbar-Position im Client und der Koordinaten
    Func _ScrollPosition()
    $iHorzPos= -(_GUIScrollBars_GetScrollInfoTrackPos($hGUI, $SB_HORZ))
    $iVertPos= -(_GUIScrollBars_GetScrollInfoTrackPos($hGUI, $SB_VERT))
    $iXY_Pos = _GUIScrollbars_Locate_Ctrl ($GUI_Graph, $iHorzPos,$iVertPos)
    $iX_Pos = -($iXY_Pos[0]-$iHorzPos)
    $iY_Pos = -($iXY_Pos[1]-$iVertPos)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $Rect[4]
    Func _GetworkingAreaWidth()
    Local $aRect[4]
    Local $iWidth = 0

    [/autoit] [autoit][/autoit] [autoit]

    $aRect = _GetworkingAreaRect()
    If Not @error Then
    $iWidth = $aRect[2] - $aRect[0]
    Return $iWidth
    Else
    Return SetError(1,0,0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetworkingAreaHeight()
    Local $aRect[4]
    Local $iWidth = 0

    [/autoit] [autoit][/autoit] [autoit]

    $aRect = _GetworkingAreaRect()
    If Not @error Then
    $iWidth = $aRect[3] - $aRect[1]
    Return $iWidth
    Else
    Return SetError(1,0,0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetworkingAreaRect()
    Local $aRect[4]
    Const $SPI_GETWORKAREA = 0x0030
    Local $rect = DllStructCreate("int;int;int;int")
    Local $iResult = 0

    [/autoit] [autoit][/autoit] [autoit]

    $iResult = _WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0 , DllStructGetPtr($rect))
    If $iResult Then
    $aRect[0] = DllStructGetData($rect,1)
    $aRect[1] = DllStructGetData($rect,2)
    $aRect[2] = DllStructGetData($rect,3)
    $aRect[3] = DllStructGetData($rect,4)
    Return $aRect
    Else
    Return SetError(1,0,0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;~ ; Options
    Func _Options()
    $Options = GUICreate("Optionen", 400, 500, (@DesktopWidth/2)-100, (@DesktopHeight/2)-250, BitOR($WS_CHILD, $WS_TABSTOP, $WS_SIZEBOX), $WS_EX_CONTROLPARENT, $hGUI)
    GUISwitch($Options)
    GUICtrlCreateLabel("Auflösung", 10, 20, 50, 20, BitOR($SS_CENTERIMAGE, $ES_CENTER))
    $Abbruch = GUICtrlCreateButton("Abbruch", 10, 40, 50, 20)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Flitzpiepe84 (25. Januar 2014 um 13:47)

  • die Lösung habe ich jetzt selber gefunden nach stundenlangen googeln, es lag nur an den Styles und exStyles.

    Ich habe jetzt für sämtliche Fenster die sich zusätzlich öffnen lassen, aber unabhängig von der Haupt-GUI wieder schließen lassen müssen, folgende styles und exStyles verwendet:

    [autoit]

    GUICreate ( "title" , width , height , left , top , BitOR($WS_POPUP, $WS_BORDER), $WS_EX_MDICHILD, $hGUI)

    [/autoit]

    Vielleicht hilft es ja jemanden der neu in der Materie ist weiter, wenn er auch das Problem hat und sich erst damit auseinander setzt.

    Hilfreich war auch dieses englische Autoit-Tutorial zu Multiple GUI´s