GUI einmal als Child bei Parent eingebettet, das andere Mal als eigenständiges Toolwindow

  • Hallo zusammen,

    ist es möglich ein GUI-Fenster zu erstellen, das sich auf Programmanforderung in das aufrufende Fenster integriert bzw. daraus lößt und wieder eigenständig ist. Beide Fenster können und sollen in der selben AU3 definiert werden. Es geht eigentlich zum einem nur darum das Programm nicht unnötig aufzublähen und zum anderen läßt es sich auch leichter pflegen, oder ist es einfacher die Steuerelemente in beiden Fenstern zu erstellen und dann mit den gleichen Event-Methoden zu bearbeiten.

    Bin dankbar für jeden Tipp

    mfg

    (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (1. April 2009 um 18:06)

  • Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    #include<WinAPI.au3>
    #include<WindowsConstants.au3>
    #include<Constants.au3>
    $hGUIMain = GUICreate("Parent")

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

    $Toolbar_hoehe = 30
    $Toolbar_breite= 100

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

    $hGUITool = GUICreate("Toolbar", $Toolbar_breite ,$Toolbar_hoehe,-1,-1,$WS_SYSMENU+$WS_CAPTION,$WS_EX_TOOLWINDOW)
    $Toolbarfenster = WinGetPos($hGUITool)
    GUISetBkColor(0xaabbcc)
    $btnToggle = GUICtrlCreateButton("TG",1,1,28,28)
    GUISetState(@SW_SHOW,$hGUIMain)
    GUISetState(@SW_SHOW,$hGUITool)

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

    While 1
    $avMsg = GUIGetMsg(1)
    Switch $avMsg[1]
    Case $hGUIMain
    Switch $avMsg[0]
    Case -3
    Exit
    EndSwitch
    Case $hGUITool
    Switch $avMsg[0]
    Case $btnToggle
    If _WinAPI_GetParent($hGUITool) <> $hGUIMain Then ContinueCase ; wenn es kein Child-Fenster ist, dann zu einem machen
    $pos = WinGetPos($hGUITool) ; alte Position speichern
    _WinAPI_SetParent($hGUITool,0) ; Parent entfernen
    WinMove($hGUITool,"",$pos[0],$pos[1],$Toolbarfenster[2],$Toolbarfenster[3]) ; an alte Position schieben
    GUISetStyle($WS_SYSMENU+$WS_CAPTION,$WS_EX_TOOLWINDOW,$hGUITool) ; neuer Style
    Case -3
    GUISetStyle(BitOR($WS_CHILD,$WS_BORDER),0,$hGUITool) ; den Style ändern
    _WinAPI_SetParent($hGUITool, $hGUIMain) ; einbetten
    WinMove($hGUITool,"",0,0,$Toolbar_breite,$Toolbar_hoehe) ; an 0,0 des Hauptfensters schieben
    _WinAPI_RedrawWindow($hGUITool) ; neu zeichenen
    _WinAPI_RedrawWindow($hGUIMain) ; neu zeichenen
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Hallo Progandy,

    hab dein kurzes Demo gestartet. Sieht sehr gut aus :thumbup: , Muss es halt an EventMode Modus anpassen.

    Vielen Dank und freundliche Grüße (Auto)Bert