AGB  ·  Datenschutz  ·  Impressum  







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

String Grid speichern nur mit Fehler

Ein Thema von IronBytes · begonnen am 13. Dez 2023 · letzter Beitrag vom 23. Dez 2023
Antwort Antwort
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: String Grid speichern nur mit Fehler

  Alt 19. Dez 2023, 15:45
Für was brauchst du eigentlich das Memo? Zeigst du damit irgendwas an oder ist das nur für diese Routine? Was du damit in deinem Code machst, ist unsinnig und sehr langsam. Dann hast du vermutlich nicht verstanden, was wir mit "Ersetzen von CR/LF" genau meinen. Ich nehme an, du hast das mit dem "#Q#Q" versucht zu steuern oder ist das was anderes? Gehe ich richtig der Annahme, dass du da pro Gridzelle eine Zeile im File willst? Das folgende Beispiel basiert auf diese Annahme.

Du weisst sicher in welchen Spalen dein Memo drin ist oder? Dann musst du diese Spalte speziell behandeln wie im foglenden Beispiel. Beim Speicher musst du genau das umgekehrte machen. Aber achtung dieer Ansatz ist generell sehr schlecht und du wirst grosse Probleme bekommen, wenn das dein Grid mal eine anderen Aufbau bekommen soll. Dann passen deine Dateien nicht mehr zum Grid und sind wertlos.

Hier mal ein Beispiel wie du es sinnvoler machen kannst:
Delphi-Quellcode:
procedure LoadData;
var
  F: TStringList;
  x1,y1,a: Integer;
  strCell: string;
begin
  OpenDialog1.Filter := 'Datenbank (*.dbs)|*.DBS';
  if Opendialog1.Execute then
  begin;
    strV:='';
    a:=-1;
    F := TStringList.Create;
    try
      F.LoadFromFile(opendialog1.FileName);

      for y1 := 1 to 500 do
      begin;
        progressbar1.Position:=y1;

        for x1 := 1 to 70 do
        begin;
          a:=a+1;
          edit28.text:=inttostr(a);

          strCell := F.Strings[a];
          { In Spalte 50 soll das Memo rein. Die Zeilen (Spalten), die wir beim Speichern von #13#10 (CR/LF)
            in '#13#10' (String) umgewandelt haben, müssen nun wieder in korrektet CR/LF zurückgewandelt werden. }

          if x1 = 50 then
            strCell := StringReplace(strCell, '#13#10', #13#10, [rfReplaceAll]);

          stringgrid1.cells[x1,y1]:= strCell;
        end;
      end;
    finally
      F.Free;
    end;
  end;
  progressbar1.Position:=0;
end;

Beim Speichern der Datei müsstest du die mehrzeiligen Zellen (hier im Beispiel Spalte 50) wie folgt umwandeln, damit das Laden richtig funktioniert:
Delphi-Quellcode:
  { Beim Speichern der Spalte 50, müssen Zeilenumbruche (CR/LF) in Stringkonstanten umgewandelt werden }
  strCell := stringgrid1.cells[x1,y1];
  if x1 = 50 then
    strCell := StringReplace(strCell, #13#10, '#13#10', [rfReplaceAll]);
  ...

Geändert von Rolf Frei (19. Dez 2023 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 11:55 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