![]() |
Wertübergbae für einen Stringgrid
Hallo!
Ich bin Anfänger im Programmieren mit Delphi 2005 und bitte um Hilfe für ein Stringgrid Problem. Ich möchte die in einem Stringgrid1 erfassten 9 Messwerte einer Solarzelle für Spannung und Stromstärke erfassen. Diese sollen für die Berechnung der Leistung an einen Stringggrid2 übergeben werden. Als Problemmeldung kommt beim Probelauf: '"ist kein gültiger Gleitkommawert. Vielleicht weiß jemand Rat. Danke im voraus. Mein Quellcode sieht so aus: [delphi]procedure TForm1.Button4_Berechne_PClick(Sender: TObject); var j: smallInt;{Lauf-Variablen zum Berechnen} leistung: double; u,i: array [1..9] of double; begin for j:=1 to 9 do begin u[j]:=StrToFloat(StringGrid1.Cells[1,j]); i[j]:=StrToFloat(StringGrid1.Cells[2,j]); end; for j:=1 to 9 do with StringGrid2 do {Ausgabe der berechneten Leistung} begin Cells[0,j]:= FloatToStr(leistung); leistung:= u[j]* i[j]; end; end; |
Re: Wertübergbae für einen Stringgrid
Hallo Technikus :hi:,
IMHO liegt dein problem darin, dass du versuchst einen Leerstring in eine Fließkommazahl umzuwandeln(StrToFloat). Das funktioniert nicht. Ich nehme an in deinem StringGrid steht in einer Zenne nix und da versuchst du zu lesen. Setz mal n Breakpoint und steppe mit [F8] durch um die Zelle/die Variable zu finden. mfg Christian Nachtrag: Fast hätte ich es vergessen: Herzlich Willkommen in der DP! :dp: :bounce1: :coder: |
Re: Wertübergbae für einen Stringgrid
Hallo Technikus,
herzlich willkommen in der Delphi-PRAXiS. Du hast beim Zugriff auf Cells den Spalten- und ZeileIndex vertauscht. Und die Berechnung solltest du vor der Ausgabe erledigen.
Delphi-Quellcode:
Grüße vom marabu
procedure TForm1.CalcButtonClick(Sender: TObject);
var i: integer; // Laufvariable dLeistung: double; aVolt, aAmpere: array [1..9] of double; begin for i := 1 to 9 do begin aVolt[i] := StrToFloat(sgMesswerte.Cells[i, 1]); aAmpere[i] := StrToFloat(sgMesswerte.Cells[i, 2]); end; { Ausgabe der berechneten Leistung } for i := 1 to 9 do with sgErgebnisse do begin dLeistung := aVolt[i] * aAmpere[i]; Cells[i, 0]:= FloatToStr(dLeistung); end; end; end. |
Re: Wertübergbae für einen Stringgrid
Zitat:
Ich muss zugeben ich war zu faul mich durch den Code zu quälen. @Technikus: Zur besseren Lesbarkeit verwende nächstes Mal bitte auch einen abschließenden delphi-Tag. Is für mich zwar nur ne unzureichende Entschuldigung, dass ich mich nicht eingehender damit beschäftigt habe, aber besser als nix... :mrgreen: mfg Christian |
Re: Wertübergbae für einen Stringgrid
Hallo Christian, hallo marabu
Danke für die Willkommensgrüße und die Hilfe. Diesen Satz verstehe ich nicht. "Setz mal n Breakpoint und steppe mit [F8] durch um die Zelle/die Variable zu finden." Ich habe alle Zellen mit Zahlen gefüllt. Im Quelltext von marabu sind doch die Spalte und Zeile des Stringgrid vertauscht. Habe ich also probiert, funktioniert aber nicht. Im Buch steht geschrieben, dass im StringGrid die Spalte zuerst und dann die Zeile geschrieben wird. also StringGrid.Cells[spalte,zeile]; Die Berechnungsvorschrift habe ich vorgezogen. Gruß Technikus |
Re: Wertübergbae für einen Stringgrid
Zitat:
Delphi-Quellcode:
var
s: string; f: real; begin f:= StrToFloat('1.5'); // <-- kein gültiger Gleitkommawert -<<< f:= StrToFloat('1,5'); // <---<<< OK s:= FloatToStr(f); end; |
Re: Wertübergbae für einen Stringgrid
Halle turboPASCAL,
ich habe zur Probe nur ganze Zahlen eingesetzt und erhalte die Meldung "ist kein gültiger Gleitkommawert. Gruß Technikus |
Re: Wertübergbae für einen Stringgrid
Hallo Technikus,
zuerst der Spalten-, dann der Zeilenindex - so ist es korrekt. Wenn deine Messwerte in Spalten angeordnet sind, dann hattest du den Index nicht vertauscht - sorry. Aber beachte, dass die Indexwerte bei 0 beginnen und eventuelle Zeilen- und Spaltenüberschriften (FixedCols, FixedRows) von dir berücksichtigt werden müssen. Wenn du also 9 Werte und keine Spaltenüberschrift hast, dann läuft dein Zeilenindex von 0 bis 8. Der Zugriff mit 9 liefert dann den von dir beschriebenen Fehler. marabu |
Re: Wertübergbae für einen Stringgrid
Hallo marabu,
ich habe eine Kopfzeile und eine Nummerierungszeile programmiert. Daher habe ich das array von 1-9 gesetzt. Sollte ich vielleicht den kompletten Quelltext nochmal anhängen? Wenn ja (ich habe das in der eurigen Form noch nicht gemacht) wie stelle ich das an,dass der Text eingerahmt ist? Gruß Technikus |
Re: Wertübergbae für einen Stringgrid
Zitat:
einfach den quellcode in die delphitags einschließen: [ delphi]showmessage('Hallo');[/ delphi] (dabei die leerzeichen weglassen) aenogym |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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