Sorry für die hässliche GUI, ich hatte nicht viel Zeit.
Der BACalculator errechnet auf Grund von vorher eingegebenen Daten die maximale Blutalkoholkonzentration in Promille. Dazu werden Formeln von Widmark, Watson und Eicker benutzt. Aufgrund einer Ungenauigkeit in der Eicker-Formel ist die Berechnung bei Frauen weniger genau als bei Männern.
Die GUI sollte selbsterklärend sein...
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $iAlcMasse = 0
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("BACalculator", 291, 443, 192, 124)
GUICtrlCreateLabel("Masse in kg:", 1, 10)
$masseInput = GUICtrlCreateInput("60", 65, 8, 50, Default, $ES_NUMBER)
GUICtrlCreateUpdown($masseInput)
GUICtrlCreateLabel("Alter in Jahren:", 120, 10)
$alterInput = GUICtrlCreateInput("20", 200, 8, 50, Default, $ES_NUMBER)
GUICtrlCreateUpdown($alterInput)
GUICtrlCreateLabel("Größe in cm:", 1, 40)
$groesseInput = GUICtrlCreateInput("160", 65, 38, 50, Default, $ES_NUMBER)
GUICtrlCreateUpdown($groesseInput)
GUICtrlCreateLabel("Geschlecht:", 120, 40)
$geschlechtCombo = GUICtrlCreateCombo("männlich", 200, 38, 80, Default, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, "weiblich")
$promilleLabel = GUICtrlCreateLabel("0,00‰", 168, 384, 116, 50)
GUICtrlSetFont(-1, 30, 400, 0, "Arial Narrow")
GUICtrlSetColor(-1, 0x000000)
$listeLabel = GUICtrlCreateLabel("Liste:", 0, 96, 285, 273)
$iInput = GUICtrlCreateInput("1", 8, 72, 41, 21, $ES_NUMBER)
GUICtrlCreateUpdown($iInput)
$mengeCombo = GUICtrlCreateCombo("", 72, 72, 113, 25)
$volProzInput = GUICtrlCreateInput("5%", 192, 72, 57, 21)
$addButton = GUICtrlCreateButton("+", 256, 72, 25, 25)
$neuButton=GUICtrlCreateButton("Neu anfangen",10,384,148,50)
GUICtrlSetState($neuButton,$GUI_HIDE)
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($mengeCombo, "1 cl")
GUICtrlSetData($mengeCombo, "2 cl")
GUICtrlSetData($mengeCombo, "4 cl")
GUICtrlSetData($mengeCombo, "10 cl")
GUICtrlSetData($mengeCombo, "20 cl")
GUICtrlSetData($mengeCombo, "30 cl")
GUICtrlSetData($mengeCombo, "50 cl")
GUICtrlSetData($mengeCombo, "100 cl")
GUICtrlSetData($mengeCombo, "200 cl", "1 cl")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $addButton
_add()
Case $neuButton
_clear()
EndSwitch
WEnd
Func _add()
$iAnzahl = GUICtrlRead($iInput)
$sMenge = GUICtrlRead($mengeCombo)
$sVolProz = GUICtrlRead($volProzInput)
If $iAnzahl <= 0 Then Return _setDefault()
;Menge korrigieren:
$sMenge = StringStripWS($sMenge,
$sMenge = StringReplace($sMenge, ",", ".")
If StringRight($sMenge, 2) = "cl" Then $sMenge = StringTrimRight($sMenge, 2)
$iMenge = Number($sMenge)
If $iMenge = 0 Then Return _setDefault()
;VolProz korrigieren:
$sVolProz = StringStripWS($sVolProz,
$sVolProz = StringReplace($sVolProz, ",", ".")
If StringRight($sVolProz, 1) = "%" Then $sVolProz = StringTrimRight($sVolProz, 1)
$iVolProz = Number($sVolProz)
If $iVolProz = 0 Then Return _setDefault()
; zur Liste hinzufügen:
GUICtrlSetData($listeLabel, GUICtrlRead($listeLabel) & @CRLF & $iAnzahl & "x " & $iMenge & " cl mit " & $iVolProz & "%")
;Alkoholmasse berechnen:
$iAlcMasse += (($iAnzahl * $iMenge) / 10) * $iVolProz * 0.8
_recalculate()
EndFunc ;==>_add
Func _setDefault()
GUICtrlSetData($iInput, 1)
GUICtrlSetData($mengeCombo, "")
GUICtrlSetData($volProzInput, "5%")
EndFunc ;==>_setDefault
Func _recalculate()
If GUICtrlRead($geschlechtCombo) = "männlich" Then
$GWK = 2.447 - 0.09516 * GUICtrlRead($alterInput) + 0.1074 * GUICtrlRead($groesseInput) + 0.3362 * GUICtrlRead($masseInput)
Else
$GWK = 0.203 - 0.07 * GUICtrlRead($alterInput) + 0.1069 * GUICtrlRead($groesseInput) + 0.2466 * GUICtrlRead($masseInput)
EndIf
$r = (1.055 * $GWK) / (0.8 * GUICtrlRead($masseInput))
$c = $iAlcMasse / (GUICtrlRead($masseInput) * $r)
GUICtrlSetData($promilleLabel,StringReplace(Round($c,2),".",",") & "‰")
GUICtrlSetState($neuButton,$GUI_SHOW)
EndFunc
Func _clear()
$iAlcMasse = 0
GUICtrlSetData($promilleLabel,"0,00‰")
GUICtrlSetData($listeLabel,"Liste:" & @CRLF)
GUICtrlSetState($neuButton,$GUI_HIDE)
EndFunc