Hallo zusammen,
ich habe eine AutoIt-App, die aus 2 Fenstern besteht. Nun möchte ich das jeweils andere Fenstern automatisch mitbewegen, wenn eines der Fenster bewegt wird. Wie mach ich das?
Danke für die Tipps im Voraus.
Ghostbuster
Hallo zusammen,
ich habe eine AutoIt-App, die aus 2 Fenstern besteht. Nun möchte ich das jeweils andere Fenstern automatisch mitbewegen, wenn eines der Fenster bewegt wird. Wie mach ich das?
Danke für die Tipps im Voraus.
Ghostbuster
#Include <GUIConstantsEx.au3>
#NoTrayIcon
Opt("GUIOnEventMode", 1)
$main=GUICreate("Main", 350, 290)
GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "_GUIEvents")
GUISetState(@SW_SHOW, $main)
$child=GUICreate("Child", 200, 290, 355)
GUISetState(@SW_SHOW, $child)
While True
Sleep(10)
_childMove()
WEnd
Func _GUIEvents()
Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
Exit
Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
Case @GUI_CtrlId = $GUI_EVENT_RESTORE
EndSelect
EndFunc ;==> _GUIEvents
Func _childMove()
$posMain=WinGetPos("Main")
WinMove("Child", "", $posMain[0]+355, $posMain[1])
EndFunc
nur mal kurz zusammengebastelt... sicher noch unschön, aber so gehts
Hi,
es geht alles.
1) Wenn beide Autoit GUIS sind, dann Parent und child setzen
2) Wenn nur eines Autoit ist SetParent nutzen.
Mega
Hallo zusammen,
ja, das funktioniert prima. Etwas unschön an dieser schnellen Lösung ist aber, dass im Grunde permanent und unnötig die Fenster aneinander angepaßt werden. Kann man das nicht vermeiden und eine Anpassung nur dann durchführen, wenn es aufgrund einer Art "WINDOW_MOVED-Event" wirklich erforderlich ist? Oder ist dieser Gedanke unsinnig.
Danke auf jeden Fall für die superschnellen Tipps.
Ghostbuster
Jo, gibt es:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$posX = @DesktopWidth / 2 - 300
$posY = @DesktopHeight / 2 - 200
$hMainGui = GUICreate('Main', 600, 400, $posX, $posY)
GUISetState()
$hChildGui = GUICreate('Child', 300, 200, $posX + 606, $posY)
GUISetState()
GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
If $hWnd = WinGetHandle($hMainGui) Then
Local $pos = WinGetPos($hMainGui)
WinMove($hChildGui, '', $pos[0] + 606, $pos[1])
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOVE
Wenn man nun das Main-Fenster verschiebt, wird das Child-Fenster mit verschoben.
Child nun beweglich !
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
GLOBAL $posX = @DesktopWidth / 2 - 300
GLOBAL $posY = @DesktopHeight / 2 - 200
GLOBAL $diffx = 606
GLOBAL $diffy = 0
$hMainGui = GUICreate('Main', 600, 400, $posX, $posY)
GUISetState()
$hChildGui = GUICreate('Child', 300, 200, $posX + $diffx, $posY + $diffy)
GUISetState()
GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
If $hWnd = WinGetHandle($hMainGui) Then
Local $pos = WinGetPos($hMainGui)
WinMove($hChildGui, '', $pos[0] + $diffx, $pos[1] + $diffy)
EndIf
If $hWnd = WinGetHandle($hChildGui) Then
Local $mpos = WinGetPos($hMainGui)
Local $cpos = WinGetPos($hChildGui)
$diffx = $cpos[0] - $mpos[0]
$diffy = $cpos[1] - $mpos[1]
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOVE
Danke Oscar für die Grundidee
wow cool, man lernt doch immer was dazu... den event kannte ich noch gar nich *mich auch bedank*