Control soll Benutzer "resizen" und verschieben können (Fortführung)

  • Hey @ all
    Also ich möchte ein Control mir erstellen, dass resizealbe ist. Dh widht, heigth,x,y Wert ändern.
    Wenn es geht wäre es schön wenn man es verschieben kann.

    Mein Versuch:

    [autoit]


    GUICtrlSetStyle(-1,$WS_THICKFRAME);$WS_SIZEBOX)

    [/autoit]


    Dies funktioniert nicht bei Labels ($WS_THICKFRAME und $WS_SIZEBOX).
    Wenn ihr fragt: Wieso soll man das mit Label machen: Ich möchte, dass es bei jedem Standard-Control funktionier. (Standard-Control: Ohne einen Include)

    Thx4Help

    Nur keine Hektik - das Leben ist stressig genug

    2 Mal editiert, zuletzt von Antispeed (29. Juni 2010 um 17:56)

  • mein versuch:

    Spoiler anzeigen
    [autoit]

    ;width/heigth habe ich erstmal rausgelassen, weil ich ncith weiß wie ich erkennen soll obs verschoben oder resized werden soll!

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 415, 465, 192, 124)
    $Label1 = GUICtrlCreateLabel("Label1", 112, 40, 36, 17)
    $Input1 = GUICtrlCreateInput("Input1", 88, 144, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 72, 272, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    $pos = GUIGetCursorInfo()
    If $pos[4] <> 0 And _IsPressed(01) Then
    $poscon = ControlGetPos($Form1,"",$pos[4])
    $var = $poscon[2] / 2
    $var2 = $poscon[3] /2
    While _IsPressed(01)
    $posnow = GUIGetCursorInfo()
    GuiCtrlSetPos($pos[4],$posnow[0]-$var,$posnow[1]-$var2,Default,Default)
    WEnd
    EndIf
    WEnd

    [/autoit]

    er klappt eig ganz gut!!

  • Thx :party: .
    So jetzt kann ich schon mal verschieben.
    Muss ich mir jetzt daraus auch eine Resize-Funk machen, oder gibt es eine, die überall funktioniert?

    Nur keine Hektik - das Leben ist stressig genug

  • Hier mal ein Anfang. Hab ehrlich gesagt keine Lust das jetzt zu perfektionieren.

    Spoiler anzeigen
    [autoit]

    $hGUI = GUICreate("")
    GUISetState()
    _GUICtrlCreate($hGUI, "Input", "Mein Input", 20, 20, 200, 20)

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

    _GUICtrlCreate($hGUI, "Label", "Das ist ein Label", 20, 70, 200, 20)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd
    ;~ GUICtrlCreateInput(
    Func _GUICtrlCreate($hWnd, $sWhat, $sTitle, $iX, $iY, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = -1)
    Local Const $WS_POPUP = 0x80000000, $WS_SIZEBOX = 0x00040000, $WS_BORDER = 0x00800000, $WS_EX_MDICHILD = 0x40
    Local $iCtrlID, $hGUI
    $hGUI = GUICreate("", $iWidth, $iHeight, $iX, $iY, BitOR($WS_POPUP, $WS_SIZEBOX), $WS_EX_MDICHILD, $hWnd)
    Execute("GUICtrlCreate" & $sWhat & "(" & "'" & $sTitle & "'" & "," & 0 & "," & 0 & "," & $iWidth & "," & $iHeight & ")")
    ConsoleWrite(Hex(@error, 4) & @CRLF)
    GUISetState(@SW_SHOW, $hGUI)
    GUICtrlSetResizing(-1, 34)
    Return $iCtrlID
    EndFunc ;==>_GUICtrlCreate

    [/autoit]
  • Hmm.
    Mein Skript funkt. auf einmal garnicht mehr... ;(
    Hier mein Versuch:

    Spoiler anzeigen
    [autoit]


    #include <WinAPI.au3>
    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    $hGUI = GUICreate("")
    GUISetState()
    $l=GUICtrlCreateButton("jaaa",5,5)
    _GUICtrlCreate($hGUI,$l)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Func _GUICtrlCreate($hgui,$hWnd)
    $pos=ControlGetPos($hgui,"",$hwnd)
    $iX=$pos[0]
    $iY=$pos[1]
    $iWidth=$pos[2]
    $iHeight=$pos[3]
    Switch _WinAPI_GetClassName($hwnd)
    Case "Static"
    $class="Label"
    Case "Edit"
    If BitAND(_GetWindowStyles($hwnd), $ES_MULTILINE) = $ES_MULTILINE Then
    $class="Edit"
    Else
    $class="Input"
    EndIf
    Case "Button"
    If BitAND(_GetWindowStyles($hwnd),$BS_CHECKBOX)=$BS_CHECKBOX Then
    $class="CheckBox"
    Else
    $class="Button"
    EndIf
    Case "ComboBox"
    $class="Combo"
    Case "SysDateTimePick32"
    $class="Date"
    Case "ListBox"
    $class="List"
    Case "SysListView32"
    $class="ListView"
    Case "SysMonthCal32"
    $class="MonthCal"
    Case 0
    $class="Pic"
    $class="Progress"
    Case Else
    $class="Label"
    $class=_WinAPI_GetClassName($hwnd)
    EndSwitch
    $sWhat=$class
    Local Const $WS_POPUP = 0x80000000, $WS_SIZEBOX = 0x00040000, $WS_BORDER = 0x00800000, $WS_EX_MDICHILD = 0x40
    $hGUI = GUICreate("", $iWidth, $iHeight, $iX, $iY, BitOR($WS_POPUP, $WS_SIZEBOX), $WS_EX_MDICHILD, $hWnd)
    $s=0
    If $class="Progress" Then
    Execute("$h=GUICtrlCreate" & $sWhat & "(" & $s & "," & $s & "," & $iWidth-$s & "," & $iHeight-$s & ")")
    Else
    Execute("$h=GUICtrlCreate" & $sWhat & "(" & "''" & "," & $s & "," & $s & "," & $iWidth-$s & "," & $iHeight-$s & ")")
    EndIf
    ConsoleWrite(@error & @CRLF)
    Execute("GuiCtrlSetData($h,'"&guictrlread($hwnd)&"')")
    ;ConsoleWrite(Hex(@error, 4) & @CRLF)
    GUISetState(@SW_SHOW, $hGUI)
    GUICtrlSetResizing($hGUI, 34)
    ClipPut("$h=GUICtrlCreate" & $sWhat & "(" & "''" & "," & $s & "," & $s & "," & $iWidth-$s & "," & $iHeight-$s & ")"&@CRLF&"GuiCtrlSetData($h,'"&guictrlread($hwnd)&"')")
    GUICtrlDelete($hwnd)
    EndFunc

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

    Func _GetWindowStyles($hwnd)
    If Not IsHWnd($hwnd) Then
    $hwnd = GUICtrlGetHandle($hwnd)
    EndIf
    $tagWINDOWINFO = DllStructCreate("DWORD cbSize; long[4]; long[4]; DWORD dwStyle; DWORD dwExStyle; DWORD dwWindowStatus;UINT;UINT;WORD;WORD")
    DllStructSetData($tagWINDOWINFO, "cbSize", DllStructGetSize($tagWINDOWINFO))
    DllCall("User32.dll", "BOOL", "GetWindowInfo", "hwnd", $hwnd, "ptr", DllStructGetPtr($tagWINDOWINFO))
    Return DllStructGetData($tagWINDOWINFO, "dwStyle")
    EndFunc

    [/autoit]

    Thx4Help 8)

    Nur keine Hektik - das Leben ist stressig genug

  • Control soll Benutzer "resizen" und verschieben können

    {OT]ja solch ein aktives Control, dass den DAU zurechtstutzt und (vom Rechner weg) schiebt hätte ich manchmal auch ganz gerne.[/OT] schau dir noch einmal SEuBo 's Lösung an, scheint der richtige Weg zu sein,

    mfg (Auto)Bert

  • Ja ^^. Ich bin zwar nicht der DAU. Sry drücke mich nicht immer genau aus.

    Das ist doch genau das Skript von ihm, nur verändert. Aber beim verändern habe ich einen Fehler eingebaut, den ich nicht finde und desshalb hier frage ob ihr den findet.

    Nur keine Hektik - das Leben ist stressig genug