genaue position eines control's im gui

  • Hallo.

    Das dürfte die Position
    $Form1 = GUICreate("Form1", 100, 100, 5, 25)
    sein. evtl. noch die "5" auf 3 setzen, aber das einfach durchtesten.

    LG, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Ich habe mal ein Beispielscript geschrieben (geht doch ohne PixelCoordMode):

    Spoiler anzeigen
    [autoit]


    #include<GuiStatusBar.au3>
    #include<GUIConstantsEx.au3>
    Opt('CaretCoordMode', 0)
    Opt('GUIOnEventMode', 1)
    $hGUI = GUICreate('test', 200, 40, -1, -1)
    GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_Move')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    Global $aParts[1] = [-1]
    $hStatus = _GUICtrlStatusBar_Create ($hGUI)
    _GUICtrlStatusBar_SetParts ($hStatus, $aParts)
    GUISetState()
    _Move()
    While True
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _Move()
    $posWin = WinGetPos('test')
    $pos = WinGetCaretPos()
    _GUICtrlStatusBar_SetText($hStatus, ' Position X: ' & $posWin[0] & '+' & $pos[0] & ' Y: ' & $posWin[1] & '+' & $pos[1])
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Ich dachte erst, dass es vielleicht mit $GUI_EVENT_MOUSEMOVE statt $GUI_EVENT_PRIMARYDOWN gehen müßte, aber der Event wird auch da erst ausgelöst, nachdem man die Maustaste wieder losgelassen hat. Eine andere Möglichkeit wäre, die Funktion _Move() per AdlibEnable() zeitgesteuert aufzurufen, aber offenbar wird die Ausführung des Scripts angehalten, wenn man ein Fenster verschiebt. :S

    • Offizieller Beitrag

    Hallo

    Meinst du so?

    [autoit]

    #include<WindowsConstants.au3>

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

    GUICreate("My GUI",-1,-1,-1,-1,$WS_SIZEBOX) ; will create a dialog box that when displayed is centered

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

    $nEdit = GUICtrlCreateEdit ("line 0", 10,10)
    GUICtrlCreateButton ("Ok", 20,200,50)
    GUIRegisterMsg($WM_MOVE,"OnMoveResize")
    GUIRegisterMsg($WM_SIZE,"OnMoveResize")
    GUISetState ()
    TrayTip("","",1)
    #region - GUI SwitchLoop
    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    WEnd
    #endregion

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

    Func OnMoveResize($hWnd, $Msg, $wParam, $lParam)
    If $Msg = 5 Then
    $x = "verschoben"
    Else
    $x = "verändert"
    EndIf
    TrayTip("",WinGetTitle($hWnd) &" wird grade "&$x&@CRLF&$lParam,1)
    EndFunc

    [/autoit]

    Mfg Spider

    • Offizieller Beitrag

    Hallo

    Genau, wobei es etwas schöner mit HiWord und LoWord und auslesen des lParam schöner währe:

    Spoiler anzeigen
    [autoit]

    #include<WindowsConstants.au3>
    #include<WinAPI.au3>

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

    GUICreate("My GUI", -1, -1, -1, -1, $WS_SIZEBOX) ; will create a dialog box that when displayed is centered

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

    $nEdit = GUICtrlCreateEdit("line 0", 10, 10)
    GUICtrlCreateButton("Ok", 20, 200, 50)
    GUIRegisterMsg($WM_MOVE, "OnMoveResize")
    GUIRegisterMsg($WM_SIZE, "OnMoveResize")
    GUISetState()
    TrayTip("", "", 1)
    #Region - GUI SwitchLoop
    While True
    Switch GUIGetMsg()
    Case - 3
    Exit
    EndSwitch
    WEnd
    #EndRegion - GUI SwitchLoop

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

    Func OnMoveResize($hWnd, $Msg, $wParam, $lParam)
    If $Msg = 5 Then
    $sString = "verschoben"
    Else

    $sString = "verändert"
    EndIf
    $x = _WinAPI_LoWord ($lParam)
    $y = _WinAPI_HiWord ($lParam)
    TrayTip("", WinGetTitle($hWnd) & " wird grade " & $sString & @CRLF & $x&"x"&$y, 1)
    EndFunc ;==>OnMoveResize

    [/autoit]

    Mfg Spider

  • hallo leutz,
    mit wingetpos kann ich die position des blauen kreuzes herausfinden (wo sich das fenster oben links befindet)
    aber ich möchte die position herausfinden, wohin das rote pfeil hinzeigt (wo die weisse fläche des gui's beginnt, wo z.B. bei guictrlcreatepic(...) posx=0 und posy=0 sind -.-)


    Ja, dafür gibt es eine Funktion ...

    [autoit]

    $hWnd = GUICreate ('foo')

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

    GUISetState ()

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

    $aCoords = GetClientRect ($hWnd)

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

    MsgBox (266304, 'Info', 'left:'&@TAB&$aCoords[0] &@CRLF& _
    'top:'&@TAB&$aCoords[1] &@CRLF& _
    'right:'&@TAB&$aCoords[2] &@CRLF& _
    'bottom:'&@TAB&$aCoords[3] &@CRLF &@TAB)

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

    Func GetClientRect ($hWnd)

    Local $aRes, $stRECT, $lpRect, $aRect[4]
    $stRECT = DllStructCreate ('long left; long top; long right; long bottom;')
    $lpRect = DllStructGetPtr ($stRECT)
    Local $aRes = DllCall ('user32.dll', 'int', 'GetClientRect', _
    'hwnd', $hWnd, _
    'ptr', $lpRect)
    If $aRes[0] <> 0 Then
    $aRect[0] = DllStructGetData ($stRECT, 'left')
    $aRect[1] = DllStructGetData ($stRECT, 'top')
    $aRect[2] = DllStructGetData ($stRECT, 'right')
    $aRect[3] = DllStructGetData ($stRECT, 'bottom')
    EndIf

    Return $aRect

    EndFunc

    [/autoit]


    http://msdn.microsoft.com/en-us/library/ms633503(VS.85).aspx

    Greetz