[Frage]Bei Button Func mit Hotkey einbauen

07/01/2011 15:44 Tobolobo#1
Hallo erstma,
ich komm mal wieder mit einer meiner Fragen:
Ich hab hier ein Script zu übung:
PHP Code:
#include <GUIConstants.au3>

Global $FileTestScript FileExists(@ScriptDir "\Testscript.au3")
Global 
$File2GUI1L2B FileExists(@ScriptDir "\2GUI1L2B.au3")

HotKeySet("{F1}","Erstellen")
HotKeySet("{F2}","Loeschen")
HotKeySet("{F3}","LoeschenMitErstellen")
HotKeySet("{F4}","SciTEBeenden")
HotKeySet("{F5}","ScriptEnd")
HotKeySet("{F12}","HotkeyInfo")

$Form1 GUICreate("Script - Ersteller",190,265,-1,-1)
$Label1 GUICtrlCreateLabel("Testscript - Ersteller by Tobolobo",5,5,200,25)
$Button1 GUICtrlCreateButton("GUI Mit 2 Buttons und 1 Label",5,35,180,40)
$Button2 GUICtrlCreateButton("TestScript erstellen",5,80,180,40)
$Button3 GUICtrlCreateButton("TestScript löschen",5,125,180,40)
$Button4 GUICtrlCreateButton("TestScript löschen und neu erstellen",5,170,180,40)
$Button5 GUICtrlCreateButton("Mit Hotkeys arbeiten",5,215,180,40)
GUISetState(@SW_SHOW)
WinSetOnTop("Script - Ersteller","",1)

While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$Button1
            $Tab 
Send("{TAB}")
            If 
$File2GUI1L2B Not @error Then
                MsgBox
(16,"Fehler","Das Script existiert beteits!")
            Else
                
FileWrite(@ScriptDir "\2GUI1L2B.au3","#include <GUIConstants.au3>" & @CRLF & @CRLF "$Form1 = GUICreate(""Titel"",200,200,-1,-1)" & @CRLF "$Label1 = GUICtrlCreateLabel(""Text"",5,5,200,25)" & @CRLF "$Button1 = GUICtrlCreateButton(""Text"",5,40,150,60)" & @CRLF "$Button2 = GUICtrlCreateButton(""Text"",5,110,150,60)" & @CRLF "GUISetState(@SW_SHOW)" & @CRLF & @CRLF "While 1" & @CRLF "$nMsg = GUIGetMsg()" & @CRLF "Switch $nMsg& @CRLF "Case $GUI_EVENT_CLOSE& @CRLF "Exit" & @CRLF "EndSwitch" & @CRLF "WEnd")
            EndIf
        Case 
$Button2
            
If $FileTestScript Not @error Then
                MsgBox
(16,"Fehler","Das Script existiert Bereits!")
            Else
                
FileWrite(@ScriptDir "\Testscript.au3","")
            EndIf
        Case 
$Button3
            
If $FileTestScript = @error Then
                MsgBox
(16,"Fehler","Das Script kann nicht gelöscht werden, da es bereits existiert!")
            Else
                
FileDelete(@ScriptDir "\Testscript.au3")
            EndIf
        Case 
$Button4
            
If $FileTestScript = @error Then
                MsgBox
(16,"Fehler","Das Script existiert nicht einmal!")
            Else
                
FileDelete(@ScriptDir "\Testscript.au3")
                
FileWrite(@ScriptDir "\Testscript.au3","")
            EndIf
        Case 
$Button5
            GUIDelete
()
            
MsgBox(64,"Info","'F1' erstellt ein Script," & @CRLF "'F2' löscht das Script," & @CRLF "'F3' löscht das Alte und erstellt das neues Script." & @CRLF "'F4' beendet SciTE" & @CRLF "'F5' beendet dieses Script" & @CRLF "'F12' zeigt dieses Fenster nocheinmal." & @CRLF "SciTE muss vor dem drücken eines HotKeys geschlossen werden.")
            While 
1


Func Erstellen
()
    If 
$FileTestScript Not @error Then
        MsgBox
(16,"Fehler","Das Script existiert Bereits!")
    Else
        
FileWrite(@ScriptDir "\Testscript.au3","")
    EndIf
EndFunc

Func Loeschen
()
    If 
$FileTestScript = @error Then
            MsgBox
(16,"Fehler","Das Script kann nicht gelöscht werden, da es bereits existiert!")
    Else
        
FileDelete(@ScriptDir "\Testscript.au3")
    EndIf
EndFunc

Func LoeschenMitErstellen
()
    If 
$FileTestScript = @error Then
        MsgBox
(16,"Fehler","Das Script existiert nicht einmal!")
    Else
        
FileDelete(@ScriptDir "\Testscript.au3")
        
FileWrite(@ScriptDir "\Testscript.au3","")
    EndIf
EndFunc

Func SciTEBeenden
()
    
$SciTETest ProcessExists("SciTE.exe")
    If 
$SciTETest = @error Then
        MsgBox
(16,"Fehler","Der Prozess SciTE.exe existiert nicht!")
    Else
        
ProcessClose("SciTE.exe")
    EndIf
EndFunc

Func ScriptEnd
()
    Exit
EndFunc

Func HotkeyInfo
()
    
MsgBox(64,"Info","'F1' erstellt ein Script," & @CRLF "'F2' löscht das Script," & @CRLF "'F3' löscht das Alte und erstellt das neues Script." & @CRLF "'F4' beendet SciTE" & @CRLF "'F5' beendet dieses Script" & @CRLF "'F12' zeigt dieses Fenster nocheinmal." & @CRLF "SciTE muss vor dem drücken eines HotKeys geschlossen werden.")
EndFunc


        WEnd
    
EndSwitch
WEnd 
Wenn ich es starten will, kommt diese Meldung:
PHP Code:
F:\AutoIt\TestScriptErsteller.au3(60,1) : ERRORmissing Wend.
Func
^
F:\AutoIt\TestScriptErsteller.au3(57,4) : REFmissing Wend.
            While
            ^
F:\AutoIt\TestScriptErsteller.au3(60,1) : ERRORmissing EndSwitch.
Func
^
F:\AutoIt\TestScriptErsteller.au3(25,14) : REFmissing EndSwitch.
    Switch 
$nMsg
    
~~~~~~~~~~~~^
F:\AutoIt\TestScriptErsteller.au3(60,1) : ERRORmissing Wend.
Func
^
F:\AutoIt\TestScriptErsteller.au3(23,1) : REFmissing Wend.
While
^
F:\AutoIt\TestScriptErsteller.au3(103,3) : ERRORsyntax error
        WEnd
        
^
F:\AutoIt\TestScriptErsteller.au3 4 error(s), 0 warning(s
Anscheinend dürfen Funcs nicht in While Sachen oder Switch Sachen vorkommen.

Jetzt zu meiner Frage:
Ich will, wenn man auf $Button5 drückt, dass es dann GUI löscht (was ja funktioniert) und dann die Funcs mit den Hotkeys ausführt, als ob das GUI da nicht da wäre.
Es sollte dann so Funktionieren wenn der Button gedrückt wurde:
PHP Code:
HotKeySet("{F1}","Erstellen")
HotKeySet("{F2}","Loeschen")
HotKeySet("{F3}","LoeschenMitErstellen")
HotKeySet("{F4}","SciTEBeenden")
HotKeySet("{F5}","ScriptEnd")
HotKeySet("{F12}","HotkeyInfo")

Func Erstellen()
    If 
$FileTestScript Not @error Then
        MsgBox
(16,"Fehler","Das Script existiert Bereits!")
    Else
        
FileWrite(@ScriptDir "\Testscript.au3","")
    EndIf
EndFunc

Func Loeschen
()
    If 
$FileTestScript = @error Then
            MsgBox
(16,"Fehler","Das Script kann nicht gelöscht werden, da es bereits existiert!")
    Else
        
FileDelete(@ScriptDir "\Testscript.au3")
    EndIf
EndFunc

Func LoeschenMitErstellen
()
    If 
$FileTestScript = @error Then
        MsgBox
(16,"Fehler","Das Script existiert nicht einmal!")
    Else
        
FileDelete(@ScriptDir "\Testscript.au3")
        
FileWrite(@ScriptDir "\Testscript.au3","")
    EndIf
EndFunc

Func SciTEBeenden
()
    
$SciTETest ProcessExists("SciTE.exe")
    If 
$SciTETest = @error Then
        MsgBox
(16,"Fehler","Der Prozess SciTE.exe existiert nicht!")
    Else
        
ProcessClose("SciTE.exe")
    EndIf
EndFunc

Func ScriptEnd
()
    Exit
EndFunc

Func HotkeyInfo
()
    
MsgBox(64,"Info","'F1' erstellt ein Script," & @CRLF "'F2' löscht das Script," & @CRLF "'F3' löscht das Alte und erstellt das neues Script." & @CRLF "'F4' beendet SciTE" & @CRLF "'F5' beendet dieses Script" & @CRLF "'F12' zeigt dieses Fenster nocheinmal." & @CRLF "SciTE muss vor dem drücken eines HotKeys geschlossen werden.")
EndFunc 
07/01/2011 15:58 BlackHybrid#2
Mach einfach die While, die die Funcs umschließt weg und setze das EndSwitch und WEnd nach pben zum letzten Case.
07/01/2011 16:46 Tobolobo#3
mom ich machs

€: Code sieht jetz so aus geht aber immer noch nich
PHP Code:
#include <GUIConstants.au3>

Global $FileTestScript FileExists(@ScriptDir "\Testscript.au3")
Global 
$File2GUI1L2B FileExists(@ScriptDir "\2GUI1L2B.au3")

HotKeySet("{F1}","Erstellen")
HotKeySet("{F2}","Loeschen")
HotKeySet("{F3}","LoeschenMitErstellen")
HotKeySet("{F4}","SciTEBeenden")
HotKeySet("{F5}","ScriptEnd")
HotKeySet("{F12}","HotkeyInfo")

$Form1 GUICreate("Script - Ersteller",190,265,-1,-1)
$Label1 GUICtrlCreateLabel("Testscript - Ersteller by Tobolobo",5,5,200,25)
$Button1 GUICtrlCreateButton("GUI Mit 2 Buttons und 1 Label",5,35,180,40)
$Button2 GUICtrlCreateButton("TestScript erstellen",5,80,180,40)
$Button3 GUICtrlCreateButton("TestScript löschen",5,125,180,40)
$Button4 GUICtrlCreateButton("TestScript löschen und neu erstellen",5,170,180,40)
$Button5 GUICtrlCreateButton("Mit Hotkeys arbeiten",5,215,180,40)
GUISetState(@SW_SHOW)
WinSetOnTop("Script - Ersteller","",1)

While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$Button1
            $Tab 
Send("{TAB}")
            If 
$File2GUI1L2B Not @error Then
                MsgBox
(16,"Fehler","Das Script existiert beteits!")
            Else
                
FileWrite(@ScriptDir "\2GUI1L2B.au3","#include <GUIConstants.au3>" & @CRLF & @CRLF "$Form1 = GUICreate(""Titel"",200,200,-1,-1)" & @CRLF "$Label1 = GUICtrlCreateLabel(""Text"",5,5,200,25)" & @CRLF "$Button1 = GUICtrlCreateButton(""Text"",5,40,150,60)" & @CRLF "$Button2 = GUICtrlCreateButton(""Text"",5,110,150,60)" & @CRLF "GUISetState(@SW_SHOW)" & @CRLF & @CRLF "While 1" & @CRLF "$nMsg = GUIGetMsg()" & @CRLF "Switch $nMsg& @CRLF "Case $GUI_EVENT_CLOSE& @CRLF "Exit" & @CRLF "EndSwitch" & @CRLF "WEnd")
            EndIf
        Case 
$Button2
            
If $FileTestScript Not @error Then
                MsgBox
(16,"Fehler","Das Script existiert Bereits!")
            Else
                
FileWrite(@ScriptDir "\Testscript.au3","")
            EndIf
        Case 
$Button3
            
If $FileTestScript = @error Then
                MsgBox
(16,"Fehler","Das Script kann nicht gelöscht werden, da es bereits existiert!")
            Else
                
FileDelete(@ScriptDir "\Testscript.au3")
            EndIf
        Case 
$Button4
            
If $FileTestScript = @error Then
                MsgBox
(16,"Fehler","Das Script existiert nicht einmal!")
            Else
                
FileDelete(@ScriptDir "\Testscript.au3")
                
FileWrite(@ScriptDir "\Testscript.au3","")
            EndIf
        Case 
$Button5
            GUIDelete
()
            
MsgBox(64,"Info","'F1' erstellt ein Script," & @CRLF "'F2' löscht das Script," & @CRLF "'F3' löscht das Alte und erstellt das neues Script." & @CRLF "'F4' beendet SciTE" & @CRLF "'F5' beendet dieses Script" & @CRLF "'F12' zeigt dieses Fenster nocheinmal." & @CRLF "SciTE muss vor dem drücken eines HotKeys geschlossen werden.")
    EndSwitch

Func Erstellen()
    If 
$FileTestScript Not @error Then
        MsgBox
(16,"Fehler","Das Script existiert Bereits!")
    Else
        
FileWrite(@ScriptDir "\Testscript.au3","")
    EndIf
EndFunc

Func Loeschen
()
    If 
$FileTestScript = @error Then
            MsgBox
(16,"Fehler","Das Script kann nicht gelöscht werden, da es bereits existiert!")
    Else
        
FileDelete(@ScriptDir "\Testscript.au3")
    EndIf
EndFunc

Func LoeschenMitErstellen
()
    If 
$FileTestScript = @error Then
        MsgBox
(16,"Fehler","Das Script existiert nicht einmal!")
    Else
        
FileDelete(@ScriptDir "\Testscript.au3")
        
FileWrite(@ScriptDir "\Testscript.au3","")
    EndIf
EndFunc

Func SciTEBeenden
()
    
$SciTETest ProcessExists("SciTE.exe")
    If 
$SciTETest = @error Then
        MsgBox
(16,"Fehler","Der Prozess SciTE.exe existiert nicht!")
    Else
        
ProcessClose("SciTE.exe")
    EndIf
EndFunc

Func ScriptEnd
()
    Exit
EndFunc

Func HotkeyInfo
()
    
MsgBox(64,"Info","'F1' erstellt ein Script," & @CRLF "'F2' löscht das Script," & @CRLF "'F3' löscht das Alte und erstellt das neues Script." & @CRLF "'F4' beendet SciTE" & @CRLF "'F5' beendet dieses Script" & @CRLF "'F12' zeigt dieses Fenster nocheinmal." & @CRLF "SciTE muss vor dem drücken eines HotKeys geschlossen werden.")
EndFunc

WEnd 
Die fehlermeldung:
PHP Code:
F:\TestScriptErsteller.au3(59,1) : ERRORmissing Wend.
Func
^
F:\TestScriptErsteller.au3(23,1) : REFmissing Wend.
While
^
F:\TestScriptErsteller.au3(101,1) : ERRORsyntax error
WEnd
^
F:\TestScriptErsteller.au3 2 error(s), 0 warning(s
Geht da vielleicht irgendwas mit exitloop?
07/01/2011 17:14 lolkop#4
du kannst nicht funktionen in einer schleife definieren.
damit würde die funktion ja immer wieder neu definiert werden.

funktionsdefinitionen immer ausserhalb von schleifen tätigen.

im falle von $button5 gedrückt, wird das gui zwar gelöscht, hierbei bleibt aber die endlosschleife selbstverständlich noch erhalten.

dh du brauchst keine extra schleife. könntest aber auf effizienzgründen noch eine art schlater einbauen, damit dein script erkennt, ob das gui vorhanden ist oder nicht. ist das gui nicht vorhanden, so braucht auch keine GuiGetMsg abfrage mehr statt zu finden =)
07/01/2011 17:25 Tobolobo#5
Ich hätt gern ma sowas in code wenns geht...
07/01/2011 18:10 lolkop#6
ich persöhnlich bin immer dafür das leute selbst versuchen ein problem zu lösen, als dies von anderen erledigen zu lassen...

aber wenn du lieber nicht selbst versuchen willst umzusetzen, was bisher schon 2 erklärt haben, hier der code mit behobenem (haupt)fehler:

aber mal von dem schleifen-funktions problem, gibt fileexists jeweils 1 (true) oder 0 (false) zurück. es macht nicht wirklich sinn den rückgabewert mit @error zu vergleichen.
07/01/2011 18:22 Tobolobo#7
Ich lern an beispielen :D

des mit @error geht aber deswegen mach ichs ^^

kann closed werden