Gibt es in AutoIt eine Art Window-Move-Event?

  • 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

    Einmal editiert, zuletzt von ghostbuster (14. Mai 2009 um 16:56)

  • [autoit]

    #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

    [/autoit]

    nur mal kurz zusammengebastelt... sicher noch unschön, aber so gehts :D

  • 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

    • Offizieller Beitrag

    Jo, gibt es:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $posX = @DesktopWidth / 2 - 300
    $posY = @DesktopHeight / 2 - 200

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

    $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

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

    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

    [/autoit]

    Wenn man nun das Main-Fenster verschiebt, wird das Child-Fenster mit verschoben.

  • Child nun beweglich !

    Spoiler anzeigen
    [autoit]

    #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

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

    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

    [/autoit]

    Danke Oscar für die Grundidee :rolleyes:

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • wow cool, man lernt doch immer was dazu... den event kannte ich noch gar nich *mich auch bedank*