AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid in INI file schreiben

Ein Thema von rhodan · begonnen am 25. Apr 2014 · letzter Beitrag vom 26. Apr 2014
 
Popov
(Gast)

n/a Beiträge
 
#4

AW: Stringgrid in INI file schreiben

  Alt 25. Apr 2014, 04:28
Solange das StringGrid nur paar Daten enthällt, also nicht zu groß ist, kann man das so lösen:
Delphi-Quellcode:
var
  x, y: Integer;
  IniFile: String;
  Ini: TIniFile;
begin
  IniFile := ChangeFileExt(ParamStr(0), '.ini');
  with StringGrid1 do
  begin
    //Speichern
    Ini := TIniFile.Create(IniFile);
    try
      for x := 0 to ColCount do
        Ini.WriteString('Sel', IntToStr(x), Cols[x].CommaText);
    finally
      Ini.Free;
    end;

    //Löschen
    for x := 0 to ColCount do
      for y := 0 to RowCount do
        Cells[x, y] := '';

    //Lesen
    Ini := TIniFile.Create(IniFile);
    try
      for x := 0 to ColCount do
        Cols[x].CommaText := Ini.ReadString('Sel', IntToStr(x), '');
    finally
      Ini.Free;
    end;
  end;
end;
Rows und Cols sind StringLists, somit kann man leicht CommaText als einzelnen String speichern. In dem Beispiel werden Cols gespeichert, man kann aber auch Rows speichern.

Das Problem ist, dass die Zeilenlänge nur knapp über 2000 Zeichen lang sein kann, danach wird sie umbrochen, womit es dann beim Einlesen wieder Probleme gibt. Wenn die Summe alle Zellen einer Spalte aber darunter bleibt, sollte das kein Problem bilden.

//EDIT:

Oder man macht es pro Zelle:
Delphi-Quellcode:
var
  x, y, k: Integer;
  IniFile, s, xs, ys: String;
  sl: TStringList;
  Ini: TIniFile;
begin
  IniFile := ChangeFileExt(ParamStr(0), '.ini');
  with StringGrid1 do
  begin
    Ini := TIniFile.Create(IniFile);
    try
      k := 0;
      for x := 0 to ColCount do
        for y := 0 to RowCount do
        begin
          Inc(k);
          Ini.WriteString('Sel2', IntToStr(k), Format('%d:%d:%s', [x, y, Cells[x, y]]));
        end;
    finally
      Ini.Free;
    end;

    for x := 0 to ColCount do
      for y := 0 to RowCount do
        Cells[x, y] := '';

    Ini := TIniFile.Create(IniFile);
    try
      sl := TStringList.Create;
      try
        Ini.ReadSection('Sel2', sl);

        for k := 0 to sl.Count - 1 do
        begin
          s := Ini.ReadString('Sel2', sl[k], '');
          xs := System.Copy(s, 1, Pos(':', s) - 1);
          System.Delete(s, 1, Pos(':', s));
          ys := System.Copy(s, 1, Pos(':', s) - 1);
          System.Delete(s, 1, Pos(':', s));
          Cells[StrToInt(xs), StrToInt(ys)] := s;
        end;
      finally
        sl.Free;
      end; {}
    finally
      Ini.Free;
    end;
  end;
end;

Geändert von Popov (25. Apr 2014 um 04:43 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 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