Autohotkey-Formulare

Bisher habe ich Autohotkey nur für einfache Aufgaben verwendet, z.B. als „Kürzel-Ersetzer“. Weil ich dieses „jederzeit zur Hand haben“ ziemlich praktisch finde, habe ich mich mir angesehene, wie Formulare erstellt und verwendet werden können. Weil soetwas bei sporadischer Nutzung wieder in Vergessenheit gerät, habe ich ein „Kompakt-Turorial“ mit konkreter Anforderung und funktionierendem Skript geschrieben.

Beispiel-Formular: Reisekostenabrechnung

Funktionsbeschreibung
Mit der Eingabe eines Kürzels soll ein Dialog gestartet werden, mit dem die erforderlichen Parameter zur Reisekostenermittlung abgefragt werden. Diese sollen ausgerechnet und als gramatikalisch korrekter Satz das Kürzel ersetzen.

Voraussetzung für das Folgende: Autohotkey ist funktionsfähig eingerichtet. Nützlich ist ggf. die deutsche Hilfedatei, die auf der Download-Seite der ansonsten in Englisch gehaltenen Seite angeboten wird.

Das „Programm“

Der Aufruf erfolgt über einen Befehl, der im Standard-Skript eingefügt wird, bzw. in einer Datei, die über das Standard-Skript geladen wird. Damit es funktioniert, muss das Formular („Reisekosten.ahk“) im selben Verzeichnis wie das aufrufende Skript liegen (%A_ScriptDir%).

:*:#rcalc::
  Run %A_ScriptDir%\Autohotkey.exe %A_ScriptDir%\Reisekosten.ahk
Return 

Die Eingabe von #rcalc löscht den Shortcut und startet das nachfolgende Formular, das die erforderlichen Parameter holt und das Ergebnis erzeugt. Was es im einzelnen tut, steht in den Kommentarzeilen. So sieht das Ergebnis aus:

Der aufgerufene und ausgefüllte Dialog Die Benachrichtigungspbox

Ergebnis in der Zwischenablage: „Die Reisekosten belaufen sich auf 1120 €, mit 2 Übernachtungen für 2 Personen, inkl. Reisekosten und Spesen bei ca. 480 km Anfahrtsweg.“

; Reisekosten ermitteln

; erzwingt eine Instanz, kein Mehrfacher Aufruf möglich
#SingleInstance, Force                                   

; Textlabel für die Eingabefelder
Gui, Add, Text, , Personen:                             
Gui, Add, Text, , Einsatztage:
Gui, Add, Text, , Übernachtungen:
Gui, Add, Text, , Einfache Strecke:
Gui, Add, Text, , Einfache Reisezeit:
; Optionen: „ym“ erzeugt eine zweite Spalte, „Number“ erlaubt nur Zahleneingabe
Gui, Add,  Edit, vPersonen ym Number                    

; „v“ (muss klein sein!) am Anfang markiert Variablen, die später -ohne- „v“ verwendet werden können
Gui, Add, Edit, vTage Number                            
Gui, Add, Edit, vNacht Number
Gui, Add, Edit, vStrecke Number
Gui, Add, Edit, vZeit Number

; „ym“ erzeugt eine weitere, dritte Spalte, 
; die Punkte vor und hinter &OK sorgen für eine gleiche Breite der Buttons
; das „g“ (muss klein sein!) markiert die Sprungmarke für die Ausführung von Programmzeilen
Gui, Add, Button, gOK ym,       .      &OK      .       
Gui, Add, Button, gAus ,          &Abbrechen            
; Optionen: „Autosize“ sorgt für Größe anpassen, Center → Zentrieren
Gui, Show,  Autosize Center ,  Reisekosten ermitteln    
; Forumlar abschließen  
Return                                                      

; Sprungmarke für OK-Button („gOK“) 
OK:                                                         

; Formular abschicken und Werte von  „vVariable“ in „Variable“  schreiben
Gui, Submit                                             

; Reisekosten ausrechnen, Vorgaben: Reisekostenpauschale 24 €, Hotel 100 €/Person, km 0,30 €, Arbeitszeit 48€/h
Var1 := (Personen * Tage * 24.0) + (Strecke * 2 * 0.3) + (Personen * Nacht * 100) + (Personen * Zeit * 48)

; Auf 10er runden
helper := "Die Reisekosten belaufen sich auf  "  . Round(Var1,-1) . " €"   

; Einzahl/Mehrzahl im Text anpassen
if Nacht = 1     
{ 
    helper .=  ", mit " .  Nacht . " Übernachtung für "   
}  
else    
    if Nacht >= 2   
    { 
        helper .= ", mit " .  Nacht . " Übernachtungen für "    
    }
    else
        helper .= " für "

if Personen = 1     
{
    helper .=  Personen . " Person, "
}
else
   if Personen >= 2       
   {
        helper .= Personen .     " Personen, "  
   }

helper .=  "inkl. Reisekosten und Spesen bei ca. " . Strecke . " km Anfahrtsweg."

; Ergebnis in die Zwischenablage kopieren
Clipboard := helper     

; Ergebnis mit „I“-Symbol max 15 Sekunden lang in Box anzeigen, 
MsgBox, 262208, Reisekosten, %helper%, 15

; Sprungmarke Abbruch-Button
Aus: 
; Sprungmarke Schließbutton oben rechts geklickt
GuiClose:     

; Script und Formular beenden/abräumen
ExitApp

Anregungen und Fragen bitte über das Kontaktforumlar senden (s. Fußzeile).