Button 2 mal verwenden

09/21/2009 14:51 qLADYofLORDp#1
hey ho
ich hab das komische problem, dass ich den button "Go To" nur einmal verwenden kann

kann mir vtl. einer erklääären warum? :(

auch den knopf zum schliessen kann ich nicht mehr verwenden, sobald ich den "Go To" knopf einmal verwendet habe.

kurz was das progi tun soll:
-koordinaten der aktuellen mauspos ausgeben
-hintergrundfarbe der aktuellen maus pos anzeigen
-zu eingegebenen koordinaten springen (also der Cursur, für was auch der button gedacht ist =))

ist also was kleines zum üüben :rtfm:

Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
HotKeySet("{F9}","shot")
HotKeySet("{F10}","infos")
Dim $springen = 0
Dim $label = 0
Dim $labe2 = 0
Dim $farbe = 0
GUICreate("Infotool",300, 300, -1, -1,$WS_SIZEBOX)
Opt("GUIOnEventMode", 1)
GUICtrlCreateLabel("Koordinaten:",40,68)
$kords1=GUICtrlCreateInput("",120,65,30)
$kords2=GUICtrlCreateInput("",160,65,30)
$springen=GUICtrlCreateButton("Go To",120,240)
GUICtrlSetOnEvent($springen,"jump")
$mauspos=MouseGetPos()
$label1=GUICtrlCreateLabel("Maus-position: "&$mauspos[0]&","&$mauspos[1],40,20,200)
$farbe=PixelGetColor($mauspos[0],$mauspos[1])
$label2=GUICtrlCreateLabel("Farbe: "&Hex($farbe,6),40,40,200)
GUISetOnEvent($GUI_EVENT_CLOSE, "schliessen")
GUISetState(@sw_show)
infos()
While 1
	Sleep(1000)
WEnd
Func schliessen()
	Exit
EndFunc
Func infos()
	while 1
		$mauspos=MouseGetPos()
		GUICtrlSetData($label1,"Maus-position: "&$mauspos[0]&","&$mauspos[1])
		$farbe=PixelGetColor($mauspos[0],$mauspos[1])
		GUICtrlSetData($label2,"Farbe: "&Hex($farbe,6))
		Sleep(40)
	WEnd
EndFunc
Func shot()
	While 1
		Sleep(1000)
	WEnd
EndFunc
Func jump()
	$kords1=GUICtrlRead($kords1)
	$kords2=GUICtrlRead($kords2)
	MouseMove($kords1,$kords2,1)
	infos()
EndFunc
09/21/2009 20:31 | Moep |#2
Quote:
Originally Posted by qLADYofLORDp View Post
hey ho
ich hab das komische problem, dass ich den button "Go To" nur einmal verwenden kann

kann mir vtl. einer erklääären warum? :(

auch den knopf zum schliessen kann ich nicht mehr verwenden, sobald ich den "Go To" knopf einmal verwendet habe.

kurz was das progi tun soll:
-koordinaten der aktuellen mauspos ausgeben
-hintergrundfarbe der aktuellen maus pos anzeigen
-zu eingegebenen koordinaten springen (also der Cursur, für was auch der button gedacht ist =))

ist also was kleines zum üüben :rtfm:

Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
HotKeySet("{F9}","shot")
HotKeySet("{F10}","infos")
Dim $springen = 0
Dim $label = 0
Dim $labe2 = 0
Dim $farbe = 0
GUICreate("Infotool",300, 300, -1, -1,$WS_SIZEBOX)
Opt("GUIOnEventMode", 1)
GUICtrlCreateLabel("Koordinaten:",40,68)
$kords1=GUICtrlCreateInput("",120,65,30)
$kords2=GUICtrlCreateInput("",160,65,30)
$springen=GUICtrlCreateButton("Go To",120,240)
GUICtrlSetOnEvent($springen,"jump")
$mauspos=MouseGetPos()
$label1=GUICtrlCreateLabel("Maus-position: "&$mauspos[0]&","&$mauspos[1],40,20,200)
$farbe=PixelGetColor($mauspos[0],$mauspos[1])
$label2=GUICtrlCreateLabel("Farbe: "&Hex($farbe,6),40,40,200)
GUISetOnEvent($GUI_EVENT_CLOSE, "schliessen")
GUISetState(@sw_show)
infos()
While 1
	Sleep(1000)
WEnd
Func schliessen()
	Exit
EndFunc
Func infos()
	while 1
		$mauspos=MouseGetPos()
		GUICtrlSetData($label1,"Maus-position: "&$mauspos[0]&","&$mauspos[1])
		$farbe=PixelGetColor($mauspos[0],$mauspos[1])
		GUICtrlSetData($label2,"Farbe: "&Hex($farbe,6))
		Sleep(40)
	WEnd
EndFunc
Func shot()
	While 1
		Sleep(1000)
	WEnd
EndFunc
Func jump()
	$kords1=GUICtrlRead($kords1)
	$kords2=GUICtrlRead($kords2)
	MouseMove($kords1,$kords2,1)
	infos()
EndFunc
wieso schreibst du rtfm und machst es nicht einfach selber mal etwas gründlicher?! :facepalm:
Scheinbar hast du nämlich noch nicht verstanden wie das Prinzip einer while Schleife funktioniert.
Es gibt für normal meist nur eine, EIINNNEEE while Hauptschleife.
Sobal du nämlich in deinem Programm einen Button klickst, hängt du in einer deiner vielen, vielen while schleifen und es wird nichtmehr der Zustand der Buttons abgefragt...
09/22/2009 17:56 qLADYofLORDp#3
hab ich mir auch schon überlegt aber ich kann mir das nicht so ganz erklääären weeeil:
sobald das programm gestartet ist, ist es in der whileschleife der funktion infos drinne, daaaann drück ich auf den knopf wodruch ich in die andere schleife komme.
wenn ich dann wieder staaaarte, bin ich wieder in der infs-schleife drinne (d.h ausgansposition) d.h also, dass ich in der selben schleife stecke wie am anfang. wenn nun also am anfang der zustand abgefragt wird (wenn cih das erste mal n der schleife bin) sollte das doch beim 2 mal genau so gut funktionieren. oder??

das :rtfm: soll ausrücken, dass ich am üüüben bin (ich bin noch kein meister und was aus übung wird sollten ja mitlerweile alle wissen)

aus fehlern lernt man allerdings nur, wenn man sie auch lösen kann. die lösung für diesen fehler ist für mich jedoch relativ schwer zu finden.

googeln ...... 1. ich habs versucht 2. was soll ich denn da hin schreiben? "es geht nicht." solange man nciht weis wo der fehler liegt ist es schwiiiierig das problem zu lööösen.

selber überlegen, fehler analyse ..... hab ich auch gemacht (wie oben geschreieben)

Help datei ...... das selbe prob wie bei google nur noch schlimmer

jemanden fragen ..... tu ich ja =)

es wär wircklich toll wenn sich das mal jemand anschaun könnte :(
09/22/2009 18:51 | Moep |#4
Quote:
Originally Posted by qLADYofLORDp View Post
hab ich mir auch schon überlegt aber ich kann mir das nicht so ganz erklääären weeeil:
sobald das programm gestartet ist, ist es in der whileschleife der funktion infos drinne, daaaann drück ich auf den knopf wodruch ich in die andere schleife komme.
wenn ich dann wieder staaaarte, bin ich wieder in der infs-schleife drinne (d.h ausgansposition) d.h also, dass ich in der selben schleife stecke wie am anfang. wenn nun also am anfang der zustand abgefragt wird (wenn cih das erste mal n der schleife bin) sollte das doch beim 2 mal genau so gut funktionieren. oder??

das :rtfm: soll ausrücken, dass ich am üüüben bin (ich bin noch kein meister und was aus übung wird sollten ja mitlerweile alle wissen)

aus fehlern lernt man allerdings nur, wenn man sie auch lösen kann. die lösung für diesen fehler ist für mich jedoch relativ schwer zu finden.

googeln ...... 1. ich habs versucht 2. was soll ich denn da hin schreiben? "es geht nicht." solange man nciht weis wo der fehler liegt ist es schwiiiierig das problem zu lööösen.

selber überlegen, fehler analyse ..... hab ich auch gemacht (wie oben geschreieben)

Help datei ...... das selbe prob wie bei google nur noch schlimmer

jemanden fragen ..... tu ich ja =)

es wär wircklich toll wenn sich das mal jemand anschaun könnte :(
24 Zeilen strukturierten Code 'owned' 48 Zeilen Spagetthi Code
10 Minuten Arbeit 'owned' bis zur Unendlichkeit und noch viel weiter...
1 While Schleife 'owned' 3 While Schleifen
0 Fuktionen 'owned' 3 Funktionen
0 Hotkeys 'owned' 2 Hotkeys

:rolleyes:

Code:
#include <GUIConstants.au3>
GUICreate("", 200, 150)
$setX = GUICtrlCreateInput("", 10, 5, 30)
$setY = GUICtrlCreateInput("", 10, 35, 30)
$getX = GUICtrlCreateLabel("0000", 60, 5)
$getY = GUICtrlCreateLabel("0000", 60, 35)
$getColor = GUICtrlCreateLabel("0x000000", 120, 75)
$btn = GUICtrlCreateButton("Go", 40, 75, 60, 20)
GUISetState()
While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $btn
			MouseMove(GUICtrlRead($setX), GUICtrlRead($setY))
	EndSelect
	$mousePos = MouseGetPos()
	GUICtrlSetData($getX, $mousePos[0])
	GUICtrlSetData($getY, $mousePos[1])
	GUICtrlSetData($getColor, PixelGetColor($mousePos[0], $mousePos[1]))
	Sleep(10)
WEnd
10/06/2009 13:28 qLADYofLORDp#5
Quote:
Originally Posted by | Moep | View Post
24 Zeilen strukturierten Code 'owned' 48 Zeilen Spagetthi Code
10 Minuten Arbeit 'owned' bis zur Unendlichkeit und noch viel weiter...
1 While Schleife 'owned' 3 While Schleifen
0 Fuktionen 'owned' 3 Funktionen
0 Hotkeys 'owned' 2 Hotkeys

:rolleyes:

Code:
#include <GUIConstants.au3>
GUICreate("", 200, 150)
$setX = GUICtrlCreateInput("", 10, 5, 30)
$setY = GUICtrlCreateInput("", 10, 35, 30)
$getX = GUICtrlCreateLabel("0000", 60, 5)
$getY = GUICtrlCreateLabel("0000", 60, 35)
$getColor = GUICtrlCreateLabel("0x000000", 120, 75)
$btn = GUICtrlCreateButton("Go", 40, 75, 60, 20)
GUISetState()
While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $btn
			MouseMove(GUICtrlRead($setX), GUICtrlRead($setY))
	EndSelect
	$mousePos = MouseGetPos()
	GUICtrlSetData($getX, $mousePos[0])
	GUICtrlSetData($getY, $mousePos[1])
	GUICtrlSetData($getColor, PixelGetColor($mousePos[0], $mousePos[1]))
	Sleep(10)
WEnd
ganz schöön coool nur dass da ein denkfehler unterlaufen ist.... wenn ich die koordinaten brauche, muss die maus still stehen. was unterumständen müühsam sein kann also braucht es wohl oder üüübel ein hotkey also so wie in meinem code, was mich auf den eigentlichen punkt bringt.

es ist wirklich nett das du mir das geschrieben hast und ich weis das auch zu schätzen nur bringt mir das nicht sehr viel. ich mach das hier als übung und ned weil ich das uuunebdingt brache =).
d.h also ich muss wissen was ich falsch gemacht habe. ob mein spagetti code jetzte sch... aussieht oder nicht^^
das problem ist das es nicht läuft und ich möchte gerne wissen warum.
dass er in einer schlaufe hängenbeibt kann ich mir (wie in vorhergehenden posts beschrieben) nicht vorstellen.

nochmal vielen dank für die mühe aber ich möchte halt gerne wissen wo der fehler ist.
10/07/2009 00:04 buFFy!#6
HotKeys sind überbewertet und schaffen Funktionen.
Die meisten HotKey's brauchst du sowieso nicht das ganze Skript über.

GetAsyncKeyState ftw. oder wie der AutoIT'ler sagt.. "_isPressed" ;)

Edit: Nen EgoShooter kriegst du mit au3 nicht hin. xD
10/07/2009 11:32 qLADYofLORDp#7
.... naja ich weis zwar noch immer nicht wo mein fehler ist und das soll auch kein EgoShooter werden xDD

aber ich werd jetzt halt einfach mal das _isPressed (noch nie verwendet) ein bauen und die hotkeys raus nehemen... mal guckn ob as was bringt.


EDIT:
ich hab jetze das progi umgeschrieben und es ist genau so wie vorher.. die hotkeys (_isPressed) funktionieren (genau so vie vorher auch) ich kann einmal auf den button goto klicken (genau so vie vorher auch) und wenn ich das 2 mal auf goto klicke funktioniert kein button mehr (nicht mal der schliessen knopf (genauwie vorher auch)....
ich seh den fehler echt nicht -.-
10/07/2009 12:29 | Moep |#8
Was willst du mit den Hotkey erreichen, dass die Maus an die Pos springt oder dass die Position der Maus ausgelesen wird?
10/07/2009 14:18 qLADYofLORDp#9
nein, der soll nur aufhören die koordinaten und farben zu aktualisieren.
das ist ja aber auch kein probleeem die hotkeys funktionieren ja!!!

kopiert doch mal den code und führt ihn aus.
dann versucht ihr zu (mit dem tool) zu den koordinaten 100,100 zu springen und dann noch zu den koordinaten 200,200.

das wird nicht funktionieren und warum das nicht funktioniert weis ich nicht... das ist ja mein probleeeem. *verzweifel*
10/07/2009 15:47 | Moep |#10
Wieso sollen wir dafür unbeding dein falsches Script umbauen. Nimm doch einfach meins, probier zu verstehen was ich da gemacht hab und bau das dann um.

z.B. so:
Code:
#include <GUIConstants.au3>

Global $Paused
HotKeySet("{PAUSE}", "TogglePause")

GUICreate("", 200, 150)
$setX = GUICtrlCreateInput("", 10, 5, 30)
$setY = GUICtrlCreateInput("", 10, 35, 30)
$getX = GUICtrlCreateLabel("0000", 60, 5)
$getY = GUICtrlCreateLabel("0000", 60, 35)
$getColor = GUICtrlCreateLabel("0x000000", 120, 75)
$btn = GUICtrlCreateButton("Go", 40, 75, 60, 20)
GUISetState()

Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
        sleep(100)
        ToolTip('Script ist pausiert',0,0)
    WEnd
    ToolTip("")
EndFunc

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $btn
			MouseMove(GUICtrlRead($setX), GUICtrlRead($setY))
	EndSelect
	$mousePos = MouseGetPos()
	GUICtrlSetData($getX, $mousePos[0])
	GUICtrlSetData($getY, $mousePos[1])
	GUICtrlSetData($getColor, PixelGetColor($mousePos[0], $mousePos[1]))
	Sleep(10)
WEnd
10/27/2009 00:14 mauer01#11
oder einfach mal probieren alle whiles raus bis das
whiles 1
sleep(10)
WEnd