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.
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.
Die Coords mit Opt auf "Client" setzen ;).
peethebee
Hast Du es schonmal mit Opt('PixelCoordMode', 2) probiert?
Ich habe mal ein Beispielscript geschrieben (geht doch ohne PixelCoordMode):
#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
Func _End()
Exit
EndFunc
Func _Move()
$posWin = WinGetPos('test')
$pos = WinGetCaretPos()
_GUICtrlStatusBar_SetText($hStatus, ' Position X: ' & $posWin[0] & '+' & $pos[0] & ' Y: ' & $posWin[1] & '+' & $pos[1])
EndFunc
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.
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
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
Mfg Spider
Hallo
Genau, wobei es etwas schöner mit HiWord und LoWord und auslesen des lParam schöner währe:
#include<WindowsConstants.au3>
#include<WinAPI.au3>
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
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
Mfg Spider
Hallo
Ja, was heisst bug^^ Im Hexidezimalen gibt es keine negativen Zahlen. Desswegen fängt das sozusagen von Hinten an, da LoWord nichts anderes ist als BitAnd($lParam,0xFFFF)..
Hab jetzt aber keine Idee wie man das jetzt lösen könnte^^
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 ...
$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)
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
http://msdn.microsoft.com/en-us/library/ms633503(VS.85).aspx
Greetz