Hilfe im Code

10/09/2011 20:35 159+#1
Hi Leute !

Ich hab ein kleines Problem:
Ich hab mal in AutoIT ein bischen mit GUI gespielt;funzt aber nicht

Hier mal der Code

Eigendlich sollte es alle "eingestellte Zeit" einmal auf den linken Maus-Button klicken,tuts aber leider nicht ! ?


Vielen Dank schonmal im Vorraus,
Philipp
10/09/2011 20:44 BlackHybrid#2
Entfern mal mal bei Sleep die "".
Ansonsten ergibt dein Script wenig sinn.
Erstell mal in Koda, einem Tool um GUIs zu erstellen eine GUI und kugg dir an, was es ausspuckt.
Eine Abfrage wie If $msg=$button2 Then button2() sollte in einer While schleife stehen, da das script dort sonst nur einmal drüberläuft. In der While wird die Abfrage immer wiederholt.

In deinem Fall sollte nur der Button 3 funktionieren, weil er in der ersten While schleife bleibt und dort nur dieser abgefragt wird.

Aus diesem Grund sollte dein Script auch nie an die Stelle kommen, an der $time deklariert wird. Das deklarierst du dann am Anfang der Funktion.
10/09/2011 23:33 klavier22#3
mal von oben nach unten:
GuiGetMsg + Auswertung macht erst Sinn, wenn der Nutzer überhaupt etwas an dem Gui machen kann, was ja erst nach dem GuiSetState kommt, also sind deine auswertungen davor sinnlos, außerdem kommen sie ja danach nochmal und erst in der While schleife machen sie sinn.
Außerdem kann man in der While schleife mit einem Switch arbeiten, ich denke so wie es Koda macht ist es am effektivsten. Dadurch dass du nur für fall Button3 eine Reaktion eingebaut hast, wird dein Program sich nicht schließen wenn du oben rechts das rote kreuz drückst oder iwas anderes machen außer auf Button 3 reagieren^^
Die Zeile mit $time = ist vollkommen sinnlos, da die ja garnicht aufgerufen wird, du musst dir mal den Ablauf des Programmes von Augen führen.
so, und daher kommt auch ein Fehler bei dem Sleep. Erstens wie schon gesagt müssen die "" weg und zweitens gibt es die Variable $time zu diesem Zeitpunkt nicht (bzw sie wurde vorher nicht deklariert)
Außerdem wird ja in dieser Funktion nur ein rechtsklick simuliert - ohne jegliche Koordinatenangabe oder ähnliches, ich weiß nicht, ob du das so willst.
dann bei dem
exit func Button1
machst du ja ein exit nachdem die Funktion button1 noch einmal aufgerufen wird - nur hat diese eine endlosschleife und der exit wird nicht ausgeführt.

Ich weiß, ich hab einiges Wiederholt - BlackHybrid, bitte sei mir nicht böse :D
10/10/2011 06:00 BlackHybrid#4
Deswegen hab ich ja gesagt, dass er sich erstmal ankuggen soll, was Koda ausspuckt :P
10/10/2011 15:05 159+#5
Hi,

Danke Leute für eure Hilfe!
Hab mir mal Koda angeschaut und den Code überarbeitet:



Aber die eigendliche Funktion geht immer noch nicht :confused:



viele Grüße und Danke
Philipp
10/10/2011 15:49 omer36#6
PHP Code:
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form2 GUICreate("Dialog"240100349252)
GUISetIcon("D:\003.ico")
$Button1 GUICtrlCreateButton("&Start"14375250)
$Button2 GUICtrlCreateButton("&Stop"1624375250)
$Button3 GUICtrlCreateButton("beenden"804875330)
$Time GUICtrlCreateInput("Time in sec."641612121)
GUICtrlSetCursor (-12)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $start False

While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE ;wenn das rote X oben rechts gedrückt wird
            
Exit              ;beendet sich das programm

        
case $Button1  ;wenn $button1 gedrückt wird,
            
_start()   ;passiert das (hier wird dann die funktion aufgerufen)

        Case 
$Button2  ;wenn $button2 gedrückt wird,
            
_stop()    ;passiert dies

        
Case $Button3  ;und bei $button3
            
Exit       ;beendet sich das programm

    
EndSwitch
WEnd


Func _start
() ;$button1 wurde gedrückt
    
;;;;hierhin was passieren soll
EndFunc



Func _stop
()  ;$button2 wurde gedrückt
    
;;;;hierhin was passieren soll
EndFunc 
und wenn du den inhalt aus einem gui-/objekt auslesen willst, musst du den GuiCtrlRead() befehl nutzen
bei deinem Sleep() befehl, würde es zb so aussehen:
Sleep(GuiCtrlRead($Time)*1000)
*1000 weil du es sonnst in millisec eingeben musst