Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wertübergbae für einen Stringgrid (https://www.delphipraxis.net/51197-wertuebergbae-fuer-einen-stringgrid.html)

Technikus 8. Aug 2005 08:34


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;

r2c2 8. Aug 2005 09:37

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:

marabu 8. Aug 2005 09:40

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:
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.
Grüße vom marabu

r2c2 8. Aug 2005 09:57

Re: Wertübergbae für einen Stringgrid
 
Zitat:

Zitat von marabu
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.

Hm...jetzt wo dus sagst. Da haben wir ja schon die Fehlerstelle. Da Zeilen und Spalten vertauscht waren hast du auf leere Zellen zugregriffen...
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

Technikus 8. Aug 2005 10:42

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

turboPASCAL 8. Aug 2005 10:51

Re: Wertübergbae für einen Stringgrid
 
Zitat:

Zitat von Technikus
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];

Was Funktioniert nicht ?


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;

Technikus 8. Aug 2005 10:59

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

marabu 8. Aug 2005 11:10

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

Technikus 8. Aug 2005 11:31

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

Aenogym 8. Aug 2005 11:37

Re: Wertübergbae für einen Stringgrid
 
Zitat:

Zitat von Technikus
Wenn ja (ich habe das in der eurigen Form noch nicht gemacht) wie stelle ich das an,dass der Text eingerahmt ist?

hallo technikus,

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 02:32 Uhr.
Seite 1 von 3  1 23      

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