GUI bewegen

  • Hallo :D

    ich habe eine GUI ohne bar oben also eine bar ohne close minimize und maximise button und der bar im hintergrund (hoffe ihr wisst was ich mein *hehe*) und ich kann diese ja nun nichtmehr bewegen normalerweise zieht man ja an dieser bar jedoch da nun keine mehr da ist geht das natürlich nichtmehr nun zu meiner frage ist es möglich das statt der bar die ganze form so beweglich zu machen

    Einmal editiert, zuletzt von Sweet Lucia (30. März 2009 um 18:21)

  • Du meinst bestimmt, das du bei GUICreate den Style POPUP gemacht hast oda?

    Dann könnte man vllt einen Button machen, dessen Befehl in etwas so lautet:
    Wenn Button gedrückt, finde Mausposition, bewege GUI zu mausposition.

    Musst mal in der Hilfe gucken. is bestimmt net al so schwer zu realisieren. ;)

    PS: Ich guck mal ob ich schnell nen Beispiel hin bekomme.

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt ( "GuiOnEventMode", 1 )

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125, $WS_POPUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_PrimeDown")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _PrimeDown()
    Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    Local $WinPos = WinGetPos(@GUI_WinHandle)
    Local $MPos = MouseGetPos()
    $DifX = $MPos[0] - $WinPos[0]
    $DifY = $MPos[1] - $WinPos[1]
    Do
    Sleep(15)
    $MPos = MouseGetPos()
    $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    Until ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Or (Not $MouseData[2])
    ;~ GUICtrlSetCursor($background, 9)
    While $MouseData[2]
    $MPos = MouseGetPos()
    $WinPos = WinGetPos(@GUI_WinHandle)
    If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
    WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
    EndIf
    Sleep(15)
    $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    WEnd
    ;~ GUICtrlSetCursor($background, 2)
    EndFunc ;==>_PrimeDown

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    GUICreate('POPUP', 400, 400, -1, -1, $WS_POPUP)
    GUICtrlCreateLabel("a", 0, 0, 400, 400, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    GUISetState()

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

    Do
    Sleep(20)
    Until GUIGetMsg() = -3

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


    Edit: Zu spät ;)

  • Hallo und herzlich willkommen Sweet Lucia,

    hier mal eine Funktion und ein Link zu einem Script, wo diese eingesetzt wird !

    Spoiler anzeigen
    [autoit]


    GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
    Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
    If ($hWnd = $GUI) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
    EndFunc ;==>WM_NCHITTEST

    [/autoit]


    Shutdown for Benjamin - SfB
    Viel Erfolg ! :)

  • @Sweet Lucia: Nichts zu danken, L3viathan2142 hatte die Lösung ja auch schon vor mir gepostet.

    Greek: Das mach ich nur aus Bequemlichkeit so, wenn es schnell gehen soll ;) . Bei Labels verwende ich dann auch immer den Style 0x201 um den Text vertikal und horizontal zu zentrieren. Manche 'Sachen kann man sich eben leicht merken und sie gehen dann auch noch schneller (zu schreiben). Beim Ausführen kann ich mir nicht vorstellen, dass es einen Geschwindigkeitsunterschied gibt.

    RR04: Ohne Erklärung wird diese Funktion hier wohl niemand nutzen ;)