![]() |
AW: Taschenrechner ein Editfeld
no problem, jedem ist eh klar, daß du dich nur vertippt hast. Wollte nur etwas abkürzen ("Wieso kommt denn da inkompatible Typen?") :-D
|
AW: Taschenrechner ein Editfeld
Zitat:
Gut, ich bevorzuge deinen 2. Quelltext, wobei mir da noch 2 Fragen offen sind. 1. Unter type hast du TOperation, was ist das ? ein Button ist ja ein TButtoon, aber was ist eine TOperation ? :D 2. Das Case of kommt dann in den '=' Button nicht wahr ? :D Aber danke nochmal, dass hier so großzügig geholfen wird :) |
AW: Taschenrechner ein Editfeld
Ihr sollt nach 3 Stunden bereits einen Taschenrechner schreiben? Das könnte man großzügig "ambitioniert" nennen. Das TOperation ist ein selbst definierter Datentyp, nämlich eine Aufzählung. Genauere Infos dazu solltest Du in der Delphi-Hilfe finden oder z.B.
![]() |
AW: Taschenrechner ein Editfeld
So bin fertig :) hier mal mein Quelltext, Punkt vor Strich wird aber nicht beachtet!
Code:
unit Taschenrechner;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, ImgList; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; Button13: TButton; Button14: TButton; Button15: TButton; Button16: TButton; Button17: TButton; Ausgabe: TEdit; Button18: TButton; BitBtn1: TBitBtn; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button15Click(Sender: TObject); procedure Button16Click(Sender: TObject); procedure Button17Click(Sender: TObject); procedure Button18Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; zwischen : boolean; rz : integer ; Ergebnis : real; implementation {$R *.DFM} procedure einlesen ; begin If rz = 1 then Form1.Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Form1.Ausgabe.Text)) else If rz = 2 then Form1.Ausgabe.Text := FloatToStr (Ergebnis - StrToFloat (Form1.Ausgabe.Text)) else If rz = 3 then Form1.Ausgabe.Text := FloatToStr (Ergebnis * StrToFloat (Form1.Ausgabe.Text)) else If rz = 4 then Form1.Ausgabe.Text := FloatToStr (Ergebnis / StrToFloat (Form1.Ausgabe.Text)) else If rz = 0 then ShowMessage ('Bitte Rechnung vollenden. Sprich Zahl 1 eingeben, dann Rechenzeichen bestimmen, dann 2. Zahl eingeben und den = Button betätigen !'); end; procedure TForm1.FormCreate(Sender: TObject); begin form1.Ausgabe.text := '' ; zwischen := false; rz := 0 ; end; procedure TForm1.Button1Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '1' ; end; procedure TForm1.Button2Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '2' ; end; procedure TForm1.Button3Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '3' ; end; procedure TForm1.Button4Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '4' ; end; procedure TForm1.Button5Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '5' ; end; procedure TForm1.Button6Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '6' ; end; procedure TForm1.Button7Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '7' ; end; procedure TForm1.Button8Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '8' ; end; procedure TForm1.Button9Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '9' ; end; procedure TForm1.Button11Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + '0' ; end; procedure TForm1.Button10Click(Sender: TObject); begin form1.Ausgabe.text := '' ; zwischen := false; rz := 0 ; end; procedure TForm1.Button12Click(Sender: TObject); begin form1.Ausgabe.Text := ''; end; procedure TForm1.Button13Click(Sender: TObject); begin try If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text)); zwischen := true ; Ergebnis := StrToFloat (Ausgabe.Text) ; rz := 1 ; form1.Ausgabe.Text := '' ; except Showmessage ('Bitte 2 oder mehr Zahlen addieren !'); end; end; procedure TForm1.Button14Click(Sender: TObject); begin try If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis - StrToFloat (Ausgabe.Text)); zwischen := true ; Ergebnis := StrToFloat (Ausgabe.Text) ; rz := 2 ; form1.Ausgabe.Text := '' ; except Showmessage ('Bitte 2 oder mehr Zahlen subtrahieren !') end; end; procedure TForm1.Button15Click(Sender: TObject); begin try If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis * StrToFloat (Ausgabe.Text)); zwischen := true ; Ergebnis := StrToFloat (Ausgabe.Text) ; rz := 3 ; form1.Ausgabe.Text := '' ; except ShowMessage (' Bitte 2 oder mehr Zahlen mutliplizieren !'); end; end; procedure TForm1.Button16Click(Sender: TObject); begin try If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis / StrToFloat (Ausgabe.Text)); zwischen := true ; Ergebnis := StrToFloat (Ausgabe.Text) ; rz := 4 ; form1.Ausgabe.Text := '' ; except ShowMessage (' Bitte 2 oder mehr Zahlen miteinander divideren !'); end; end; procedure TForm1.Button17Click(Sender: TObject); begin einlesen end; procedure TForm1.Button18Click(Sender: TObject); begin form1.Ausgabe.Text := form1.Ausgabe.Text + ',' ; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin ShowMessage ('Vielen Dank, dass sie unseren Taschenrechner benutzt haben !'); Close end; end. |
AW: Taschenrechner ein Editfeld
Wenn ich ehrlich bin, bezweifle ich, daß der Taschenrechner richtig funktioniert, - wofür ist "zwischen" gut?
Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);
begin try If zwischen = true then Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text)); zwischen := true ; Ergebnis := StrToFloat (Ausgabe.Text) ; rz := 1 ; form1.Ausgabe.Text := '' ; except Showmessage ('Bitte 2 oder mehr Zahlen addieren !'); end; end;
Delphi-Quellcode:
Ein wenig formatieren, das nicht auszurottende "if irgendwas=true then" berichtigt, und schon ist das alles etwas lesenswerter.
procedure TForm1.Button13Click(Sender: TObject);
begin try If zwischen then Ausgabe.Text := FloatToStr (Ergebnis + StrToFloat (Ausgabe.Text)); zwischen := true ; Ergebnis := StrToFloat (Ausgabe.Text) ; rz := 1 ; Ausgabe.Text := '' ; except Showmessage ('Bitte 2 oder mehr Zahlen addieren !'); end; end; Gruß K-H |
AW: Taschenrechner ein Editfeld
Hättest du den Komponenten aussagekräftige Namen gegeben, man könnte leichter nachvollziehen was wofür ist.
Ich hab auch mal paar Taschenrechner am Anfang geprogt und hab sogar einen der Punkt vor Strichrechnung beachtet, finde den aber im Archiv nicht. Vielleicht ist es auf einer der anderen CDs. Was ich aber gefunden habe ist mein alter Ein-Prozedur-Taschenrechner für ein Editfeld. Allerdings keine Punkt vor Strichrechnung. Ich glaube sonst hat er funktioniert. Aber vielleicht ist es gut für paar Anregungen.
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} Edit := Edit1; 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 Key := #0; {Löscht Editinhalt nach Operatoreingabe, bei neuen Zahleingabe} if not Edit.Modified then Edit.Text := ''; end; {Popov} |
AW: Taschenrechner ein Editfeld
Zitat:
2. Mhh, was ist denn an dem "if irgendwas=true then" so schlimm ? :D |
AW: Taschenrechner ein Editfeld
Zitat:
Delphi-Quellcode:
if irgendwas then ...
Mit =true kann man unter Umstaenden grosse Probleme bekommen, die man dann schwer wieder findet. |
AW: Taschenrechner ein Editfeld
Zitat:
Zufällig gab es die Tage eine Diskussion dazu. Man kann sagen, dass deine Variante gegen True zu prüfen an für sich nicht schlimm ist, solange du nur Delphifunktionen nutzt. Wenn du aber irgendwann mit API oder einigen DLLs usw. arbeitest, kann es passieren, dass es zu Problemen kommen wird. Denn andere Sprachen liefern u. U. andere Werte für True (bei Delphi ist es -1), so dass der Vergleich gegen True u. U. nicht klappen wird. Wenn also eine Delphifremde Funktion für True eine 1 liefert und Delphi unter True -1 versteh, dann wird der Vergleich nicht klappen. Wenn du aber nicht gegen True prüfst, betrachtet Delphi alles was nicht False ist als True, auch eine 3. Aber wie gesagt, solange du nur Delphi Funktionen nutzt ist es gehopst wie gesprungen ob du es so oder so machst. |
AW: Taschenrechner ein Editfeld
Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE} uses SysUtils; Function WithTrue:Boolean; begin Result := Boolean(2); end; begin try if WithTrue then Writeln('OK 1'); if WithTrue = true then Writeln('OK 2'); Readln; { TODO -oUser -cConsole Main : Code hier einfügen } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz