![]() |
[gelöst] Das Thema Taschenrechner
[gelöst]
Hallo! Ich bin gerade dabei für mich als Übung einen Taschenrechner zu realisieren. Ich halte mich dabei an den Windows-Taschenrechner. Nun, die 4 Rechenarten funktionieren einwandfrei. Nur, wenn es jetzt an das Feintuning geht, haperts leider. Im Moment geht es darum, es zu schaffen, dass die 0 nicht mehrfach eingegeben wird, wenn sie gedrückt wird, und als einzige Ziffer im Display steht. Nun, ich hoffe ihr könnt mir helfen. Alle "Zahlenbuttons" nehmen die Button1 Prozedur, da so ja der Aufwand veringert wird. Doch hier haperts jetzt mit der "nicht-nochmal-eingeben" null:
Delphi-Quellcode:
Ich hoffe ihr könnt mir helfen. :)
procedure TTaschenrechner.Button1Click(Sender: TObject);
begin if Eingabe.Text[1]=0 then begin Button16.Enabled:= false; end else Button16.Enabled:=true; Eingabe.Text:= Eingabe.Text+TButton(Sender).Caption[1]; end; |
Re: Das Thema Taschenrechner
Hi,
um dir zu helfen wären Infos nötig. Wer ist Button16 und wer ist Button1? Haben diese Buttons unterschiedliche onClick-Ereignisse oder die gleichen? Gruß angos |
Re: Das Thema Taschenrechner
Button 1-9 und Button 16(das ist die null) und Button15 (das ist das Komma), greifen auf Prozedur TTaschenrechner.Button1Click zurück.
Hier einmal der ganze Code:
Delphi-Quellcode:
unit trUni;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const addition=1; subtraktion=2; multiplikation=3; division=4; type TTaschenrechner = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; //+ (- Button) Button11: TButton; //- (- Button) Button12: TButton; //* (- Button) Button13: TButton; // / (division) (- Button) Button14: TButton; // = (- Button) Button15: TButton; Button16: TButton; Button17: TButton; // C- Button Eingabe: TEdit; //das Display Button18: TButton; // wechsel zwischen postiv und negativ zahlen Button19: TButton; //CE Button Button20: TButton; //sqrt (noch nicht implementiert) Button21: TButton; //noch keine Funktion (kommt noch) Button22: TButton; //noch keine Funktion (kommt noch) procedure Button1Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button17Click(Sender: TObject); procedure Button19Click(Sender: TObject); procedure Button16Click(Sender: TObject); procedure Button18Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Taschenrechner: TTaschenrechner; summand1,summand2,summe,cache:double; modus:integer; implementation {$R *.dfm} procedure TTaschenrechner.Button1Click(Sender: TObject); begin if Eingabe.Text[1]=0 then begin Button16.Enabled:= false; end else Button16.Enabled:=true; Eingabe.Text:= Eingabe.Text+TButton(Sender).Caption[1]; end; procedure TTaschenrechner.Button10Click(Sender: TObject); begin summand1:= StrToFloat(Eingabe.Text); Eingabe.Text:='0' ; Button13.Enabled:= false; Button12.Enabled:= false; Button11.Enabled:= false; modus:= 1; end; procedure TTaschenrechner.Button11Click(Sender: TObject); begin summand1:= StrToFloat(Eingabe.Text); Eingabe.Text:= '0'; modus:= 2; Button10.Enabled:= false; Button12.Enabled:= false; Button13.Enabled:= false; end; procedure TTaschenrechner.Button12Click(Sender: TObject); begin summand1:= StrToFloat(Eingabe.Text); Eingabe.Text:= '0'; modus:= 3; Button10.Enabled:= false; Button11.Enabled:= false; Button13.Enabled:= false; end; procedure TTaschenrechner.Button13Click(Sender: TObject); begin summand1:= StrToFloat(Eingabe.Text); Eingabe.Text:= '0'; modus:= 4; Button10.Enabled:= false; Button11.Enabled:= false; Button12.Enabled:= false; end; procedure TTaschenrechner.Button14Click(Sender: TObject); begin summand2:= StrToFloat(Eingabe.Text); case modus of addition: begin summe:= summand1+summand2; // FloatToStr(summe); { if length (FloatToStr(summe))>=14 then begin FloatToStr(summe)[14]:='E'; end; } Eingabe.Text:= FloattoStr(summe); Button10.Enabled:= true; Button11.Enabled:= true; Button12.Enabled:= true; Button13.Enabled:= true; end; subtraktion: begin summe:= summand1-summand2; Eingabe.Text:= FloatToStr(summe); Button10.Enabled:= true; Button11.Enabled:= true; Button12.Enabled:= true; Button13.Enabled:= true; end; multiplikation: begin summe:= summand1*summand2; Eingabe.Text:= FloatToStr(summe); Button10.Enabled:= true; Button11.Enabled:= true; Button12.Enabled:= true; Button13.Enabled:= true; end; division: begin summe:= summand1/summand2; Eingabe.Text:= FloatToStr(summe); Button10.Enabled:= true; Button11.Enabled:= true; Button12.Enabled:= true; Button13.Enabled:= true; end; end; end; procedure TTaschenrechner.Button17Click(Sender: TObject); begin Eingabe.Text:= ''; summand1:= 0; summand2:= 0; Button10.Enabled:= true; Button11.Enabled:= true; Button12.Enabled:= true; Button13.Enabled:= true; end; procedure TTaschenrechner.Button19Click(Sender: TObject); begin Eingabe.Text:= ''; end; procedure TTaschenrechner.Button16Click(Sender: TObject); begin { if (length (Eingabe.Text)=1 and Eingabe.Text:= (IntToStr(0))) then Button16.Enabled:= false else Button16.Enabled:= true; } end; procedure TTaschenrechner.Button18Click(Sender: TObject); begin cache:= StrToFloat (Eingabe.Text); cache:= cache*(-1); Eingabe.Text:= FloatToStr (cache); end; procedure TTaschenrechner.FormCreate(Sender: TObject); begin if Eingabe.Text[1]='0' then begin Button16.Enabled:= false; end else Button16.Enabled:=true; end; end. |
Re: [gelöst] Das Thema Taschenrechner
puh, nimms mir nicht böse, aber ich weis warum du da niocht unbedingt durchkommst. ;) tipp: benenne alle deine Buttons, edits und anderen Komponenten um (zB btn1, btn2, btnPlus, btnGleich,....)
Delphi-Quellcode:
procedure TTaschenrechner.Button1Click(Sender: TObject);
begin // Eingabe.Text[1] ist ein String und sollte dann auch als solcher abgefragt werden. Wenn eingabe.text ='' ist wird diese Funktion // eine Exception hervorrufen, das solltest du abfangen (zB if Length(eingabe.text) >= 1 then...) if Eingabe.Text[1]='0' then // vorher: if Eingabe.Text[1]=0 then begin Button16.Enabled:= false; end else Button16.Enabled:=true; Eingabe.Text:= Eingabe.Text+TButton(Sender).Caption[1]; end; für dein Problem mache dir die funktion OnChange von dem Edit zu Nutzen.
Delphi-Quellcode:
procedure TTaschenrechner.eingabeChange(Sender: TObject);
begin if Eingabe.Text = '00' then Eingabe.Text := '0'; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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 by Thomas Breitkreuz