Berechnung einer Zahl bei Eingabe
Moderator: jNizM
Berechnung einer Zahl bei Eingabe
Hi zusammen,
ich bin neu in der Welt von Autohotkey und habe mir schon die ersten einfachen Sachen eingerichtet - sehr geil
Jetzt stehe ich vor einem Problem bzw. einer Aufgabe (ich weiß gar nicht, ob das überhaupt geht): Ich möchte, wenn ich eine Zahl und dann bspw. das Kürzel mws eintippe, dass automatisch die Zahl *1,19 berechnet wird. Also wenn ich bspw. 200mws eingebe, soll stattdessen 238 stehen.
Geht so etwas überhaupt mit Autohotkey?
Wie gesagt, ich stehe noch am Anfang und habe das vor zwei Wochen erst kennengelernt. Würde mich freuen, wenn mir jemand helfen könnte!
Danke, Grüße und schönen Wochenstart!
[Mod edit: Topic moved from 'Skripte and Funktionen'.]
ich bin neu in der Welt von Autohotkey und habe mir schon die ersten einfachen Sachen eingerichtet - sehr geil
Jetzt stehe ich vor einem Problem bzw. einer Aufgabe (ich weiß gar nicht, ob das überhaupt geht): Ich möchte, wenn ich eine Zahl und dann bspw. das Kürzel mws eintippe, dass automatisch die Zahl *1,19 berechnet wird. Also wenn ich bspw. 200mws eingebe, soll stattdessen 238 stehen.
Geht so etwas überhaupt mit Autohotkey?
Wie gesagt, ich stehe noch am Anfang und habe das vor zwei Wochen erst kennengelernt. Würde mich freuen, wenn mir jemand helfen könnte!
Danke, Grüße und schönen Wochenstart!
[Mod edit: Topic moved from 'Skripte and Funktionen'.]
Re: Berechnung einer Zahl bei Eingabe
Beispiel mit inputbox
oder , hier ein alter GUI zur MWST Berechnung
https://jumk.de/bankformeln/brutto-netto.shtml
https://www.die-mehrwertsteuer.de/deutschland/
Code: Select all
setformat,float,0.2
InputBox, inp, % title, Bitte gib Betrag ein , , , , , , Locale
c:=inp*1.19
msgbox,%c%
return
https://jumk.de/bankformeln/brutto-netto.shtml
https://www.die-mehrwertsteuer.de/deutschland/
Code: Select all
;- created =20080402
;-------------------------------------------------------------------
/*
Mehrwertsteuer
https://jumk.de/bankformeln/brutto-netto.shtml
https://www.die-mehrwertsteuer.de/deutschland/
*/
;-------------------------------------------------------------------
;-------------- REMARKS -------------------------
/*
NETTO = 100.00 %
ADD MWST = 7.70 %
BRUTTO = 107.70 %
*/
;-------------------------------------------------
setformat,float,0.4
Gui,3:Font,s14 cBlack,Lucida Console
MWST=19
ANZ =1
Gui,3:Add,Text,cgreen x10 y10 h20 w105 ,MWST `% (19)
Gui,3:Add,Text,cgreen x10 y35 h20 w105 ,ANZAHL
Gui,3:Add,Text,cgreen x10 y60 h20 w105 ,NETTO CHF >
Gui,3:Add,Text,cgreen x10 y85 h20 w105 ,BRUTTO CHF >
Gui,3:Add,Text,cgreen x10 y110 h20 w105 ,MWST CHF
Gui,3:Add,Text,cgreen x10 y135 h20 w105 ,NETTO (1)
Gui,3:Add,Text,cgreen x10 y160 h20 w105 ,BRUTTO (1)
Gui,3:Add,Text,cgreen x10 y185 h20 w105 ,MWST (1)
Gui,3:Add,Edit,cRed x120 y10 h20 w180 vMWST1 ,%MWST%
Gui,3:Add,Edit,cRed x120 y35 h20 w180 vANZ ,%ANZ%
Gui,3:Add,Edit,cRed x120 y60 h20 w180 vNETTO ,
Gui,3:Add,Edit,cRed x120 y85 h20 w180 vBRUTTO ,
Gui,3:Add,Edit,cRed x120 y110 h20 w180 readonly vMWST2 ,
Gui,3:Add,Edit,cRed x120 y135 h20 w180 readonly vNETTOE ,
Gui,3:Add,Edit,cRed x120 y160 h20 w180 readonly vBRUTTOE ,
Gui,3:Add,Edit,cRed x120 y185 h20 w180 readonly vMWSTE ,
Gui,3:Add,Button, x10 y220 h20 w100 gSTART ,START
Gui,3:Add,Button, x120 y220 h20 w100 gCLEAR1 ,CLEAR
Gui,3:Add,Button, x10 y250 h20 w100 gINFO1 ,INFO
Gui,3:Show, x100 y20 h290 w320 ,MEHRWERTSTEUER
return
;-------------------------------------------------------------------
CLEAR1:
GuiControl,3:,NETTO,
GuiControl,3:,BRUTTO,
GuiControl,3:,MWST2,
GuiControl,3:,NETTOE,
GuiControl,3:,BRUTTOE,
GuiControl,3:,MWSTE,
return
;-------------------------------------------------------------------
INFO1:
e4x=
(Ltrim join % `
Bruttopreis = Nettopreis + (Nettopreis * MWST-Satz)
Bei einem MWST-Satz von 10% ist der Nettopreis gleich 100% und der Bruttopreis gleich 110%.
Der Bruttopreis wird oft fälschlicherweise als 100% angenommen.
Demnach ist die folgende Formel falsch: Nettopreis = Bruttopreis – (Bruttopreis * MWST-Satz).
Für die korrekte Berechnung des Nettopreises muss die folgende Formel anwendet werden, sofern man den MWST-Satz bereits erhoben hat:
Nettopreis = Bruttopreis / (MWST-Satz + 1)
)
msgbox, 262208,MWST-info ,%e4x%
run,https://jumk.de/bankformeln/brutto-netto.shtml
return
START:
gui,3:submit,nohide
if (NETTO<>"" AND BRUTTO<>"")
{
msgbox, NETTO OR BRUTTO MUST be EMPTY
return
}
if (NETTO="" AND BRUTTO="")
{
msgbox, NETTO AND BRUTTO ARE EMPTY`nFill out ONE form
return
}
; ---- calculate brutto -------
if NETTO<>
{
BRUTTOX=0
MWST2X =0
if (ANZ="" OR ANZ=0)
ANZ=1
TOTNETTO:=(ANZ*NETTO)
MWST2E :=(NETTO*MWST1)/100
MWST2X :=(TOTNETTO*MWST1)/100
BRUTTOX:=(MWST2X+TOTNETTO)
BRUTTOE:=(MWST2E+NETTO)
setformat,float,0.2
;--- RUNDEN auf 2-stellen --------
BRUTTOX:=floor(BRUTTOX*100+.5)/100
MWST2X :=floor(MWST2X*100+.5)/100
;--- runden au 0.00 oder 0.05 --
;BRUTTOX:=(round(BRUTTOX*20)/20)
;MWST2X :=(round(MWST2X*20)/20)
GuiControl,3:,BRUTTO ,%BRUTTOX%
GuiControl,3:,BRUTTOE,%BRUTTOE%
GuiControl,3:,MWST2 ,%MWST2X%
GuiControl,3:,MWSTE ,%MWST2E%
return
}
;--- calculate netto ------
if BRUTTO<>
{
NETTOX =0
MWST2X =0
if (ANZ="" OR ANZ=0)
ANZ=1
TOTBRUTTO:=(ANZ*BRUTTO)
NETTOE :=(BRUTTO*100)/(100+MWST1)
NETTOX :=(TOTBRUTTO*100)/(100+MWST1)
MWST2E :=(BRUTTO/(100+MWST1))*MWST1
MWST2X :=(TOTBRUTTO/(100+MWST1))*MWST1
setformat,float,0.2
;--- RUNDEN auf 2-stellen --------
NETTOX :=floor(NETTOX*100+.5)/100
MWST2X :=floor(MWST2X*100+.5)/100
;--- runden au 0.00 oder 0.05 --
;NETTOX:=(round(NETTOX*20)/20)
;MWST2X :=(round(MWST2X*20)/20)
;GANZ(A1*20+0.5)/20
;verdoppeln, auf 10 runden und halbieren
GuiControl,3:,NETTO ,%NETTOX%
GuiControl,3:,NETTOE,%NETTOE%
GuiControl,3:,MWST2 ,%MWST2X%
GuiControl,3:,MWSTE ,%MWST2E%
return
}
return
;-------------------------------------------------------------------
3guiclose:
exitapp
;-------------------------------------------------------------------
Re: Berechnung einer Zahl bei Eingabe
Hi,
vielen Dank erstmal für deine Hilfe! Echt super!
Ich habe das jetzt so probiert:
[Mod edit: [code][/code] tags added.]
Damit habe ich für Win+j den Autohotkey zur Berechnung. Das klappt schonmal super. Aber gibt es auch die Möglichkeit, das als Hotstring zu machen? Wenn ich bspw. mws als hotstring definiere, müsste ja irgendwie die Eingabe davor automatisch als Input betrachtet werden, also bei der Eingabe 1500mws müsste automatisch erkannt werden, dass mws der Hotstring ist und 1500 der Input. Als Text müsste dann 1785 erscheinen (statt 1500mws). Oder ist so etwas generell nicht möglich?
Das GUI-Beispiel verstehe ich ehrlich gesagt nicht so richtig (naja, bzw. gar nicht...); ich bin wie gesagt blutiger Anfänger bei ahk und auch sonst keine Programmier-Leuchte...
Viele Grüße
vielen Dank erstmal für deine Hilfe! Echt super!
Ich habe das jetzt so probiert:
Code: Select all
#j::
setformat,float,0.2
InputBox, inp, % title, Bitte gib Betrag ein , , , , , , Locale
c:=inp*1.19
msgbox,%c%
return
Damit habe ich für Win+j den Autohotkey zur Berechnung. Das klappt schonmal super. Aber gibt es auch die Möglichkeit, das als Hotstring zu machen? Wenn ich bspw. mws als hotstring definiere, müsste ja irgendwie die Eingabe davor automatisch als Input betrachtet werden, also bei der Eingabe 1500mws müsste automatisch erkannt werden, dass mws der Hotstring ist und 1500 der Input. Als Text müsste dann 1785 erscheinen (statt 1500mws). Oder ist so etwas generell nicht möglich?
Das GUI-Beispiel verstehe ich ehrlich gesagt nicht so richtig (naja, bzw. gar nicht...); ich bin wie gesagt blutiger Anfänger bei ahk und auch sonst keine Programmier-Leuchte...
Viele Grüße
Re: Berechnung einer Zahl bei Eingabe
habe keine Lösung , hier bei Eingabe 'mwst' startet inputbox ( hotstring statt hotkey )
Code: Select all
#persistent
setformat,float,0.2
:x*:mwst::gosub,a1
a1:
;-InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Locale, Timeout, Default]
InputBox, inp, % title, Bitte gib Betrag ein ( Netto ) , , , , , , , ,
if (inp="")
return
c:=inp*1.19
msgbox,%c%
return
esc::exitapp
Re: Berechnung einer Zahl bei Eingabe
Bin sicher das es dazu elegantere Lösungen zB mittels Verwendung von Input gibt. Anyway...
Code: Select all
#SingleInstance, Force
:?:mws::
clipboard := "" ; zwischenablage leeren
Send {LButton 2}{LButton Up} ; zahlwert markieren
Send ^c ; zahlwert kopieren
clipwait ; zwischenablage befüllen
brutto := clipboard*1.19 ; zahlwert prozessieren
clipboard := Round(brutto,2) ; zahlwert auf zwei nachkommastellen runden
Send ^v ; zahlwert aus der zwischenablage einfügen
return
- flyingDman
- Posts: 2821
- Joined: 29 Sep 2013, 19:01
Re: Berechnung einer Zahl bei Eingabe
Schau mal hier http://www.autohotkey.com/board/topic/114764-regex-dynamic-hotstrings/ :
Code: Select all
hotstrings("(\d+)mws","calc")
return
calc:
send % round($1*1.19,0) . "mws"
return
14.3 & 1.3.7
Re: Berechnung einer Zahl bei Eingabe
@flyingDman Sehr cool! (I'd assume that the final "mws" from the output string can be removed as it is only the indicator to do the math (mws = "Mehrwertsteuer" AKA the German equivalent for VAT - that for the majority of goods is 19%, btw, all over Germany) ... and therefore to allow a floating point numbered output seems OK for me as any such math might end up with an amount of €-cents!
Einmal mehr, wer RegEx kann ist klar im Vorteil!
Einmal mehr, wer RegEx kann ist klar im Vorteil!
- flyingDman
- Posts: 2821
- Joined: 29 Sep 2013, 19:01
Re: Berechnung einer Zahl bei Eingabe
Ja, ich wusste nicht, ob mws enthalten sein sollte oder nicht. Es gibt mehrere Möglichkeiten, sich an Ihre Bedürfnisse anzupassen:
Code: Select all
send % round($1*1.19,2)
14.3 & 1.3.7
Re: Berechnung einer Zahl bei Eingabe
danke für die Beispiele
Code: Select all
;- https://www.autohotkey.com/boards/viewtopic.php?f=9&t=105813
;- https://www.autohotkey.com/board/topic/114764-regex-dynamic-hotstrings/
;- Hotstrings.ahk in folder > "C:\Program Files\AutoHotkey\LIB"
;-----------------------------
#Include HotStrings.ahk
;- Beispiel MWST Deutschland 19% netto type : 1500mws > 1785.00
;-
hotstrings("(\d+)mws","calc")
Gui, Add, Edit, w300 h100
Gui, Show
Return
;--------
GuiEscape:
GuiClose:
ExitApp
;-----------
calc:
aa:=round($1*1.19,2)
;msgbox,%aa%
send % aa ;- siehe 1785.00 in Edit wenn 1500mws eingegeben wurde
return
;-----------
Re: Berechnung einer Zahl bei Eingabe
Hi zusammen,
danke für euren Einsatz! Bei den Beispielen von flyingman und Garry bekomme ich immer eine Fehlermeldung, sobald ich die ahk neu aktivere. ich vermute, dass das an dem include liegt (und ich sozusagen nichts zu includen habe; wie kann ich sowas denn machen?).
Das Beispiel von BoBo funktioniert, allerdings immer nur einmal, danach wird das Kürzel gelöscht, die Zahl bleibt aber gleich. Wieso klappt das immer nur einmal (also einmal, nachdem ich die ahk neu aktiviert habe)?
Viele Grüße
danke für euren Einsatz! Bei den Beispielen von flyingman und Garry bekomme ich immer eine Fehlermeldung, sobald ich die ahk neu aktivere. ich vermute, dass das an dem include liegt (und ich sozusagen nichts zu includen habe; wie kann ich sowas denn machen?).
Das Beispiel von BoBo funktioniert, allerdings immer nur einmal, danach wird das Kürzel gelöscht, die Zahl bleibt aber gleich. Wieso klappt das immer nur einmal (also einmal, nachdem ich die ahk neu aktiviert habe)?
Viele Grüße
Re: Berechnung einer Zahl bei Eingabe
betreff include :
;- https://www.autohotkey.com/board/topic/114764-regex-dynamic-hotstrings/ < dieses script in eigenen ahk-script kopieren oder als 'Hotstrings.ahk' in Ordner "C:\Program Files\AutoHotkey\LIB" ablegen
;- Hotstrings.ahk in folder > "C:\Program Files\AutoHotkey\LIB"
;-----------------------------
#Include HotStrings.ahk < dies wird gebraucht wenn Hotstrings.ahk in folder > "C:\Program Files\AutoHotkey\LIB" liegt
;- https://www.autohotkey.com/board/topic/114764-regex-dynamic-hotstrings/ < dieses script in eigenen ahk-script kopieren oder als 'Hotstrings.ahk' in Ordner "C:\Program Files\AutoHotkey\LIB" ablegen
;- Hotstrings.ahk in folder > "C:\Program Files\AutoHotkey\LIB"
;-----------------------------
#Include HotStrings.ahk < dies wird gebraucht wenn Hotstrings.ahk in folder > "C:\Program Files\AutoHotkey\LIB" liegt
Re: Berechnung einer Zahl bei Eingabe
Die Schwierigkeit liegt darin den Zahlenwert abzugreifen. Die Methode eines dynamischen Hotstrings (von flyingDman) greift dabei zur Echtzeit ab, was vorzuziehen ist. Bei mir wird markiert, kopiert & eingefügt, was timing abhängig ist, und damit unzuverlässiger sein dürfte.
Zur Vorgehensweise zum #Includieren von scripten einfach die AHK Hilfe zu #Include bemühen (es gibt auch die Deutsche Übersetzung, über deren Menü erreichbar).
Das/die zu inkludierende script/function hat flyingDman ja verlinkt. Good luck
Hiermit sollte es gehen. Ohne Gew[e|ä]hr
Zur Vorgehensweise zum #Includieren von scripten einfach die AHK Hilfe zu #Include bemühen (es gibt auch die Deutsche Übersetzung, über deren Menü erreichbar).
Das/die zu inkludierende script/function hat flyingDman ja verlinkt. Good luck
Hiermit sollte es gehen. Ohne Gew[e|ä]hr
Code: Select all
#SingleInstance, Force
:?:mws::
clipboard := "" ; zwischenablage leeren
Send {LButton Down}{LButton Up}{LButton Down}{LButton Up} ; zahlwert markieren
Send ^c ; zahlwert kopieren
clipwait, 1 ; zwischenablage befüllen
brutto := clipboard*1.19 ; zahlwert prozessieren
clipboard := Round(brutto,2) ; zahlwert auf zwei nachkommastellen runden
Send ^v ; zahlwert aus der zwischenablage einfügen
return