Einzelnen Beitrag anzeigen

punker-lili

Registriert seit: 22. Apr 2007
91 Beiträge
 
#1

problem beim zeichnen nach öffnen der datei

  Alt 3. Jun 2007, 17:26
Ich habe ein Programm geschrieben, welches eine Sinuskurve zeichnet.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  ko:=0;
  repeat
    with image1.canvas do begin
      Pen.Width:=1;
      Pen.Color:=clwhite;
      moveto(0,ko);
      Lineto(image1.Width,ko);
    end;
    ko:=ko+1;
  until ko=image1.Height;
  for i:=1 to 7 do
    if StringGrid1.Cells[1,i]='then
       if i=6 then
        StringGrid1.Cells[1,i]:='N'
       else StringGrid1.Cells[1,i]:='0';


  ks:=StringGrid1.Cells[1,1];
  k:=strtofloat(ks);
  k:=k;
  ls:=StringGrid1.Cells[1,2];
  l:=strtofloat(ls);
  l:=l;
  ms:=StringGrid1.Cells[1,3];
  m:=strtofloat(ms);
  m:=m;
  ns:=StringGrid1.Cells[1,4];
  n:=strtofloat(ns);
  n:=n*10;
  os:=StringGrid1.Cells[1,5];
  o:=strtofloat(os);
  with image1.canvas do begin
    pen.Color:=clblack;
    MoveTo(0,image1.Height div 2);
    LineTo(image1.Width,image1.Height div 2);
    MoveTo(33,0);
    LineTo(33,image1.Height);
  end;
  x:=1;
  a:=image1.Height div 2;
  repeat
    with image1.canvas do begin
      moveto (x,a);
      y:=(10*l*SIN(0.1*k*x+m))-n+image1.Height div 2;
      x:=x+1;
      a:=trunc(y);
      LineTo(x,a);
    end;

  until x=500;
  image1.Canvas.MoveTo(0,image1.Height div 2);
  image1.Canvas.lineto(image1.Width,image1.Height div 2);
  s:=floattostr(pi);
  StringGrid1.Cells[1,5]:=s;


end;
Das ist bloß eingrober entwurf...
Nun habe ich passend dazu ein Speichern und Öffnen Funktion geschrieben, welche den Inhalt des Stringgrids speichern bzw.öffnen soll.
Delphi-Quellcode:
procedure TForm1.ffnen1Click(Sender: TObject);
var
  F: TStringList;
  i,j: Integer;
  h: string;
begin
  if not opendialog1.execute then exit;
  F := TStringList.Create;
  with StringGrid1 do
   try
   begin
      F.LoadFromFile(OpenDialog1.FileName);
      RowCount := StrToInt(F[0]); // Zeilen
      ColCount := StrToInt(F[1]); // Spalten
      Edit1.Text := F[1];
      Edit2.Text := F[0];
      for i := 0 to (RowCount - 1) do // Zeilen M1
        Rows[i].CommaText := F[i+2];
   end;
    finally
        FreeAndNil(F);
end;
end;
procedure TForm1.Speichern1Click(Sender: TObject);
var F: TStringList; // File of StringList
    i: Integer;
begin
  if not saveDialog1.execute then exit;
  F := TStringList.Create; // Objekt erzeugen
        try
          with Form1.StringGrid1 do
          begin

              F.Add(IntToStr(RowCount)); // Zeilenzahl M1 merken
              F.Add(IntToStr(ColCount)); // Spaltenzahl M1 merken
              for i := 0 to (RowCount - 1) do // M1 zeilenweise
                F.Add(Rows[i].CommaText); // Zeile als ein durch , getr.Str.
              F.SaveToFile(savedialog1.FileName); // Str.List speichern
              sicher:=true;
          end;
  finally
    FreeAndNil(F)

end;
end;
wenn ich nun den Inhalt des Stringgrids über diese Funktion speichere und dann wieder öffne, zeigt er mir zwar die gepeicherten Werte im StringGrid an, aber wenn er die dazugehörige Funktion zeichnen soll kommt folgende Fehlermeldung "'' is not a valid floating point value".
Wie kann ich das beheben?
Wo liegt der Fehler?

Danke schonal im vorraus...Anna
  Mit Zitat antworten Zitat