Siehe hier
Spoiler anzeigen
#include <GuiConstants.au3>
Opt ("GUIOnEventMode", 1)
Opt ('MustDeclareVars', 1)
Dim $Btn_Exit1, $Btn_Exit2, $GUI1, $GUI2
Dim $p_win1, $p_win2, $x1 = 10, $x2 = 315, $y1 = 10, $y2 = 10, $Dock = 1, $Dock_Location = 1
Dim $OptionsMenu1, $OptionsItem1,$OptionsItem2,$OptionsItem3,$OptionsItem4, $separator1
;====================================================================================================
$GUI1 = GUICreate("Left/Top Window", 300, 200, 10, 10)
$OptionsMenu1 = GUICtrlCreateMenu("Options")
$OptionsItem1 = GUICtrlCreateMenu("Docking", $OptionsMenu1)
$OptionsItem2 = GUICtrlCreateMenuItem("Docked", $OptionsItem1)
$separator1 = GUICtrlCreateMenuitem ("",$OptionsItem1)
$OptionsItem3 = GUICtrlCreateMenuItem("Side By Side", $OptionsItem1)
$OptionsItem4 = GUICtrlCreateMenuItem("Top And Bottom", $OptionsItem1)
GUICtrlSetState($OptionsItem2, $GUI_CHECKED)
GUICtrlSetState($OptionsItem3, $GUI_CHECKED)
GUICtrlSetOnEvent($OptionsItem2, "_SetDocking")
GUICtrlSetOnEvent($OptionsItem3, "_SetDockSideBySide")
GUICtrlSetOnEvent($OptionsItem4, "_SetDockTopAndBottom")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")
$Btn_Exit1 = GUICtrlCreateButton("Exit", 175, 140, 90, 25)
GUICtrlSetOnEvent($Btn_Exit1, "_Exit")
;======================================================================================================
$GUI2 = GUICreate("Right/Bottom Window", 300, 200, 315, 10)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")
$Btn_Exit2 = GUICtrlCreateButton("Exit", 175, 140, 90, 25)
GUICtrlSetOnEvent($Btn_Exit2, "_Exit")
;=========================================================================================================
GUISetState(@SW_SHOW, $GUI2)
GUISetState(@SW_SHOW, $GUI1)
;=========================================================================================================
While 1
If $Dock Then _KeepWindowsDocked()
Sleep(10)
WEnd
Func _SetDocking()
If BitAND(GUICtrlRead($OptionsItem2), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState($OptionsItem2, $GUI_UNCHECKED)
$Dock = 0
Else
GUICtrlSetState($OptionsItem2, $GUI_CHECKED)
$Dock = 2
EndIf
If $Dock Then _KeepWindowsDocked()
EndFunc
Func _SetDockSideBySide()
If BitAND(GUICtrlRead($OptionsItem3), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState($OptionsItem3, $GUI_UNCHECKED)
GUICtrlSetState($OptionsItem4, $GUI_CHECKED)
$Dock_Location = 2
Else
GUICtrlSetState($OptionsItem3, $GUI_CHECKED)
GUICtrlSetState($OptionsItem4, $GUI_UNCHECKED)
$Dock_Location = 1
If $Dock Then $Dock = 2
EndIf
If $Dock Then _KeepWindowsDocked()
EndFunc
Func _SetDockTopAndBottom()
If BitAND(GUICtrlRead($OptionsItem4), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState($OptionsItem4, $GUI_UNCHECKED)
GUICtrlSetState($OptionsItem3, $GUI_CHECKED)
$Dock_Location = 1
Else
GUICtrlSetState($OptionsItem4, $GUI_CHECKED)
GUICtrlSetState($OptionsItem3, $GUI_UNCHECKED)
$Dock_Location = 2
If $Dock Then $Dock = 2
EndIf
If $Dock Then _KeepWindowsDocked()
EndFunc ;==>_SetDocking1
Func _KeepWindowsDocked()
$p_win1 = WinGetPos($GUI1)
$p_win2 = WinGetPos($GUI2)
If $Dock_Location == 1 Then
If (($p_win1[0] <> $x1 Or $p_win1[1] <> $y1) And BitAND(WinGetState($GUI1),8) Or $Dock = 2) Then
$x1 = $p_win1[0]
$y1 = $p_win1[1]
$x2 = $p_win1[2] + $x1
$y2 = $y1
WinMove($GUI2, "", $x2, $y2)
$Dock = 1
ElseIf (($p_win2[0] <> $x2 Or $p_win2[1] <> $y2) And BitAND(WinGetState($GUI2),8)) Then
$x2 = $p_win2[0]
$y2 = $p_win2[1]
$x1 = $p_win2[0] - $p_win1[2]
$y1 = $y2
WinMove($GUI1, "", $x1, $y1)
EndIf
Else
If (($p_win1[0] <> $x1 Or $p_win1[1] <> $y1) And BitAND(WinGetState($GUI1),8) Or $Dock = 2) Then
$x1 = $p_win1[0]
$y1 = $p_win1[1]
$x2 = $x1
$y2 = $p_win1[3] + $y1
WinMove($GUI2, "", $x2, $y2)
$Dock = 1
ElseIf (($p_win2[0] <> $x2 Or $p_win2[1] <> $y2) And BitAND(WinGetState($GUI2),8)) Then
$x2 = $p_win2[0]
$y2 = $p_win2[1]
$x1 = $x2
$y1 = $p_win2[1] - $p_win1[3]
WinMove($GUI1, "", $x1, $y1)
EndIf
EndIf
EndFunc ;==>_KeepWindowsDocked
Func _Exit()
Exit
EndFunc ;==>_Exit
Func SpecialEvents()
Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
Exit
EndSelect
EndFunc ;==>SpecialEvents
Edit BugFix: AutoIt-Tag und Spoiler gesetzt