Berechnung einer Zahl bei Eingabe

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

loswollos
Posts: 3
Joined: 27 Jun 2022, 03:27

Berechnung einer Zahl bei Eingabe

Post by loswollos » 27 Jun 2022, 03:40

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'.]

garry
Posts: 3736
Joined: 22 Dec 2013, 12:50

Re: Berechnung einer Zahl bei Eingabe

Post by garry » 27 Jun 2022, 07:11

Beispiel mit inputbox

Code: Select all

setformat,float,0.2
InputBox, inp, % title, Bitte gib Betrag ein , , , , , , Locale
c:=inp*1.19
msgbox,%c%
return
oder , hier ein alter GUI zur MWST Berechnung
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
;-------------------------------------------------------------------


loswollos
Posts: 3
Joined: 27 Jun 2022, 03:27

Re: Berechnung einer Zahl bei Eingabe

Post by loswollos » 27 Jun 2022, 07:39

Hi,
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
[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

garry
Posts: 3736
Joined: 22 Dec 2013, 12:50

Re: Berechnung einer Zahl bei Eingabe

Post by garry » 27 Jun 2022, 10:50

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

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Berechnung einer Zahl bei Eingabe

Post by BoBo » 27 Jun 2022, 11:04

Bin sicher das es dazu elegantere Lösungen zB mittels Verwendung von :arrow: 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

User avatar
flyingDman
Posts: 2791
Joined: 29 Sep 2013, 19:01

Re: Berechnung einer Zahl bei Eingabe

Post by flyingDman » 27 Jun 2022, 11:53

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

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Berechnung einer Zahl bei Eingabe

Post by BoBo » 27 Jun 2022, 12:13

@flyingDman Sehr cool! :clap: :thumbup: (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! 8-)

User avatar
flyingDman
Posts: 2791
Joined: 29 Sep 2013, 19:01

Re: Berechnung einer Zahl bei Eingabe

Post by flyingDman » 27 Jun 2022, 12:33

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

garry
Posts: 3736
Joined: 22 Dec 2013, 12:50

Re: Berechnung einer Zahl bei Eingabe

Post by garry » 27 Jun 2022, 12:53

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
;-----------

loswollos
Posts: 3
Joined: 27 Jun 2022, 03:27

Re: Berechnung einer Zahl bei Eingabe

Post by loswollos » 28 Jun 2022, 07:33

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

garry
Posts: 3736
Joined: 22 Dec 2013, 12:50

Re: Berechnung einer Zahl bei Eingabe

Post by garry » 28 Jun 2022, 07:56

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

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Berechnung einer Zahl bei Eingabe

Post by BoBo » 28 Jun 2022, 08:03

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 :arrow: #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 :mrgreen:

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 

Post Reply

Return to “Ich brauche Hilfe”