$GUI_ENABLE / $GUI_DISABLE

08/21/2010 23:33 Asuramaru#1
ich hab ein kleines problemchen :o

ich wollte einen bot bauen doch leider gibt es ein kleines problemchen :D
anfangs sind die Inputboxen nicht zu benutzen erst wenn die checkbox = 1 ist.

so nun mein problem^^
- die Inputbox flakert ~> immer Enable und danach Disable
kann man das flakern umgehen? :o

wenn die Inputbox = 0 ist soll die Inputbox wieder unbenutzbar sein
problem:
flakern ist weg aber inputbox ist immernoch benutzbar

(kleines problem nebenbei o.o why kann man ner While schleife keinen name zum aufrufen geben? wie lol()? ich bin der meinung das ging mal o.ö)



edit:
wie kann man den text in ner Label ändern?^^
wollte das später oben wo jetzt Label3 und Label4 die momentane HP/MP steht^^
mit _Memoryread lese ich den wert aus und gebe ihn dann in der label wieder

problem:
nur am start des scripts (wert ist dann immer 0 <.<)
wird memoryread später genutzt bleibt das Label leer :o
08/22/2010 02:37 | Moep |#2
Quote:
Originally Posted by DarkGER! View Post
- die Inputbox flakert ~>
Dass kommt, weil du den state des inputs bei jedem durchgang neu setzt. Sorge dafür dass dies nur gescheht wenn die checkbox dass erste mal gecheckt wurde. Außerdem returned "GUICtrlGetState($checkbox)" keine 1 , bzw. 0.

Quote:
Originally Posted by DarkGER! View Post
(kleines problem nebenbei o.o why kann man ner While schleife keinen name zum aufrufen geben? wie lol()? ich bin der meinung das ging mal o.ö)
Häh? Meinst du ne Func? Dann musst du das vorher auch als Func deklarieren.


Quote:
Originally Posted by DarkGER! View Post
wie kann man den text in ner Label ändern?^^
GUICtrlSetData()


Quote:
Originally Posted by DarkGER! View Post
wollte das später oben wo jetzt Label3 und Label4 die momentane HP/MP steht^^
mit _Memoryread lese ich den wert aus und gebe ihn dann in der label wieder

problem:
nur am start des scripts (wert ist dann immer 0 <.<)
wird memoryread später genutzt bleibt das Label leer :o
Dein Script macht nur das was du ihm bebringst. Wenn du es nur einmal oben den Wert auslesen lässt und dann in einer endlosschleife verschwindest, dann ist das klar...
08/22/2010 11:11 Asuramaru#3
Quote:
Originally Posted by | Moep | View Post
Dass kommt, weil du den state des inputs bei jedem durchgang neu setzt. Sorge dafür dass dies nur gescheht wenn die checkbox dass erste mal gecheckt wurde. Außerdem returned "GUICtrlGetState($checkbox)" keine 1 , bzw. 0
ich weiß nicht ganz wie ich das machen soll o.o
tu ich es in ne While schleife flakert es ja.
heng ich unten ans GUI folgendes ran:
Code:
Do
Until GUICTRLREAD($Checkbox[1]) = 1
GUICtrlSetState($Input[1], $GUI_ENABLE)
dann sind alle Inputboxen sichtbar bis man die Checkbox benutzt :o
und weil die Funktion nur 1x aufgerufen wird passiert danach garnichtsmehr :D

wenn man es in eine Func tut muss diese ja erst aufgerufen werden.
08/22/2010 13:13 Imaginär#4
Quote:
Originally Posted by DarkGER! View Post
ich hab ein kleines problemchen :o

ich wollte einen bot bauen doch leider gibt es ein kleines problemchen :D
anfangs sind die Inputboxen nicht zu benutzen erst wenn die checkbox = 1 ist.

so nun mein problem^^
- die Inputbox flakert ~> immer Enable und danach Disable
kann man das flakern umgehen? :o

wenn die Inputbox = 0 ist soll die Inputbox wieder unbenutzbar sein
problem:
flakern ist weg aber inputbox ist immernoch benutzbar

(kleines problem nebenbei o.o why kann man ner While schleife keinen name zum aufrufen geben? wie lol()? ich bin der meinung das ging mal o.ö)



edit:
wie kann man den text in ner Label ändern?^^
wollte das später oben wo jetzt Label3 und Label4 die momentane HP/MP steht^^
mit _Memoryread lese ich den wert aus und gebe ihn dann in der label wieder

problem:
nur am start des scripts (wert ist dann immer 0 <.<)
wird memoryread später genutzt bleibt das Label leer :o
Aufhebung des Flackerns[per Schalter]:


Wenn eine Checkbox disabled ist, hat sie nicht den Wert 0, sondern 4
08/22/2010 17:49 Asuramaru#5
nochein kleines problem :o



die Funktion wird nur 1x aufgerufen :o
wenn ich oben bei

If $Active = 1 then
Start()

While und Wend einfüge hab ich keine chance mehr den Stop button zu benutzen :o
und wenn ich unter

Case $Button2
Pause()

Wend schreibe krieg ich nen haufen errors von wegen missing Endswitch etc. :o

dann hab ich versucht unten bei den Func's ein Do .... Until Active = 0 einzufügen
dann hat sich aber garnichtsmehr getan <.<

was mach ich falsch?
und sollte ich es lieber anders machen als mit den ganzen Func's?^^ (wegen den Sleep's ist es etwas doof :o)
08/22/2010 18:29 PenGuin :O#6
Gewöhn dir doch bitte an statt mit GuiCtrlRead die Checkbox abzufragen, lieber :
Code:
If BitAnd(GUICtrlGetState($CheckBox), 4) Then
;...
EndIf
sicherer.
08/22/2010 21:40 KDeluxe#7
Quote:
Originally Posted by pinguin94 View Post
Gewöhn dir doch bitte an statt mit GuiCtrlRead die Checkbox abzufragen, lieber :
Code:
If BitAnd(GUICtrlGetState($CheckBox), 4) Then
;...
EndIf
sicherer.
GUICtrlGetState würde dir nie 0, 1, oder 4 zurück geben.
Folgende Möglichkeiten funktionieren:
PHP Code:
If BitAnd(GUICtrlRead($CheckBox), $GUI_CHECKEDThen
;...
EndIf 
PHP Code:
If BitAnd(GUICtrlRead($CheckBox), $GUI_CHECKED) = True Then
;...
EndIf 
PHP Code:
If BitAnd(GUICtrlRead($CheckBox), $GUI_CHECKED) == $GUI_CHECKED Then
;...
EndIf 
08/22/2010 22:18 lolkop#8
sobald du mit guis arbeitest solltest du auf sleeps komplett verzichten. allgemein ist es in autoit viel sinnvoller auf die timerfunktionen zurückzugreifen, da ein sleep das gesamte script blockiert (selbes gilt für das processwait was du beim start button mit eingefügt hast).

desweiteren würde ich die ganzen check abfragen vom gui mit in die switch schleife einbauen. dafür gibt es ja den Else case.

zuletzt bleibt noch zu sagen, das ich nicht ganz verstehe warum du dir das ganze so umständlich machst. anstatt 2 buttons zu verwenden für start und stop könntest du auch einen nutzen, der wenn das tool läuft stop zeigt und sonst start. so könntest du auf die $active variable verzichten, da du per guictrlread vom button ja direkt ablesen kannst ob das tool läuft oder nicht.

selbes gilt für die check variablen, welche hier eigentlich überhaupt nicht gebraucht werden.
08/23/2010 15:55 PenGuin :O#9
Quote:
Originally Posted by KillerDeluxe View Post
GUICtrlGetState würde dir nie 0, 1, oder 4 zurück geben.
Doch.
08/23/2010 16:49 Asuramaru#10
wenn ich mir die Hilfe datei ansehe macht es doch garkein unterschied ob man sleep nutzt oder timer :o

Code:
$begin = TimerInit()
sleep(3000)
$dif = TimerDiff($begin)
MsgBox(0,"Time Difference",$dif)
da ist doch auch sleep drin :o
08/23/2010 17:29 omer36#11
wenn du sleep machst, wird der ganze script pausiert..
hier mal ein kleines bsp. was hier vor einiger zeit mal gepostet wurde...

vllt hilft es ja ;)

PHP Code:
Func _Start()
    
Local $e$a$w, $2$q
    $e 
TimerInit()
    
$a TimerInit()
    
$w TimerInit()
    $
TimerInit()
    
$q TimerInit()

    While 
1
        
If TimerDiff($e) >= 5000 Then
            Send
('e')
            
$e TimerInit()
        EndIf
        If 
TimerDiff($a) >= 1000 Then
            Send
('a')
            
$a TimerInit()
        EndIf
        If 
TimerDiff($w) >= 1000 Then
            Send
('w')
            
$w TimerInit()
        EndIf
        If 
TimerDiff($2) >= 3000 Then
            Send
('2')
            $
TimerInit()
        EndIf
        If 
TimerDiff($q) >= 4000 Then
            Send
('q')
            
$q TimerInit()
        EndIf
    
WEnd
EndFunc 
08/23/2010 17:31 lolkop#12
da ist auch nur aufgeführt das ein timer die abgelaufene zeit genau erfassen kann :P

ein timer hat den vorteil das man ihn nicht in einer schleife laufen lassen muss, wie es bei sleep der fall ist (alles andere wird blockiert) sondern man kann per abfragen die differenzen abfragen.

initialisieren kannst du timer einfach per $variable = timerinit(). dann wird eine variable mit der aktuellen computerlaufzeit angelegt. jetzt kannst du per timerdiff($variable) jeweils die zeit anschauen, die seit dem anlegen der $variable vergangen ist.

wie du siehst wird das script hier nicht unterbrochen. die hauptschleife kann alle anderen sachen immernoch durchlaufen. wenn nun eine gegebene differenz erreicht ist, kann dein programm die gewünschte funktion ausführen.

hab hier mal kurz dein script genommen um zu zeigen wie ichs meine:
Code:
Global $Input[15], $Label[12], $Checkbox[6]
$Input[0] = 14
$Label[0] = 11
$Checkbox [0] = 5
Global $MP, $MP2, $MP_T
Global $HP, $HP2, $HP_T
Global $Skill1_T, $Skill2_T, $Skill3_T, $Skill4_T, $Angreifen_T, $Aufheben_T
Global $Active = 0

$Form1 = GUICreate("Nos Trainer", 668, 339, 34, 111)
$Progress1 = GUICtrlCreateProgress(24, 48, 142, 17)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Progress2 = GUICtrlCreateProgress(224, 48, 142, 17)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Button1 = GUICtrlCreateButton("Start", 448, 224, 147, 25)
$Button2 = GUICtrlCreateButton("Stop", 448, 288, 147, 25)
$Checkbox[1] = GUICtrlCreateCheckbox("Snacks benutzen? (HP)", 24, 80, 145, 17, 0x0300)
$Checkbox[2] = GUICtrlCreateCheckbox("Snacks benutzen? (MP)", 224, 80, 145, 17, 0x0300)
$Checkbox[3] = GUICtrlCreateCheckbox("Angreifen", 24, 240, 145, 17, 0x0300)
$Checkbox[4] = GUICtrlCreateCheckbox("Skills Nutzen", 408, 24, 145, 17, 0x0300)
$Checkbox[5] = GUICtrlCreateCheckbox("Aufheben", 224, 240, 145, 17, 0x0300)
$Label[1] = GUICtrlCreateLabel("", 72, 48, 36, 17)
$Label[2] = GUICtrlCreateLabel("", 272, 48, 36, 17)
$Label[3] = GUICtrlCreateLabel("Health Points", 24, 24, 145, 17, 1)
$Label[4] = GUICtrlCreateLabel("Magic Points", 224, 24, 145, 17, 1)
$Label[5] = GUICtrlCreateLabel("Ab wieviel HP?", 24, 112, 145, 17, 1)
$Label[6] = GUICtrlCreateLabel("Ab wieviel MP?", 224, 112, 145, 17, 1)
$Label[7] = GUICtrlCreateLabel(" Taste vom Snack?", 24, 176, 145, 17, 1)
$Label[8] = GUICtrlCreateLabel("Taste vom Snack?", 224, 176, 145, 17, 1)
$Label[9] = GUICtrlCreateLabel("Sleep time?", 224, 272, 145, 17, 1)
$Label[10] = GUICtrlCreateLabel("Sleep time?", 24, 272, 145, 17, 1)
$Label[11] = GUICtrlCreateLabel("Sleep time?", 568, 25, 75, 17, 1)
$Input[1] = GUICtrlCreateInput("", 24, 136, 145, 21)
$Input[2] = GUICtrlCreateInput("", 224, 136, 145, 21)
$Input[3] = GUICtrlCreateInput("", 24, 200, 145, 21)
$Input[4] = GUICtrlCreateInput("", 224, 200, 145, 21)
$Input[5] = GUICtrlCreateInput("", 408, 48, 145, 21)
$Input[6] = GUICtrlCreateInput("", 408, 88, 145, 21)
$Input[7] = GUICtrlCreateInput("", 408, 128, 145, 21)
$Input[8] = GUICtrlCreateInput("", 408, 168, 145, 21)
$Input[9] = GUICtrlCreateInput("", 24, 296, 145, 21)
$Input[10] = GUICtrlCreateInput("", 224, 296, 145, 21)
$Input[11] = GUICtrlCreateInput("", 568, 48, 75, 21)
$Input[12] = GUICtrlCreateInput("", 568, 88, 75, 21)
$Input[13] = GUICtrlCreateInput("", 568, 128, 75, 21)
$Input[14] = GUICtrlCreateInput("", 568, 168, 75, 21)
GUISetState(@SW_SHOW)

For $a = 1 to 14
GUICtrlSetState($Input[$a], 128)
Next

For $b = 1 to 2
GUICtrlSetBkColor($Label[$b], -2)
Next


While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Button1
			$Active = 1
			Start()
		Case $Button2
			Pause()
		Case Else
			GuiChecks()
	EndSwitch
WEnd

Func GuiChecks()
	If GUICTRLREAD($Checkbox[1]) = 1 Then
		Enable($Input[1])
		Enable($Input[3])
	Else
		Disable($Input[1])
		Disable($Input[3])
	EndIf

	If GUICTRLREAD($Checkbox[2]) = 1 Then
		Enable($Input[2])
		Enable($Input[4])
	Else
		Disable($Input[2])
		Disable($Input[4])
	EndIf

	IF GUICTRLREAD($Checkbox[3]) = 1 Then
		Enable($Input[9])
	Else
		Disable($Input[9])
	Endif

	If GUICTRLREAD($Checkbox[4]) = 1 Then
		Enable($Input[5])
		Enable($Input[6])
		Enable($Input[7])
		Enable($Input[8])
		Enable($Input[11])
		Enable($Input[12])
		Enable($Input[13])
		Enable($Input[14])
	Else
		Disable($Input[5])
		Disable($Input[6])
		Disable($Input[7])
		Disable($Input[8])
		Disable($Input[11])
		Disable($Input[12])
		Disable($Input[13])
		Disable($Input[14])
	EndIf

	IF GUICTRLREAD($Checkbox[5]) = 1 Then
		Enable($Input[10])
	Else
		Disable($Input[10])
	Endif
EndFunc
	
Func Start()
	Progress()
	If GUICTRLREAD($Checkbox[1]) = 1 Then
		HPSnacks()
	Endif
	If GUICTRLREAD($Checkbox[2]) = 1 Then
		MPSnacks()
	Endif
	If GUICTRLREAD($Checkbox[3]) = 1 Then
		Angreifen()
	Endif
	If GUICTRLREAD($Checkbox[4]) = 1 Then
		Skill1()
		Skill2()
		Skill3()
		Skill4()
	Endif
	If GUICTRLREAD($Checkbox[5]) = 1 Then
		Aufheben()
	Endif
EndFunc

Func Progress()
	For $x = $HP To $HP2
		GUICtrlSetData($progress1, $x)
		GUICtrlSetData($progress1, ($HP2 - $x))
	Next
	For $y = $MP To $MP2
		GUICtrlSetData($progress2, $y)
		GUICtrlSetData($progress2, ($MP2 - $y))
	Next
Endfunc

Func HPSnacks()
	If $HP < $HP2 And TimerDiff($HP_T) > GUICtrlRead($Input[3]) then
		CONTROLSEND("NosTale","",0, GUICtrlRead($Input[1]))
		$HP_T = TimerInit()
	Endif
Endfunc

Func MPSnacks()
	If $MP < $MP2 And TimerDiff($MP_T) > GUICtrlRead($Input[4]) then
		CONTROLSEND("NosTale","",0, GUICtrlRead($Input[2]))
		$MP_T = TimerInit()
	Endif
Endfunc

Func Angreifen()
	If TimerDiff($Angreifen_T) > GUICtrlRead($Input[9]) Then
		CONTROLSEND("NosTale","",0, "{Space}")
		$Angreifen_T = TimerInit()
	EndIf
Endfunc

Func Skill1()
	If TimerDiff($Skill1_T) > GUICtrlRead($Input[11]) Then
		CONTROLSEND("NosTale","",0, GUICtrlRead($Input[5]))
		$Skill1_T = TimerInit()
	EndIf
Endfunc

Func Skill2()
	If TimerDiff($Skill2_T) > GUICtrlRead($Input[12]) Then
		CONTROLSEND("NosTale","",0, GUICtrlRead($Input[6]))
		$Skill2_T = TimerInit()
	EndIf
Endfunc

Func Skill3()
	If TimerDiff($Skill3_T) > GUICtrlRead($Input[13]) Then
		CONTROLSEND("NosTale","",0, GUICtrlRead($Input[7]))
		$Skill3_T = TimerInit()
	EndIf
Endfunc

Func Skill4()
	If TimerDiff($Skill4_T) > GUICtrlRead($Input[14]) Then
		CONTROLSEND("NosTale","",0, GUICtrlRead($Input[8]))
		$Skill4_T = TimerInit()
	EndIf
Endfunc

Func Aufheben()
	If TimerDiff($Aufheben_T) > GUICtrlRead($Input[10]) Then
		CONTROLSEND("NosTale","",0, "{ö}")
		$Aufheben_T = TimerInit()
	EndIf
Endfunc

Func Pause()
	$Active = 0
Endfunc

Func Enable($control)
	If GUICtrlGetState($control) = 144 Then GUICtrlSetState($control, 64)
EndFunc

Func Disable($control)
	If GUICtrlGetState($control) = 80 Then GUICtrlSetState($control, 128)
EndFunc
habe jetzt das spiel nicht installiert ums zu testen aber sollte im prinziep alles so funktionieren.
08/24/2010 01:12 KDeluxe#13
Quote:
Originally Posted by pinguin94 View Post
Doch.


Kleines Zitat aus der Hilfe:
Quote:
As opposed to GUICtrlRead this function returns ONLY the state of a control enabled/disabled/hidden/show/dropaccepted
Ich für meinen Teil sehe kein checked/unchecked.