Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi edit inhalte addieren (https://www.delphipraxis.net/107061-edit-inhalte-addieren.html)

Bx3 21. Jan 2008 17:37


edit inhalte addieren
 
moin,
also folgende frage:
hab nen formular wo der benutzer in 8 verschiedene
edit's numerische werte eingeben soll
da es ziemlich sch***** aussieht und man es niemanden zumuten kann wenn man es so schreibt:
Delphi-Quellcode:
.
.
var x:real;
begin
 x:=strtofloat(edit1.text) + strtofloat(edit2.text) + strtofloat(edit1.text)...

end;
wollte ich es so machen:
Delphi-Quellcode:
.
.
var x:real;
    i:byte;
begin
 For i:=1 to 8 do
  x:=x + strtofloat(edit[i].text);
.
.
end;
hmm, is aber nich^^ - unzwar liegt das am edit[i].text (also am 'i'),
hat jmd nen plan wie ich das schön in na schleife packen kann???

=> die werte sollen addiert werden, wie man glaub ich sieht^^

mkinzler 21. Jan 2008 17:39

Re: edit inhalte addieren
 
Delphi-Quellcode:
x := x + strtofloat( (Findcomponent( 'Edit' + intToStr(i)) as TEdit).text);

semo 21. Jan 2008 18:24

Re: edit inhalte addieren
 
anstatt strtofloat verwende am besten strtofloatdef um fehler abzufangen.

cware 21. Jan 2008 21:31

Re: edit inhalte addieren
 
StrToFloatDef() um Fehler abzufangen? wohl eher, um sie anstandslos zu akzeptieren und so ziemlich jede Möglichkeit zu verlieren, Fehler zu tracken.


cheers...

marabu 22. Jan 2008 06:40

Re: edit inhalte addieren
 
Moin,

wenn man die Edits gleich am Anfang einsammelt, dann muss FindComponent() nicht so häufig aufgerufen werden:

Delphi-Quellcode:
uses
  { ... ,} Contnrs;

type
  TDemoForm = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure EditChange(Sender: TObject);
  private
    EditList: TObjectList;
    EditSum: Double;
  end;

{ ... }

procedure TDemoForm.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  EditList := TObjectList.Create;
  for i := 1 to 3 do
    EditList.Add(FindComponent(Format('Edit%d', [i])));
end;

procedure TDemoForm.EditChange(Sender: TObject);
var
  i: Integer;
  dValue: Double;
begin
  EditSum := 0;
  for i := 0 to Pred(EditList.Count) do
    if TryStrToFloat((EditList[i] as TEdit).Text, dValue) then
      EditSum := EditSum + dValue;
  // Caption := FloatToStr(EditSum);
end;
Grüße vom marabu

cware 22. Jan 2008 08:54

Re: edit inhalte addieren
 
hier entsteht durch das TryStrToFloat() genau das gleiche Problem wie mit StrToFloatDef()...

wenn, dann doch bitte sowas wie:
Delphi-Quellcode:
for i := 0 to Pred(EditList.Count) do
begin
  if TryStrToFloat((EditList[i] as TEdit).Text, dValue) then
    EditSum := EditSum + dValue;
  else
  begin
    // noch besser ist übrigens eine status-zeile
    // modale fenster werden heutzutage immer
    // unattraktiver
    MessageDlg('Bitte einen korrekten Wert in ' + (EditList[i] as TEdit).Name + ' eintragen.',
               mtError, [mbOK], 0);

    Exit;
  end;
end;

cheers...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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