Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Edit-Ínhalte kumulieren (https://www.delphipraxis.net/1887-edit-%EDnhalte-kumulieren.html)

Privateer3000 29. Dez 2002 13:49


Edit-Ínhalte kumulieren
 
Hi LEuts,

ich möchte den Inhalt von Edits (Bsp 1-24) die Fließkommazahlen,wie 2,50 zusammenaddieren.

Wie stellt man das an?!

Chewie 29. Dez 2002 14:02

Wenn du die Editfelder dynamisch erzeugst, kannst du sie in ein Array packen und dann in einer Schleife die Werte addieren:

Delphi-Quellcode:
var
  Edits: Array[1..24] of TEdit;
  a: Integer;
  wert: Real;
begin
  //[..Editfelder erzeugen..]
  wert := 0;
  for a := 1 to Length(Edits) do
  begin
    wert := wert + StrtoInt(Edits[a]);
  end;
end;
Falls du sie in der IDE erzeugst und sie Edit1..24 durchnumerierst, kannst du so die Werte addieren:
Delphi-Quellcode:
var
  a: Integer;
  wert: Real;
begin
  wert := 0;
  for a := 1 to 24 do
  begin
    wert := wert + Strtoint(FindComponent('Edit' + InttoStr(a)));
  end;
end;

sakura 29. Dez 2002 14:12

@Chewie: Man lese genau: Fließkommazahlen

@Privateer3000: Anstatt StrToInt nimmst Du StrToFloat

Privateer3000 29. Dez 2002 14:18

ja, sakura
genau das ist mein Problem.
Ich kenn leider noch nicht alle Zahlentypen.
Kämpfe mit inkompatiblen Typen.

mon siehts so aus:
Code:
procedure TForm1.sumbuttonClick(Sender: TObject);
var
i: integer;
puff: Real;
begin
puff:=0;
for i:= 1 to 34 do
begin
puff:=puff+StrToFloat(FindComponent('Edit'+IntToStr(i)));
end;
end;
keine Chance

sakura 29. Dez 2002 14:22

Code:
procedure TForm1.sumbuttonClick(Sender: TObject);
var
i: integer;
puff: Real;
begin
puff:=0;
for i:= 1 to 34 do
begin
puff:=puff+StrToFloat([color=#f60000]TEdit([/color]FindComponent('Edit'+IntToStr(i))[color=#ff0000]).Text[/color]);
end;
end;
Das sollte Dir weiterhelfen.

Chewie 29. Dez 2002 14:23

Zitat:

Zitat von sakura
@Chewie: Man lese genau: Fließkommazahlen

Ups, ich hab wohl in letzter Zeit zu oft StrtoInt benutzt :oops:

Privateer3000 29. Dez 2002 14:30

danke Sakura &Chewie
dein Rotmarkietes war was mir noch zu schaffen machte,
der Inhalt der Edit musste ja angesprochen werden...
Nur vollstandikeithalber
Code:
puff:=StrToFloat(FindComponent('Edit'+IntToStr(i)).text as TEdit);
müsste doch auch gehen?

sakura 29. Dez 2002 14:35

Nein, aber so
Code:
puff:=StrToFloat([color=#ff0000]([/color]FindComponent('Edit'+IntToStr(i)).text as TEdit[color=#ff0000]).Text[/color]);

Privateer3000 29. Dez 2002 14:37

warum berechnet er 2,50 + 1,30 = 3,7999?
Theoretisch doch garnicht möglich...
da gibts doch nichts runden normalerweise...
wenn doch die ist die syntax?
Und er soll statt 2,5 2,50 anzeigen, also Nachkommastellen

Privateer3000 29. Dez 2002 14:37

hat sich erledigt...habe Typ auf curreny gestellt

Privateer3000 29. Dez 2002 14:48

ich nochmal

Code:
procedure TForm1.sumbuttonClick(Sender: TObject);
var
i: integer;
puff: Currency;
begin
puff:=0;
for i:= 1 to 34 do
begin
puff:=puff+StrToFloat(TEdit(FindComponent('Edit'+IntToStr(i))).text);
sumedit.text:= [color=#ff0000]FloatToStrF(puff; Format: currency;2;digits:2);[/color]end;
end;
irgendwie gehts net...die Umstellung ..Fehler nich wirklich genügend Parameter.Leider ist die OH nicht richtig dokumentiert.

[edit=Sakura]CODE in PRE Tags geändert[/edit]

sakura 29. Dez 2002 14:59

So sollte es bgehen
Delphi-Quellcode:
FloatToStrF(puff, ffCurrency, 1, 2);

Privateer3000 29. Dez 2002 15:05

Danke Kirschblüte...
damit kann ich was anfangen,ne Menge sogar
für andere Sachen, wo ich es mir echt schwer gemacht habe :D

Privateer3000 29. Dez 2002 18:16

soweit geht alles...
Code:
var
i: integer;
puff: Currency;
begin
puff:=0;
for i:= 1 to 34 do
begin
puff:=puff+StrToFloat(TEdit(FindComponent('Edit'+IntToStr(i))).text);
sumedit.text:=FloatToStrF(puff, ffCurrency, 1, 2);
end;
end;
jetzt soll er vorher prüfen ob der Inhalt nicht '0,00' ist.
Denn ich will jetzt einen Durchschnittwert ermittel.
Dazu brauch ich ja die Anzahl der Edits deren Wert grösser als 0 ist.
Ich habs mit Vergleichoperatoren wie <> 0 probiert.
Oder muss ich 0,00 angeben?
Ich komm nicht weiter...

Privateer3000 29. Dez 2002 19:20

auch wenns euch nervt:
ich habs...bin stolz auf mich

Code:
procedure TForm1.Timer35Timer(Sender: TObject);
var
x: integer;
Anzahl: currency;
begin
Anzahlsicht:=0;
puff:=0;
for x:= 1 to 34 do
begin
Anzahl:=StrToFloat(TEdit(FindComponent('Edit'+IntToStr(x))).Text);
if Anzahl <> StrToFloat('0,00') then
inc(Anzahlsicht);
Anzahllabel.Caption:=IntToStr(Anzahlsicht);
puff:=puff+StrToFloat(TEdit(FindComponent('Edit'+IntToStr(x))).text);
if Anzahlsicht <> 0 then
Durch:=puff/Anzahlsicht
else
Durch:=puff;
sumedit.text:=FloatToStrF(Durch, ffCurrency, 3, 2);
end;
end;
:bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 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-2025 by Thomas Breitkreuz