Einzelnen Beitrag anzeigen

Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#1

Probleme mit StringGrid speichern

  Alt 27. Nov 2007, 13:43
Hallo

ich habe mal wieder ein Problem mit dem Speichern eines StringGrids und zwar geht es zuerst um eine Prozedur die Marabu mal in einem Thread gepostet hat.

Hier mal der Link .

Und zwar werden mir bei 3 Stellen Fehlermeldungen angezeigt, die habe ich einfach mal kommentiert.

Die fehlermeldung lautet bei allen drei: [Fehler] UnStringGrid.pas(66): Es gibt keine überladene Version von 'IfThen', die man mit diesen Argumenten aufrufen kann.

Delphi-Quellcode:
type
  TSaveOption = (soSaveCols, soExcludeFixed);
  TSaveOptions = set of TSaveOption;

procedure SaveGrid(sg: TStringGrid; s: TStream; so: TSaveOptions = []);
var
  iLow, iHigh, i: Integer;
  ss: TStringStream;
  bSaveCols, bExcludeFixed: Boolean;
begin
  ss := TStringStream.Create('');
  with sg do
  begin
    bSaveCols := soSaveCols in so;
    bExcludeFixed := soExcludeFixed in so;
    if bSaveCols then
    begin
      iLow := IfThen(bExcludeFixed, FixedCols); //Fehlermeldung
      iHigh := Pred(ColCount); //Fehlermedung
    end else
    begin
      iLow := IfThen(bExcludeFixed, FixedRows); //Fehlermeldung
      iHigh := Pred(RowCount);
    end;
    for i := iLow to iHigh do
    begin
      ss.Size := 0;
      if bSaveCols
        then ss.WriteString(Cols[i].CommaText + sLineBreak)
        else ss.WriteString(Rows[i].CommaText + sLineBreak);
      ss.Position := 0;
      s.CopyFrom(ss, ss.Size);
    end;
  end;
  ss.Free;
end;
Wenn ich die Zeilen in denen die Fehlermeldungen vorkommen auskommentiere, startet das Programm ganz normal. Allerdings speichert es dann die FixedRows doch mit was ja eigentlich, durch eine Anweisung die später im Programm kommt sich aber darauf bezieht, verhindert werden soll.

Hier der angesprochene Code Ausschnitt:
Delphi-Quellcode:
procedure TForm1.Speichern1Click(Sender: TObject);
var
  s: TStream;
  fn: TFileName;
begin
  fn := ChangeFileExt(ParamStr(0), '.txt');
  s := TFileStream.Create(fn, fmCreate);

  savedialog1.execute;
   SaveGrid(StringGrid1, s);
  s.Free;
So das wär dann Problem Nr1 aber ich verzweifle zZ. trotzdem noch an einem anderen Teil und zwar handelt sich darum wie das StringGrid in der Datei abgespeichert wird, hier mal ein Beispiel um es zu verdeutlichen:

11
7
,KundenNr,Name,Vorname,Straße,PLZ,Ort
1,52323,Müller,Hans,"Kühle Bäume 12",13186,Jesberg
2,52266,Lang,Susanne,"Am Rödel 21",52131,Hundshausen
3,85902,Willhelm,Jörg,"Roter Berg 7",63671,Mengsberg
4,36347,Nebel,Maren,"Schulstraße 14",48920,Zimmersrode
5,49403,Bielig,Klaus,"Wiesenwogen 11",49783,Römersberg
6,52531,Kessler,Tobias,"Hauptstraße 40",39202,Jesberg
7,32360,Pitz,Fabian,"Am Brunnen 18",349492,Sachsenhausen
8,48292,Bos,Samuel,"Spiesergarten 6",93921,Münchhausen
9,49202,Usbek,Natalia,"Hauerweg 26",38392,Gilsa
10,49202,Geißel,Theresa,"Steinweg 15",39382,Bischhausen
,,,,,,


So, das Problem ist das er mir die Zeilen- und Spaltenanzahl meines StringGrids mit speichert was zu einem Problem wird wenn ich die Datei dann wieder öffnen möchte :/ , kann ich vielleicht bewirken das wenn das Programm das StringGrid speichert das die beiden Zahlen gleich wieder gelöscht werden, oder kann man das direkt im Keim ersticken? Wenn ja wie kann ich das anstellen?

Das zweite mehr oder weniger große Problem sind die "" um die Straßennamen und Hausnummern welche dann auch wieder in das StringGrid übertragen werden wenn ich die Datei öffne, es ist zwar jetzt nicht der Weltuntergang aber ohne siehts dann scho besser aus, hat jemand eine Idee?


Schonmal danke für alle Antworten

mfg
Alex
  Mit Zitat antworten Zitat