GUI am _GDI verschieben und Position speichern

  • Hallo Liebes Forum,

    Ich habe ein Script am laufen , und habe jetzt mal schnell ein neues erstellt ^^

    Ich wollte mein GUI an einem Png Bildchen verschieben und die Position speichern.

    Leider weiß ich nicht wie ich das machen könnte , die Sufu spuckt auch nur doofe sachen aus.

    Hier erstmal das Script (Das Bild ist im Anhang)

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <INet.au3>
    #include <string.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #Include <WinAPI.au3>
    #include <ListViewConstants.au3>
    #Include <Array.au3>
    #Include <File.au3>
    #Include <GuiListView.au3>
    _GDIPlus_Startup()
    $Trans = 205
    $Color = 0x545454

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

    $hGui = GUICreate("Desktop Wetter", 160, 245, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOOLWINDOW))
    $Menu = GUICtrlCreateContextMenu()
    $mSettings = GUICtrlCreateMenuItem("Einstellungen...", $Menu)
    $mExit = GUICtrlCreateMenuItem("Beenden...", $Menu)
    GUICtrlCreateMenuItem("", $Menu)
    $About = GUICtrlCreateMenuItem("Über Uns...", $Menu)
    GUISetBkColor($Color, $hGui)

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

    $MOVE = GUICtrlCreatePic("",1,1,0,0)

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

    WinSetTrans($hGui, "", $Trans)
    GUISetState(@SW_SHOW)
    _Bild()
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    Func _Bild()
    $Image = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\" & "Maps.png")
    $hImage = _GDIPlus_BitmapCreateHBITMAPFromBitmap($Image)
    _SetBitmapToCtrl($MOVE ,$hImage)
    EndFunc

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

    Func _SetBitmapToCtrl($CtrlId, $hBitmap)
    Local Const $STM_SETIMAGE = 0x0172
    Local Const $STM_GETIMAGE = 0x0173
    Local Const $BM_SETIMAGE = 0xF7
    Local Const $BM_GETIMAGE = 0xF6
    Local Const $IMAGE_BITMAP = 0
    Local Const $SS_BITMAP = 0x0E
    Local Const $BS_BITMAP = 0x0080
    Local Const $GWL_STYLE = -16

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

    Local $hWnd, $hPrev, $Style, $iCtrl_SETIMAGE, $iCtrl_GETIMAGE, $iCtrl_BITMAP

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

    ; determine control class and adjust constants accordingly
    Switch _WinAPI_GetClassName($CtrlId)
    Case "Button" ; button,checkbox,radiobutton,groupbox
    $iCtrl_SETIMAGE = $BM_SETIMAGE
    $iCtrl_GETIMAGE = $BM_GETIMAGE
    $iCtrl_BITMAP = $BS_BITMAP
    Case "Static" ; picture,icon,label
    $iCtrl_SETIMAGE = $STM_SETIMAGE
    $iCtrl_GETIMAGE = $STM_GETIMAGE
    $iCtrl_BITMAP = $SS_BITMAP
    Case Else
    Return SetError(1, 0, 0)
    EndSwitch

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

    $hWnd = GUICtrlGetHandle($CtrlId)
    If $hWnd = 0 Then Return SetError(2, 0, 0)

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

    ; set SS_BITMAP/BS_BITMAP style to the control
    $Style = _WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
    If @error Then Return SetError(3, 0, 0)
    _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, BitOR($Style, $iCtrl_BITMAP))
    If @error Then Return SetError(4, 0, 0)

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

    ; set image to the control
    $hPrev = _SendMessage($hWnd, $iCtrl_SETIMAGE, $IMAGE_BITMAP, $hBitmap)
    If @error Then Return SetError(5, 0, 0)
    If $hPrev Then _WinAPI_DeleteObject($hPrev)

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

    Return 1
    EndFunc

    [/autoit]
  • Die Koordinaten kannst du einfach in eine .ini schreiben.

    Wegen des verschiebens fallen mir gerade nur recht komplizierte sachen ein, das geht bestimmt auch einfacher...

    mfg Ubuntu

  • Ich habe sowas schomer irgendwo gesehen.

    Ein Notiz script (Dieses)

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    HotKeySet("{ESC}", "_Close")

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

    Opt("GUIOnEventMode", 1)

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

    Global $hWnd, $EditGUI, $Edit, $hGraphic, $hBitmap, $backbuffer, $brush1, $brush2, $pen1, $pen2, $pen3, $hFormat, $hFamily, $hFont, $tLayout, $aInfo
    Global $ScreenDc, $dc, $tSize, $pSize, $tSource, $pSource, $tBlend, $pBlend, $tPoint, $pPoint, $gdibitmap
    Global $title = "Notizzettel", _
    $user32 = DllOpen("user32.dll"), _
    $width = 150, _
    $height = 200

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

    Global $notice = "Durch drücken und ziehen des Eselohrs, können Sie die Fensterposition ändern. " & @CRLF & @CRLF & _
    "Wenn Sie die Notiz ändern wollen, klicken Sie auf die bereits vorhandene Notiz. " & @CRLF & @CRLF & _
    "Um den Notizzettel zu schließen, klicken Sie auf das rote X. "

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

    Global $WinPos[4], $MousePos[2]

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

    Global $points[6][2]

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

    $points[0][0] = 5
    $points[1][0] = 0
    $points[1][1] = 20
    $points[2][0] = 20
    $points[2][1] = 0
    $points[3][0] = 149
    $points[3][1] = 0
    $points[4][0] = 149
    $points[4][1] = 199
    $points[5][0] = 0
    $points[5][1] = 199

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

    $hWnd = GUICreate($title, $width, $height, -1, -1, 0x80000000, BitOR(0x00000080, 0x00080000, 0x00000008))

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

    _Startup()

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

    _DrawSheet()

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

    GUISetState(@SW_SHOW, $hWnd)

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

    $EditGUI = GuiCreate($title & " Edit", 110, 155, -1, -1, BitOr(0x80000000, 0x00000200), BitOR(0x00000080, 0x00000008))
    $Edit = GUICtrlCreateEdit($notice, 0, 0, 110, 155, BitOR(0x1000, 0x0004, 0x0040), 0x00000204)

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

    GUISetState(@SW_HIDE, $EditGUI)

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

    While 1
    If _IsPressed("01") And WinActive($hWnd) Then
    $WinPos = WinGetPos($hWnd)
    $MousePos = MouseGetPos()
    If $MousePos[0] >= $WinPos[0] And $MousePos[0] <= $WinPos[0] + 20 And $MousePos[1] >= $WinPos[1] And $MousePos[1] <= $WinPos[1] + 20 Then
    GUISetState(@SW_HIDE, $EditGUI)
    MouseMove($WinPos[0] + 10, $WinPos[1] + 10, 0)
    GUISetCursor(9, 1, $hWnd)
    While _IsPressed("01")
    $MousePos = MouseGetPos()
    WinMove($hWnd, "", $MousePos[0] - 10, $MousePos[1] - 10)
    WEnd
    GUISetCursor(2, 0, $hWnd)
    ElseIf $MousePos[0] >= $WinPos[0] + 20 And $MousePos[0] <= $WinPos[0] + 130 And $MousePos[1] >= $WinPos[1] + 25 And $MousePos[1] <= $WinPos[1] + 185 Then
    WinMove($EditGUI, "", $WinPos[0] + 20, $WinPos[1] + 25)
    GUISetState(@SW_SHOW, $EditGUI)
    ElseIf $MousePos[0] >= $WinPos[0] + 135 And $MousePos[0] <= $WinPos[0] + 145 And $MousePos[1] >= $WinPos[1] + 5 And $MousePos[1] <= $WinPos[1] + 15 Then
    _Close()
    Else
    GUISetState(@SW_HIDE, $EditGUI)
    EndIf
    EndIf
    If _IsPressed("0D") And _IsPressed("11") And WinActive($EditGUI) Then
    $notice = GUICtrlRead($Edit)
    GUISetState(@SW_HIDE, $EditGUI)
    _DrawSheet()
    EndIf
    Sleep(10)
    WEnd

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

    Func _Startup()
    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 4)

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

    $brush1 = _GDIPlus_BrushCreateSolid(0xFFF8F8FF)
    $brush2 = _GDIPlus_BrushCreateSolid()
    $pen1 = _GDIPlus_PenCreate(0xFF4169E1)
    $pen2 = _GDIPlus_PenCreate(0x224169E1)
    $pen3 = _GDIPlus_PenCreate(0xFFFF0000, 2)

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

    $ScreenDc = _WinAPI_GetDC($hWnd)
    $dc = _WinAPI_CreateCompatibleDC($ScreenDc)

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

    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", $width)
    DllStructSetData($tSize, "Y", $height)
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)
    $tPoint = DllStructCreate($tagPOINT)
    $pPoint = DllStructGetPtr($tPoint)
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)

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

    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    $hFont = _GDIPlus_FontCreate($hFamily, 9, 0, 2)
    $tLayout = _GDIPlus_RectFCreate(20, 25, 110, 155)
    EndFunc

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

    Func _Close()
    GUISetState(@SW_MINIMIZE, $hWnd)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    DllClose($user32)
    Exit
    EndFunc

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

    Func _DrawSheet()
    _GDIPlus_GraphicsFillPolygon($backbuffer, $points, $brush1)

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

    _GDIPlus_GraphicsDrawPolygon($backbuffer, $points, $pen1)

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

    _GDIPlus_GraphicsDrawLine($backbuffer, $points[1][0], $points[1][1], 20, 20, $pen1)
    _GDIPlus_GraphicsDrawLine($backbuffer, 20, 20, $points[2][0], $points[2][1], $pen1)

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

    _GDIPlus_GraphicsDrawLine($backbuffer, 4, 16, 4, 199, $pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer, 9, 12, 9, 199, $pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer, 14, 6, 14, 199, $pen2)

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

    For $i = 19 To $width Step +5
    _GDIPlus_GraphicsDrawLine($backbuffer, $i, 0, $i, 199, $pen2)
    Next

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

    _GDIPlus_GraphicsDrawLine($backbuffer, 16, 4, 149, 4, $pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer, 12, 9, 149, 9, $pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer, 5, 14, 149, 14, $pen2)

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

    For $i = 19 To $height Step +5
    _GDIPlus_GraphicsDrawLine($backbuffer, 0, $i, 149, $i, $pen2)
    Next

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

    _GDIPlus_GraphicsDrawLine($backbuffer, 135, 5, 145, 15, $pen3)
    _GDIPlus_GraphicsDrawLine($backbuffer, 135, 15, 145, 5, $pen3)

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

    $aInfo = _GDIPlus_GraphicsMeasureString($backbuffer, $notice, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($backbuffer, $notice, $hFont, $aInfo[0], $hFormat, $brush2)

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

    $gdibitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    _WinAPI_SelectObject($dc, $gdibitmap)
    _WinAPI_UpdateLayeredWindow($hWnd, $ScreenDc, 0, $pSize, $dc, $pSource, 0, $pBlend, 2)
    _WinAPI_DeleteObject($gdibitmap)
    EndFunc

    [/autoit]
  • Ich weis zwar nicht was du genau suchst, aber vllt hilft dir das hier weiter:

    Spoiler anzeigen
    [autoit]


    #Include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    Opt('MustDeclareVars', 1)
    Opt('GUIOnEventMode', 1)

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

    Global $hGui = GUICreate("Form2", 480, 250, 12, 12, $WS_POPUP)

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

    GUICtrlCreateLabel('X', 440, 10, 15, 20, $SS_CENTER)
    GUICtrlSetOnEvent(-1, '_End')

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

    GUICtrlCreateLabel("", 0, 0, 480, 250, $WS_EX_TRANSPARENT, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    GUISetState(@SW_SHOW, $hGui)
    While Sleep(200)
    WEnd

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

    Func _End()
    Exit
    EndFunc

    [/autoit]
  • Die Antwort die du suchst, liegt in der While Schleife.

    Frag einfach mit _IsPressed() die linke Maustaste ab, und wenn die Koordinaten sstimmen verschieb das Fenster mit WinMove().

    Achja, dass ist mein Script. ;)

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • Schau dir mal diese Funtkion an:

    [autoit]

    GUIRegisterMsg(0x0201, "_WM_LButtonDown")

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

    Func _WM_LButtonDown($hwnd, $message, $wParam, $lParam)
    Local $Split = StringSplit($lParam, "")
    Local $x = Dec($split[7] & $split[8] & $split[9] & $split[10])
    Local $y = Dec($split[3] & $split[4] & $split[5] & $split[6])
    ToolTip("Die linke Maustaste wurde gedrückt" & @CRLF & "xPos: " & $x & @CRLF & "yPos: " & $y)
    Return 0
    EndFunc

    [/autoit]
    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • schau dir mal dashier an!

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    $hGui = GUICreate('Test', 600, 400, -1, -1, $WS_POPUP, $WS_EX_CONTROLPARENT)
    GUISetBkColor(0xff0000)
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]

    habe ich von oscar^^
    bzw. black_scorpi hat es von oscar