(Gast)
n/a Beiträge
|
AW: OnKeyPress verarbeitet ENTER nicht an
4. Apr 2015, 20:55
Du programmierst zwar einen richtigen Taschenrechner mit Tasten, aber hier mein alter Ein-Prozedur-Taschenrechner (beachten nicht Punkt vor Strichrechnung). Vielleicht beantwortet es dir zum Teil deine Frage:
Delphi-Quellcode:
{ --== Ein-Prozedur Taschenrechner ==-- }
{ Hinweis: befolgt nicht die Punkt vor Strich Regel }
var
Mem1, Mem2: Extended;
LastOpKey: Char;
{Mögliche Tasten: "0123456789" und ",", dann "+-*/", "c", "=", alternativ Enter}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
Edit: TEdit;
begin
{Dies und das}
if not (Sender is TEdit) then
begin
Windows.Beep(300, 200);
Exit;
end
else
Edit := TEdit(Sender);
if Key = #13 then
Key := '=';
{Clear}
if Key = 'c' then
begin
Edit.Text := FloatToStr(0);
Edit.SelStart := Length(Edit.Text); //setzt Cursor an Editfeld Ende
Mem2 := 0;
LastOpKey := #0;
Key := #0;
Exit;
end;
{Rechnen}
if Key in ['+', '-', '*', '/', '='] then
begin
{Änderung des Operators (Operatorkorrektur)}
if not Edit.Modified then
begin
LastOpKey := Key;
Key := #0;
Exit;
end;
{bedeutet, daß Opperator eigegeben wurde und vor der nächsten Zahleeingabe
Edit-Feld gelöscht werden muß. Wird auch für Operatorkorrektur genutzt}
Edit.Modified := False;
{altuelle Zahl aus Editfeld holen}
Mem1 := StrToFloat(Edit.Text);
case LastOpKey of
'+': Mem1 := Mem2 + Mem1;
'-': Mem1 := Mem2 - Mem1;
'*': Mem1 := Mem2 * Mem1;
'/': Mem1 := Mem2 / Mem1;
else
Mem2 := Mem1;
LastOpKey := Key;
Key := #0;
Exit;
end;
{Ergebnis und Zwischenergebns in Editfeld zurückschreiben}
Edit.Text := FloatToStr(Mem1);
Edit.SelStart := Length(Edit.Text);
{auf nächste Zahlen-Eingabe verbreiten}
Mem2 := Mem1;
if Key <> '=' then
LastOpKey := Key
else
LastOpKey := #0;
Key := #0;
Exit;
end;
{Zahlen Filtern}
if not (Key in [#8, '0'..'9', ',']) then
begin
Windows.Beep(300, 200);
Key := #0;
end;
{Löscht Editinhalt nach Operatoreingabe, bei neuen Zahleingabe}
if not Edit.Modified then
Edit.Text := '';
end; {Popov}
|
|
Zitat
|