Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi taschenrechner mit 1 editfeld (https://www.delphipraxis.net/53382-taschenrechner-mit-1-editfeld.html)

furby 15. Sep 2005 10:16


taschenrechner mit 1 editfeld
 
hallo,
Also ich möchte in mein Programm einen kleinen Taschenrechner einbinden, der aussieht, wie der windows taschenrechern. also d.h. mit 1 editfeld. ich hab leider überhaupt keinen ahnung, wie man das anstellen soll... so dass man unendlich mal auf plus klicken kann und er immernur 5 dazurechnet. Ich konnta bisher nur taschenrechner mit 2 editfelder proggen. ich hoffe irgendeiner hat sowas schonmal gemacht und kann mir helfen.
danke schonma im vorraus

n0b0dy 15. Sep 2005 10:21

Re: taschenrechner mit 1 editfeld
 
hi,

du musst halt jedesmal wenn du auf + - * / klickst, den wert in einer variablen merken und dann das edit feld leeren....

marabu 15. Sep 2005 10:33

Re: taschenrechner mit 1 editfeld
 
Hi,

das Geheimnis ist: du benötigst einen Speicher für dein letztes Ergebnis:

Delphi-Quellcode:
type
  TCalculator = class(TForm)
    NumEdit: TEdit;
  ...
  private
    FMemory: double;
    procedure SetMemory(memory: double);
  public
    property Memory: double read FMemory write SetMemory;
  ...
  end;

procedure TCalculator.SetMemory(memory: double);
begin
  FMemory := memory;
  NumEdit.Text := FloatToStr(memory);
end;

procedure TCalculator.ResetButtonClick(Sender: TObject);
begin
  Memory := 0;
end;

procedure TCalculator.PlusButtonClick(Sender: TObject);
begin
  Memory := FMemory + StrToFloat(NumEdit.Text);
end;
Nur getippt, nicht getestet, aber vielleicht fällt ja jetzt bei dir schon der Groschen...

Grüße vom marabu

furby 15. Sep 2005 10:53

Re: taschenrechner mit 1 editfeld
 
hm naja... weiss net genau wie du das meinst. ich hab das auch schon mit speichern gemacht. aber ich bekomm es nie so hin, dass das teil wie der windows taschenrechner funktioniert.

Wuaegner 15. Sep 2005 10:57

Re: taschenrechner mit 1 editfeld
 
Ich habe den Rechner schon einmal programmiert, mit Punkt vor Strichrechnung ( aber die wirst du noch nicht benötigen, wenn ich das richtig verstanden habe ), aber wie man das mit + löst kannst du meinem Code entnehmen, den ich freigegeben habe.

Taschenrechner

McRobins 11. Feb 2013 14:00

AW: taschenrechner mit 1 editfeld
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist der ganze Code. Bei den Bild das durch gestrichene weglassen.
Der Taschenrechner funktioniert auch zu 100%
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    bt0: TButton;
    bt9: TButton;
    bt8: TButton;
    bt7: TButton;
    bt6: TButton;
    bt5: TButton;
    bt4: TButton;
    bt3: TButton;
    bt2: TButton;
    bt1: TButton;
    btPunkt: TButton;
    bt00: TButton;
    Edit1: TEdit;
    Panel1: TPanel;
    btPlus: TButton;
    btMal: TButton;
    btGeteilt: TButton;
    btMinus: TButton;
    btGleich: TButton;
    btClear: TButton;
    Label1: TLabel;
    btMplus: TButton;
    btMminus: TButton;
    btMR: TButton;
    btMC: TButton;
    procedure ZeiButtonClick(Sender: TObject);
    procedure opButtonClick(Sender: TObject);
    procedure btClearClick(Sender: TObject);
    procedure btGleichlik(Sender: TObject);


  private

    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var strBuff1, strBuff2: string;
    op: Char;
var mode: Byte = 1;


procedure TForm1.btClearClick(Sender: TObject);
begin
 if mode = 1 then StrBuff1 := ''
             else StrBuff2 := '';
      edit1.text := ''
end;

procedure TForm1.ZeiButtonClick(Sender: TObject);
var zei: Char;
begin
 if Sender = bt0 then zei := '0';
 if Sender = bt1 then zei := '1';
 if Sender = bt2 then zei := '2';
 if Sender = bt3 then zei := '3';
 if Sender = bt4 then zei := '4';
 if Sender = bt5 then zei := '5';
 if Sender = bt6 then zei := '6';
 if Sender = bt7 then zei := '7';
 if Sender = bt8 then zei := '8';
 if Sender = bt9 then zei := '9';
 if Sender = btPunkt then zei := '.';

 if mode = 1 then
 begin
  strBuff1 := strBuff1 + zei;
  edit1.text := strBuff1
  end else
  begin
   strBuff2 := strBuff2 + zei;
   edit1.text := strBuff2
  end;
 end;

 procedure TForm1.opButtonClick(Sender: TObject);
begin
 if mode = 1 then
 begin
  if Sender = btPlus then op := '+';
  if Sender = btMinus then op := '-';
  if Sender = btGeteilt then op := '/';
  if Sender = btMal then op := '*';
  StrBuff2 := '';
  mode := 2
  end
 end;

procedure TForm1.btGleichlik(Sender: TObject);
var res, op1, op2: Double;
    code: Integer;
    s: string;
begin
 if mode = 2 then begin
 Val(strBuff1, op1, code);
 Val(strBuff2, op2, code);
 case op of
 '+': res := op1 + op2;
 '-': res := op1 - op2;
 '/': res := op1 / op2;
 '*': res := op1 * op2;

 end;
 s:= Format ('%g', [res]);
 edit1.text := s;
 mode := 1;
 strBuff1 := ''
 end
end;


end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz