Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [gelöst] Das Thema Taschenrechner (https://www.delphipraxis.net/104459-%5Bgeloest%5D-das-thema-taschenrechner.html)

spox 4. Dez 2007 17:16


[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:
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;
Ich hoffe ihr könnt mir helfen. :)

angos 4. Dez 2007 17:19

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

spox 4. Dez 2007 17:29

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.

angos 6. Dez 2007 15:14

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