hi Leutebin zur Zeit an einem Projekt, indem ich gerade Hilfe brauche.
Ich will machen, dass wenn ich auf ein Bild draufklicke, dass es dann am Mauszeiger ahfetet, bis ich auf eine andere Stelle n meinem Gui klicke.
Auf dieser Stelle soll es dann wieder abgesetzt werden. Wie bekomme ich das hin, dass das Bild Am Mauszeiger hängen bleibt, bis ich es absetzen will?
danke jetzt schon mal
mfg Bio
Am Mauszeiger
-
- [ gelöst ]
-
Bio Drink -
14. April 2009 um 15:07 -
Geschlossen -
Erledigt
-
-
Schau dir mal:
MouseGetPos()
und
GUICtrlSetPos()
an -
danke für deine schnelle Antwort, ich werde mich damit beschäftigen
mfg Bio -
Kein Thema!
ICh würde aber im OnEventModus auf ein Klick-Event auf das Bild warten (GUICtrlSetOnEvent(-1, "_aufnehmen"))
Und dann mit _IsPressed und WinActive das Loslassen abfangen -
wie meinste das genau ?
-
Ungefähr so eben zusammengebastelt (brauchst nur eine test.bmp im selbem Verzeichniss, hab ich angefügt
Spoiler anzeigen
[autoit]#include <Misc.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)
GUICreate("Form", @DesktopWidth, @DesktopHeight, 0, 0)
$Img = GUICtrlCreatePic("", 500, 300)
GUICtrlSetImage(-1, @ScriptDir & "\test.bmp")
GUICtrlSetOnEvent(-1, "_Aufnehmen")
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _Aufnehmen()
[/autoit]
$dll = DllOpen("user32.dll")
Sleep(100)
Do
$Pos = MouseGetPos()
GUICtrlSetPos($Img, $Pos[0], $Pos[1])
Until _IsPressed("01", $dll) And WinActive("Form")
DllClose($dll)
EndFunc ;==>_Aufnehmen -
danke, dein Skriptbeispiel hat mir echt weitergeholfen. Jetzt bekomme ich es hin
mfg Bio -
Tja, jetzt hab ich dirs schon fertgi gemacht
-
Nicht ganz, das war nur ein kleiner schritt ;), aber ein wichtiger
-
Mir gings jetzt nur ums das mit den Bildern...
Ich finde, es ist gut geworden!Sonst noch Fragen?
-
ja das ist gut, wenn ich sonst noch Fragen habe poste ich sie einfach wieder hin, danke schon mal
mfg Bio -
Ich habe jetzt mein skript wie bei dir aufgebaut, nur mit meinen angaben. Allerdings wirkt es bei mir nicht...
[autoit]
ich kann das Skript weder aufnehmen noch absetzen.
In diesem Skript ist nur die aufnehmen Funktion drinn.
[Spoiler]
[/autoit][autoit][/autoit][autoit]
#include <guiconstants.au3>
#include <Misc.au3>
#include <GDIplus.au3>
$main=GUICreate("",@desktopwidth,@desktopheight)
GUISetState(@sw_show)
GUISetBkColor(0x000000)
global $einzel=GUICtrlCreateLabel("Einzelspieler",600,50,@DesktopWidth,50)
GUICtrlSetFont(-1,30)
GUICtrlSetColor($einzel,0x00FFD0)
while 1
$msg=GUIGetMsg()
Select
case $msg=$gui_event_close
exit 1
case $msg=$einzel
GUIDelete($main)
_einzel()
EndSelect
WEnd
Func _einzel()
$neu=GUICreate("Spiel",@desktopwidth,@desktopheight)
GUISetState(@sw_show)
Global $Haus=GUICtrlCreatePic("C:\Users\Patrick\Desktop\Kastenspiel\Bilder\Haus.bmp",600,300,50,50)
GUICtrlSetOnEvent(-1,"_onevent")
$handle=WinGetHandle("")
_GDIPlus_Startup ()
$graphic=_GDIPlus_GraphicsCreateFromHWND($handle)
$pen=_GDIPlus_PenCreate()
_GDIPlus_GraphicsDrawLine($graphic,1000,200,1000,@desktopheight,$pen)
_GDIPlus_GraphicsDrawLine($graphic,0,200,@desktopwidth,200,$pen)
Do
Until $gui_event_close=GUIGetMsg()
_GDIPlus_PenDispose($pen)
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_Shutdown()
EndFuncFunc _onevent()
[/autoit][autoit][/autoit][autoit]
$dll=DllOpen("user32.dll")
Sleep(100)
Do
$pos=MouseGetPos()
GUICtrlSetPos($Haus,$pos[0],$pos[1])
Until _IsPressed("01") And WinActive("Spiel")
EndFunc
DllClose($dll)Func _weiter()
[/autoit]
if _IsPressed("1B") Then
exit 1
EndIf
EndFunc -
Also erstmal die Includes aufräumen und die GUI ein bisschen anpassen:
[autoit]#include <GUIConstantsEx.au3>
[/autoit]
#include <Misc.au3>
#include <GDIplus.au3>
$main = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
GUISetState()Dann, wann wird die Funktion _onevent() eigentlich aufgerufen? Außerdem gehört das
[autoit]DllClose($dll)
[/autoit]
mit darein, also so:Spoiler anzeigen
[autoit]Func _onevent()
[/autoit]
$dll = DllOpen("user32.dll")
Sleep(100)
Do
$pos = MouseGetPos()
GUICtrlSetPos($Haus, $pos[0], $pos[1])
Until _IsPressed("01") And WinActive("Spiel")
DllClose($dll)
EndFunc ;==>_oneventAußerdem musst du ganz gut aufpassen! Kombiniere OnEventMode nicht mit MsgLoop-Modus!
-
wo soll ich dann deiner Meinung nach den "oneventmodus" hinsetzen ?
-
Also entweder alles auf OnEvent mit
[autoit]Opt("GUIOnEventMode", 1)
[/autoit]
oder nicht, du musst dich entscheiden
Es lässt sich zwar beides wechseln in einem Skript, das ist aber oft unsauber und mit Vorsicht zu genießenAber dazu frag mal Oscar, der hat darüber mal irgendwas geschrieben...
-
ok, jetzt hab ich es soweit, dass es sich bewegt, es geht aba net nach meiner Maus, des bewegt sich einfach irgendwo hin...
-
Ja dann Poste mal dein Script
-
ok, hier ist es, es bewegt sich aber nur wenn ich auf das Bild draufklicke und dann auch nur irgendwo hin.
[autoit]
Ich kenne mich mit dem "Oneventmodus" nicht so gut aus, also wenn da was falsch ist bitte sagen, danke
[Spoiler]
[/autoit][autoit][/autoit][autoit]
#include <guiconstants.au3>
#include <Misc.au3>
#include <GDIplus.au3>
#include <windowsconstants.au3>
$main=GUICreate("",@desktopwidth,@desktopheight,0,0,$WS_POPUP)
GUISetState(@sw_show)
GUISetBkColor(0x000000)
global $einzel=GUICtrlCreateLabel("Einzelspieler",600,50,@DesktopWidth,50)
GUICtrlSetFont(-1,30)
GUICtrlSetColor($einzel,0x00FFD0)
while 1
$msg=GUIGetMsg()
Select
case $msg=$gui_event_close
exit 1
case $msg=$einzel
GUIDelete($main)
_einzel()
EndSelect
WEnd
Func _einzel()
$neu=GUICreate("Spiel",@desktopwidth,@desktopheight)
GUISetState(@sw_show)
Opt("guioneventMode",1)
Global $Haus=GUICtrlCreatePic("C:\Users\Patrick\Desktop\Kastenspiel\Bilder\Haus.bmp",600,300,50,50)
GUICtrlSetOnEvent($Haus,"_onevent")
_weiter()
$handle=WinGetHandle("")
_GDIPlus_Startup ()
$graphic=_GDIPlus_GraphicsCreateFromHWND($handle)
$pen=_GDIPlus_PenCreate()
_GDIPlus_GraphicsDrawLine($graphic,1000,200,1000,@desktopheight,$pen)
_GDIPlus_GraphicsDrawLine($graphic,0,200,@desktopwidth,200,$pen)
Do
Until $gui_event_close=GUIGetMsg()
_GDIPlus_PenDispose($pen)
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_Shutdown()
while 1
$msg=GUIGetMsg()
Select
case $msg=$gui_event_close
exit 1
EndSelect
WEnd
EndFuncFunc _onevent()
[/autoit][autoit][/autoit][autoit]
$dll=DllOpen("user32.dll")
Do
$pos=MouseGetPos()
GUICtrlSetPos($Haus,$pos[0],$pos[1])
Until _IsPressed("01") And WinActive("Spiel")
DllClose($dll)
EndFuncFunc _weiter()
[/autoit]
if _IsPressed("1B") Then
exit 1
EndIf
EndFunc -
Sry das konnte ich mir nicht ansehen und habs mal aufgeräumt
Ist jetzt nur ein wenig leichter zu lesen.. ob ich bugs hinzugefügt habe oder entfernt habe hab ich kein plan... habs nich mal getestet
Spoiler anzeigen
[autoit]#include <guiconstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Misc.au3>
#include <GDIplus.au3>
#include <windowsconstants.au3>Opt("guioneventMode",1)
[/autoit] [autoit][/autoit] [autoit]$main = GUICreate("",@desktopwidth,@desktopheight,0,0,$WS_POPUP)
[/autoit] [autoit][/autoit] [autoit]
GuiSetOnEvent($GUI_EVENT_CLOSE, "Terminate")
GUISetBkColor(0x000000)
$einzel = GUICtrlCreateLabel("Einzelspieler",600,50,@DesktopWidth,50)
GuiCtrlSetOnEvent(-1, "_einzel")
GUICtrlSetFont(-1,30)
GUICtrlSetColor($einzel,0x00FFD0)
GUISetState(@SW_Show)$neu = GUICreate("Spiel",@desktopwidth,@desktopheight)
[/autoit] [autoit][/autoit] [autoit]
GuiSetOnEvent($GUI_EVENT_CLOSE, "Terminate")
$Haus=GUICtrlCreatePic("C:\Users\Patrick\Desktop\Kastenspiel\Bilder\Haus.bmp",600,300,50,50)
GUICtrlSetOnEvent($Haus,"_onevent")
GuiSetState(@SW_HIDE)while 1
[/autoit] [autoit][/autoit] [autoit]
sleep(100)
WEndFunc _einzel()
[/autoit] [autoit][/autoit] [autoit]
GUIDelete($main)
GuiSetState(@SW_SHOW, $neu)
HotkeySet("{ESC}", "Terminate")$handle=WinGetHandle("")
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup ()
$graphic=_GDIPlus_GraphicsCreateFromHWND($handle)
$pen=_GDIPlus_PenCreate()
_GDIPlus_GraphicsDrawLine($graphic,1000,200,1000,@desktopheight,$pen)
_GDIPlus_GraphicsDrawLine($graphic,0,200,@desktopwidth,200,$pen)while 1
[/autoit] [autoit][/autoit] [autoit]
sleep(100)
WEnd
EndFuncFunc _onevent()
[/autoit] [autoit][/autoit] [autoit]
$dll=DllOpen("user32.dll")
Do
$pos=MouseGetPos()
GUICtrlSetPos($Haus,$pos[0],$pos[1])
Until _IsPressed("01")
DllClose($dll)
EndFuncFunc Terminate()
[/autoit]
Exit
If IsDeclared("pen") Then
_GDIPlus_PenDispose($pen)
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_Shutdown()
Endif
EndFunc -
- Offizieller Beitrag
Habe das Script nochmal ein wenig aufgeräumt. Voralledingen die Variablen $pen und $graphic als Global definiert damit Autoit sichn nicht beklagt. Desweiteren hab ich auch noch die Reihenfolge in der Function Terninate in die richtige Reihenfolge gebracht -
Spoiler anzeigen
[autoit]#include <guiconstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Misc.au3>
#include <GDIplus.au3>
#include <windowsconstants.au3>Opt("guioneventMode", 1)
[/autoit] [autoit][/autoit] [autoit]
Global $graphic, $pen$main = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate")
GUISetBkColor(0x000000)
$einzel = GUICtrlCreateLabel("Einzelspieler", 600, 50, @DesktopWidth, 50)
GUICtrlSetOnEvent(-1, "_einzel")
GUICtrlSetFont(-1, 30)
GUICtrlSetColor($einzel, 0x00FFD0)
GUISetState(@SW_SHOW)$neu = GUICreate("Spiel", @DesktopWidth, @DesktopHeight)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate")
$Haus = GUICtrlCreatePic("C:\Users\Patrick\Desktop\Kastenspiel\Bilder\Haus.bmp", 600, 300, 50, 50)
GUICtrlSetOnEvent($Haus, "_onevent")
GUISetState(@SW_HIDE)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _einzel()
[/autoit] [autoit][/autoit] [autoit]
GUIDelete($main)
GUISetState(@SW_SHOW, $neu)
HotKeySet("{ESC}", "Terminate")
$handle = WinGetHandle("")
_GDIPlus_Startup()
$graphic = _GDIPlus_GraphicsCreateFromHWND($handle)
$pen = _GDIPlus_PenCreate()
_GDIPlus_GraphicsDrawLine($graphic, 1000, 200, 1000, @DesktopHeight, $pen)
_GDIPlus_GraphicsDrawLine($graphic, 0, 200, @DesktopWidth, 200, $pen)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEnd
EndFunc ;==>_einzelFunc _onevent()
[/autoit] [autoit][/autoit] [autoit]
$dll = DllOpen("user32.dll")
Do
$pos = MouseGetPos()
GUICtrlSetPos($Haus, $pos[0], $pos[1])
Until _IsPressed("01")
DllClose($dll)
EndFunc ;==>_oneventFunc Terminate()
[/autoit]
If IsDeclared("pen") Then
_GDIPlus_PenDispose($pen)
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_Shutdown()
EndIf
Exit
EndFunc ;==>Terminate -