Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#7

AW: Werte von stringgrid zellen zusammenrechnen

  Alt 2. Mai 2014, 22:17
Es ist keine gute Idee mit StrToFloatDif zu arbeiten. Damit vermeidest du zwar eine Fehlermeldung, aber die Fehlermeldung hat einen Sinn. Sie warnt davor wenn ein Fehler auftritt. Schreibt einer in Spalte Robin den Wert "321.45", bekommst du den Fehler gar nicht mit. Der Wert wird in StrToFloatDif genullt und taucht in der Statistik nicht auf. Wenn du nicht die Standardfehlermeldung haben willst, kannst du eine eigene schreiben. Hier zwei Beispiele:
Delphi-Quellcode:
function StrToFloatSG(const S: String; ACol, ARow: Integer): Extended; overload;
begin
  if StrToFloatDef(S, 0) <> StrToFloatDef(S, 1) then
    raise Exception.CreateFmt('Ungültiger Wert in Zelle [%d.%d]', [ACol, ARow]);

  Result := StrToFloat(S);
end;

function StrToFloatSG(const S, SCol, SRow: String): Extended; overload;
begin
  if StrToFloatDef(S, 0) <> StrToFloatDef(S, 1) then
    raise Exception.CreateFmt('Ungültiger Wert in Spalte "%s" und Zelle "%s"', [SCol, SRow]);

  Result := StrToFloat(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  z: Extended;
  i: integer;
begin
  z := 0;
  for i := 0 to Grid.ColCount-1 do
  begin
    //z := z + strtofloatdef(Grid.Cells[i,1], 1);
    //z := z + StrToFloatSG(Grid.Cells[i,1], 1, i);
    z := z + StrToFloatSG(Grid.Cells[i,1], Grid.Cells[1, 0], Grid.Cells[0, 1]);
  end;
  edit1.text:= floattostr(z);
end;
Die erste gibt die Zeile und Spalte als Wert zurück, bei der Zweiten kannst du die Überschriften angeben. Und lass dich von der bösen Fehlermeldung in der Entwicklungsumgebung nicht abschrecken. Stäter, aus der Exe heraus, sieht die harmloser aus.
  Mit Zitat antworten Zitat