Pic transparent o. ä.? /Button Drag und Drop

  • Hallo,
    ich bin noch ein Anfänger mit Auoit. Icht verzweifle gerade, weil ich einfach nichts passendes finde, weder in google noch hier per sufu.
    Mein Ziel ist es, dass ein Button per Drag and Drop auf ein Bild innerhalb einer GUI verschoben werden können, und an dieser Position bleibt.
    Aber ich finde immer nur Drag and Drop beispiele für Listen etc.
    Wär nett wenn mir jmd. helfen könnte!
    Danke im Voraus!
    -----------------------
    Edit: Bräuchte jetzt eher Hilfe zu meinem letzen Beitrag unten; hängt beides mtieinander zusammen
    Danke schonmal!

  • Hallo stayawayknight,
    hier ein Skript von @ChaosKeks:

    musst es halt noch anpassen,


    mfg (Auto)Bert

  • Hab mal kleine Fehler beseitigt, aber man hätte sie nicht bemerkt wenn das Script läuft.


    Dies war falsch:
    If $Pos_M <> $Pos_M2 Then
    GUICtrlSetPos(@GUI_CtrlId,$Pos_M[0] - $x_Offset, $Pos_M[1] - $y_Offset)
    sleep(10)
    EndIf
    $Pos_M = $Pos_M2

  • ja danke auf jeden Fall mal :-)
    ich hab das erfolgreich einbauen können und es tut jetzt auch ;-)
    habe nur noch das Problem das wenn man die Label auf das Bild zieht, das das Bild dann immer automatishc im Vordergrund steht und
    das Label verdeckt... kann man ein Pic irgendwie transparent machen, sodass Buttons, Labels etc. darauf im Vordergrund bleiben und nicht hinter das Pic rutschen?

  • Nachdem es abgesetzt wurde GUICtrlSetState($Pic,$GUI_DISABLE)


    Und wenn dir das nicht reicht, gib deinem Bild den Style $WS_CLIPSIBLINGS.
    Beides zusammen sieht dann so aus:


  • Danke erstmal für die schnelle Antwort!
    Aber es funktioniert immer noch nicht wie gewünscht. das is der quellcode:



    #include <StaticConstants.au3>


    #Region
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion
    #include <ListviewConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <SliderConstants.au3>
    #Include <GuiListView.au3>
    #Include <Array.au3>
    #Include <File.au3>
    #Include <Misc.au3>


    Opt("GUIOnEventMode", 1)



    #Region ### START Koda GUI section ### Form=
    $hGui = GUICreate("Aufstellungsplaner", 742, 535, 146, 182)
    GUISetBkColor(0xFFFFFF)


    nameit()
    $picau = GUICtrlCreatePic(@ScriptDir & "\fußballfeld.jpg", 32, 16, 385, 505)
    GUICtrlSetState(-1,$GUI_DISABLE)



    $name_it = GUICtrlCreateButton("Spieler benennen", 616, 56, 105, 33, 0)
    $exit = GUICtrlCreateButton("Exit", 624, 392, 105, 33, 0)
    $help = GUICtrlCreateButton("Hilfe", 624, 344, 105, 33, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###


    GUISetState(@SW_SHOW)


    While 1
    sleep(100)
    WEnd




    Func _DragMe()
    Local $Pos_C, $Pos_M, $Pos_M2, $Opt_old
    Local $dll = DllOpen("user32.dll")
    $Opt_old = Opt('MouseCoordMode', 0)
    $Pos_C = ControlGetPos($hGui, "", @GUI_CtrlId)
    $Pos_M = MouseGetPos()
    $Pos_W = WinGetPos($hGui)
    $x_Offset = $Pos_M[0] - $Pos_C[0]
    $y_Offset = $Pos_M[1] - $Pos_C[1]
    _MouseTrap($Pos_W[0]+$x_Offset,$Pos_W[1]+$y_Offset,$Pos_W[0]+$Pos_W[2],$Pos_W[1]+$Pos_W[3])
    While _IsPressed('01', $dll)
    $Pos_M = MouseGetPos()
    If $Pos_M <> $Pos_M2 Then
    GUICtrlSetPos(@GUI_CtrlId,$Pos_M[0] - $x_Offset, $Pos_M[1] - $y_Offset)
    sleep(10)
    EndIf
    $Pos_M = $Pos_M2
    sleep(50)
    WEnd
    DllClose($dll)
    Opt('MouseCoordMode', $Opt_old)
    _MouseTrap()
    EndFunc


    Func nameit()
    MsgBox(0, "Hilfe", "Gib nun bitte die Spielernamen für die Spieler ein. Möchtest du einen nicht benennen oder hast du keine Spieler mehr, lass das Feld einfach leer.")


    $player1n = InputBox("Name", "Gib bitte einen Namen für Spieler 1 ein!")
    $player2n = InputBox("Name", "Gib bitte einen Namen für Spieler 2 ein!")
    $player3n = InputBox("Name", "Gib bitte einen Namen für Spieler 3 ein!")
    $player4n = InputBox("Name", "Gib bitte einen Namen für Spieler 4 ein!")
    $player5n = InputBox("Name", "Gib bitte einen Namen für Spieler 5 ein!")
    $player6n = InputBox("Name", "Gib bitte einen Namen für Spieler 6 ein!")
    $player7n = InputBox("Name", "Gib bitte einen Namen für Spieler 7 ein!")
    $player8n = InputBox("Name", "Gib bitte einen Namen für Spieler 8 ein!")
    $player9n = InputBox("Name", "Gib bitte einen Namen für Spieler 9 ein!")
    $player10n = InputBox("Name", "Gib bitte einen Namen für Spieler 10 ein!")
    $player11n = InputBox("Name", "Gib bitte einen Namen für Spieler 11 ein!")
    $player12n = InputBox("Name", "Gib bitte einen Namen für Spieler 12 ein!")
    $player13n = InputBox("Name", "Gib bitte einen Namen für Spieler 13 ein!")
    $player14n = InputBox("Name", "Gib bitte einen Namen für Spieler 14 ein!")
    $player15n = InputBox("Name", "Gib bitte einen Namen für Spieler 15 ein!")


    $player1 = GUICtrlCreateLabel($player1n, 440, 40, 90, 25, -1, $SS_BLACKFRAME)
    $player2 = GUICtrlCreateLabel($player2n, 440, 64, 90, 25, -1, $SS_BLACKFRAME)
    $player3 = GUICtrlCreateLabel($player3n, 440, 88, 90, 25, -1, $SS_BLACKFRAME)
    $player4 = GUICtrlCreateLabel($player4n, 440, 112, 90, 25, -1, $SS_BLACKFRAME)
    $player5 = GUICtrlCreateLabel($player5n, 440, 136, 90, 25, -1, $SS_BLACKFRAME)
    $player6 = GUICtrlCreateLabel($player6n, 440, 160, 90, 25, -1, $SS_BLACKFRAME)
    $player7 = GUICtrlCreateLabel($player7n, 440, 184, 90, 25, -1, $SS_BLACKFRAME)
    $player8 = GUICtrlCreateLabel($player8n, 440, 208, 90, 25, -1, $SS_BLACKFRAME)
    $player9 = GUICtrlCreateLabel($player9n, 440, 232, 90, 25, -1, $SS_BLACKFRAME)
    $player10 = GUICtrlCreateLabel($player10n, 440, 256, 90, 25, -1, $SS_BLACKFRAME)
    $player11 = GUICtrlCreateLabel($player11n, 440, 280, 90, 25, -1, $SS_BLACKFRAME)
    $player12 = GUICtrlCreateLabel($player12n, 440, 304, 90, 25, -1, $SS_BLACKFRAME)
    $player13 = GUICtrlCreateLabel($player13n, 440, 328, 90, 25, -1, $SS_BLACKFRAME)
    $player14 = GUICtrlCreateLabel($player14n, 440, 352, 90, 25, -1, $SS_BLACKFRAME)
    $player15 = GUICtrlCreateLabel($player15n, 440, 376, 90, 25, -1, $SS_BLACKFRAME)


    GUICtrlSetOnEvent($player1, "_DragMe")
    GUICtrlSetOnEvent($player2, "_DragMe")
    GUICtrlSetOnEvent($player3, "_DragMe")
    GUICtrlSetOnEvent($player4, "_DragMe")
    GUICtrlSetOnEvent($player5, "_DragMe")
    GUICtrlSetOnEvent($player6, "_DragMe")
    GUICtrlSetOnEvent($player7, "_DragMe")
    GUICtrlSetOnEvent($player8, "_DragMe")
    GUICtrlSetOnEvent($player9, "_DragMe")
    GUICtrlSetOnEvent($player10, "_DragMe")
    GUICtrlSetOnEvent($player11, "_DragMe")
    GUICtrlSetOnEvent($player12, "_DragMe")
    GUICtrlSetOnEvent($player13, "_DragMe")
    GUICtrlSetOnEvent($player14, "_DragMe")
    GUICtrlSetOnEvent($player15, "_DragMe")


    EndFunc


    Func _Ex()
    Exit
    EndFunc



    Sind noch nich alle funktionen die am rand stehen fertig..
    für das pic fußballfeld.jpg könnt ihr ja ein eigenes einsetzen, hoff aber das es auch so geht.ir
    Die Labels sollen auf das Feld gezogen werden, da beliben und halt auf dem Fußballfeld als Speiler zusehen sein. Also ein "Aufstellungsplaner" sozusagen.
    Hoffe ihr könnt mir nochmal helfen, geht alles bis auf dass die Labels halt hinter dem Bild zusehen sind,
    Danke!

  • Also erstmal würd ich die nameit funktion so schreiben:


    Das ist kürzer ^^


    2.: Schieb mal diesen Abschnitt hier:
    $picau = GUICtrlCreatePic(@ScriptDir & "\fußballfeld.jpg", 32, 16, 385, 505)
    GUICtrlSetState(-1, $GUI_DISABLE)

    in Zeile 22 (also vro den nameit() Funktionsaufruf). Das ganze nennt sich Z-Ordering. Das was zuerst erstellt wird, liegt auch ganz unten. Das Disable sorgt dafür, dass das Pic auch unten bleibt.
    Und wenn das Alles nichts hilft: $WS_CLIPSIBLINGS als (Pic-)Style setzen.

  • Erstmal vielen Dank für deine Mühe :-)
    nur leider klappt es immer noch nicht...
    Sieht jetzt so aus:



    #include <StaticConstants.au3>


    #Region
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion
    #include <ListviewConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <SliderConstants.au3>
    #Include <GuiListView.au3>
    #Include <Array.au3>
    #Include <File.au3>
    #Include <Misc.au3>


    Opt("GUIOnEventMode", 1)



    #Region ### START Koda GUI section ### Form=
    $hGui = GUICreate("Aufstellungsplaner", 742, 535, 146, 182)
    GUISetBkColor(0xFFFFFF)


    $picau = GUICtrlCreatePic(@ScriptDir & "\fußballfeld.jpg", 32, 16, 385, 505, $WS_CLIPSIBLINGS)
    GUICtrlSetState(-1, $GUI_DISABLE)


    nameit()
    $picau = GUICtrlCreatePic(@ScriptDir & "\fußballfeld.jpg", 32, 16, 385, 505)
    GUICtrlSetState(-1,$GUI_DISABLE)



    $name_it = GUICtrlCreateButton("Spieler benennen", 616, 56, 105, 33, 0)
    $exit = GUICtrlCreateButton("Exit", 624, 392, 105, 33, 0)
    $help = GUICtrlCreateButton("Hilfe", 624, 344, 105, 33, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###


    GUISetState(@SW_SHOW)


    While 1
    sleep(100)
    WEnd




    Func _DragMe()
    Local $Pos_C, $Pos_M, $Pos_M2, $Opt_old
    Local $dll = DllOpen("user32.dll")
    $Opt_old = Opt('MouseCoordMode', 0)
    $Pos_C = ControlGetPos($hGui, "", @GUI_CtrlId)
    $Pos_M = MouseGetPos()
    $Pos_W = WinGetPos($hGui)
    $x_Offset = $Pos_M[0] - $Pos_C[0]
    $y_Offset = $Pos_M[1] - $Pos_C[1]
    _MouseTrap($Pos_W[0]+$x_Offset,$Pos_W[1]+$y_Offset,$Pos_W[0]+$Pos_W[2],$Pos_W[1]+$Pos_W[3])
    While _IsPressed('01', $dll)
    $Pos_M = MouseGetPos()
    If $Pos_M <> $Pos_M2 Then
    GUICtrlSetPos(@GUI_CtrlId,$Pos_M[0] - $x_Offset, $Pos_M[1] - $y_Offset)
    sleep(10)
    EndIf
    $Pos_M = $Pos_M2
    sleep(50)
    WEnd
    DllClose($dll)
    Opt('MouseCoordMode', $Opt_old)
    _MouseTrap()
    EndFunc



    Func nameit()
    MsgBox(0, "Hilfe", "Gib nun bitte die Spielernamen für die Spieler ein. Möchtest du einen nicht benennen oder hast du keine Spieler mehr, lass das Feld einfach leer.")
    Local $aPlayer[15], $aPlayerN[15]


    For $i = 0 To UBound($aPlayer)-1
    $aPlayerN[$i] = InputBox("Name", "Gib bitte einen Namen für Spieler " & $i + 1 & " ein!")
    $aPlayer[$i] = GUICtrlCreateLabel($aPlayerN[$i], 440, 40 + 24 * $i, 90, 25, -1, $SS_BLACKFRAME)
    GUICtrlSetOnEvent(-1, "_DragMe")
    Next


    EndFunc


    Func _Ex()
    Exit
    EndFUnc


    bild ist aus dem Internet, weiß nich ob ich das einfach hochstellen darf ...
    auf jeden fall weiß ich langsam nich mehr weiter was noch geht...
    danke an alle die sich bemühen mir zu helfen


    Wisst ihr noch was?