'##########################
'Benötigte Header-Dateien einbinden
'##########################
$H Windows.ph
$H Messages.ph
'##########################
'Fenster anlegen
'##########################
WindowStyle 536'DialogStil setzen
WindowTitle "Berechne"
WINDOW 365,250
CLS ~GetSysColor(~COLOR_BTNFACE)
Set("Decimals",4)
setdialogfont ~GetStockObject(~DEFAULT_GUI_FONT)
'##########################
'das Fenster aufbauen
'##########################
Create("Text",%hWnd,"Eingabe X1:",10, 8,120,20)
Create("Text",%hWnd,"Eingabe X2 muss ungleich 0 sein:",10,33,300,20)
Create("Text",%hWnd,"Eingabe Y1:",10,58,120,20)
Create("Text",%hWnd,"Eingabe Y2:",10,83,120,20)
Create("Text",%hWnd,"Eingangssignal:",10,108,120,20)
Create("Text",%hWnd,"Die Steigung beträgt:",10,168,200,20)
Create("Text",%hWnd,"Das Ausgangssignal beträgt:",10,193,200,20)
Var X1% = Create("Edit",%hWnd,"",250, 5,85,24)
Var X2% = Create("Edit",%hWnd,"",250,30,85,24)
Var Y1% = Create("Edit",%hWnd,"",250,55,85,24)
Var Y2% = Create("Edit",%hWnd,"",250,80,85,24)
Var ES% = Create("Edit",%hWnd,"",250,105,85,24)
Var hB% = Create("Button",%hWnd,"&Berechnen",10,133,80,25)
Var hA% = Create("Button",%hWnd,"&Schließen",250,133,80,25)
Var T1% = Create("Text",%hWnd,"",248,193,85,20)
Var T2% = Create("Text",%hWnd,"",248,168,85,20)
'##########################
'Subclassing für die Edits einschalten
'##########################
SubClass X1%, 1
SubClass X2%, 1
SubClass Y1%, 1
SubClass Y2%, 1
SubClass ES%, 1
SetFocus(X1%)
'##########################
'Hauptschleife
'##########################
While 1
WaitInput
Case %key = 2 : BREAK'Fenster soll geschlossen werden(ESC,ALT+F4,Schliessen-Kreuz,Systemmenu-Schliessen)
If Clicked(hb%)
If CheckValues()
Berechnen()
EndIf
ElseIf Clicked(ha%)
Break
EndIf
EndWhile
End
'##########################
'die benötigten Prozeduren
'##########################
Subclassproc
'##########################
'hier wird die Eingabe in die Edits überwacht
'nur Zahlen,Minus,Komma und Backspace werden erlaubt
'##########################
If (&swnd = X2%) or (&swnd = Y1%) or (&swnd = X1%) or (&swnd = Y2%) or (&swnd = ES%)
If SubClassMessage(&swnd,~wm_char)
Set("WinProc", 1)'weiterleiten
If (&swParam > 47) and (&swParam < 58)'alle Zahlen bearbeiten
ElseIf &swParam = 45'Minus
ElseIf &swParam = 44'Komma
ElseIf &swParam = ~VK_BACK'Backspace
Else
Set("WinProc", 0)'sonst nicht weiterleiten
EndIf
'#################
'Rechte Maustast abfangen
'#################
Elseif SubClassMessage(&swnd,~WM_CONTEXTMENU)
SendMessage(&swnd,~WM_LBUTTONDOWN,0,0)
SendMessage(&swnd,~WM_LBUTTONUP,0,0)
Set("WinProc", 0)'sonst nicht weiterleiten
EndIf
EndIf
EndProc
Proc Berechnen
Var X1! = val(translate$(GetText$(X1%),",","."))
Var X2! = val(translate$(GetText$(X2%),",","."))
Var Y1! = val(translate$(GetText$(Y1%),",","."))
Var Y2! = val(translate$(GetText$(Y2%),",","."))
Var ES! = val(translate$(GetText$(ES%),",","."))
Var ST! = ((Y2!-Y1!)/(X2!-X1!))
Var AS!=(ES!*ST!)+Y1!
Var ST$ = str$(@round(ST!,4))
Var AS$ = str$(@round(AS!,4))
Settext T1%,AS$+" %"
Settext T2%,ST$
EndProc
Proc CheckValues
'##########################
'hier werden die zwei Edits überprüft die keine NULL erlauben
'##########################
If Val(Gettext$(X2%)) = 0
Messagebox("unkorrekte Eingabe - bitte prüfen","Feld1",0)
SetFocus(X2%)
Return 0
ElseIf Val(Gettext$(Y1%)) = 0
Messagebox("unkorrekte Eingabe - bitte prüfen","Feld2",0)
SetFocus(Y1%)
Return 0
EndIf
Return 1
EndProc