Einzelnen Beitrag anzeigen

David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#13

Re: Währungsrechner funktioniert nicht

  Alt 21. Nov 2009, 12:22
Warum einfach wenns auch kompliziert geht.

Warum benutzt du Val(edt1.text, kurs, code); ...

1. alte Routine, viel besser ist StrToFloat oder noch besser if not TryStrToFloat(edt1.text, kurs) then !Fehler bei der Eingabe! damit hast du gleich einen Test ob der Benutzer eine Zahl eingegeben hat
2. warum das ganze 3 mal, dann ist in kurs ja nur der Wert vom letzten Textfeld

Dann noch Str(euro/kurs:8:2,s); ,da finde ich die Format Function besser.

Hier, wie ich es machen würde:
Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    edt1: TEdit;
    edt2: TEdit;
    edt3: TEdit;
    lbl1: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    btn1: TButton;
    btn2: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  
implementation

{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
  dollar,
  kurs : Single;
begin
  if TryStrToFloat(edt1.text, dollar) and
     TryStrToFloat(edt2.text, kurs)
  then
  begin
    edt3.text := Format('%f', [dollar / kurs]));
  end
  else
    ShowMessage('keine Zahl eingegeben'); // oder irgend eine ander sinvolle Meldung
end;

procedure TForm1.btn2Click(Sender: TObject);
var
  euro,
  kurs : Single;
begin
  if TryStrToFloat(edt3.text, euro) and
     TryStrToFloat(edt2.text, kurs)
  then
  begin
    edt1.text := Format('%f', [euro * kurs]));
  end
  else
    ShowMessage('keine Zahl eingegeben'); // oder irgend eine ander sinvolle Meldung
end;

end.
Da die beiden Click-Funktionen fast gleich sind, sollte man sie zu einer Funktion zusammendampfen:
Delphi-Quellcode:
procedure TForm1.btnClick(Sender: TObject);
var
  Waehrung,
  kurs : Single;
begin
  if Sender = btn1
  then
    eingabe_ok := TryStrToFloat(edt1.text, Waehrung)
  else
    eingabe_ok := TryStrToFloat(edt3.text, Waehrung);

  if eingabe_ok and
     TryStrToFloat(edt2.text, kurs)
  then
  begin
    if Sender = btn1
    then
      edt1.text := Format('%f', [Waehrung * kurs]))
    else
      edt3.text := Format('%f', [Waehrung / kurs]));
...
  Mit Zitat antworten Zitat