Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi mal wieder: zeilenumbrüche im stringgrid.... (https://www.delphipraxis.net/33591-mal-wieder-zeilenumbrueche-im-stringgrid.html)

glkgereon 9. Nov 2004 15:55


mal wieder: zeilenumbrüche im stringgrid....
 
hi

also, ich möchte mehrzeilige string-grid felder haben....

das habe ich grundsätzlich hiermit gelöst:
(Danke DP :wink: )

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
Var
  CrLfPos, PrevPos, i: Integer;
  SL: TStrings;
Begin
  With Sender As TStringGrid Do
  Begin
    If aCol < FixedCols Then Exit;
    If aRow < FixedRows Then Exit;
    PrevPos := 1;
    CrLfPos := PosEx(#13#10, Cells[aCol, aRow], PrevPos);
    If CrLfPos > 0 Then
    Begin
      SL := TStringList.Create;
      Try
        While CrLfPos > 0 Do
        Begin
          SL.Add(Copy(Cells[aCol, aRow], PrevPos, CrLfPos - PrevPos));
          PrevPos := CrLfPos + 2;
          CrLfPos := PosEx(#13#10, Cells[aCol, aRow], PrevPos);
        End;
        If SL.Count > 0 Then
          With Canvas Do
          Begin
            SL.Add(Copy(Cells[aCol, aRow], PrevPos, Length(Cells[aCol, aRow])));
            FillRect(Rect);
            For i := 0 To pred(SL.Count) Do
              TextOut(Rect.Left + 2, Rect.Top + 2 + ((-Font.Height + 2) * i), Sl[i]);
          End;
      Finally
        FreeAndNil(SL);
      End;
    End;
  End;
End;
so, nun gibt es aber wegen dieser zeilenumbrüche probleme beim speichern und laden...

die mache ich so:
(von den schweizern glaub ich)
Delphi-Quellcode:
procedure TForm1.SaveStringGridToFile(StringGrid: TStringGrid; const FileName: String);
var F: TStringList;
    i: Integer;
begin
  F := TStringList.Create;
  try
    F.Add(IntToStr(StringGrid.RowCount));
    F.Add(IntToStr(StringGrid.ColCount));
    for i := 0 to (StringGrid.RowCount - 1) do
      F.Add(StringGrid.Rows[i].CommaText);
    F.SaveToFile(FileName);
  finally
    F.Free;
  end;
end;

procedure TForm1.LoadStringGridFromFile(StringGrid: TStringGrid; const FileName: String);
var F: TStringList;
    i: Integer;
begin
  F := TStringList.Create;
  try
    F.LoadFromFile(FileName);
    StringGrid.RowCount := StrToInt(F[0]);
    StringGrid.ColCount := StrToInt(F[1]);
    for i := 0 to (StringGrid.RowCount - 1) do
      StringGrid.Rows[i].CommaText := F[i + 2];
  finally
    F.Free;
  end;
end;
nur wegen der zeilenumbrüche sieht die ladne procedure die zellen als neue zellen an, und der ganze schmarrn verschiebt sich um eine zeile...

kann ich das unterbinden?

shmia 9. Nov 2004 16:24

Re: mal wieder: zeilenumbrüche im stringgrid....
 
Die Zelleninhalte müssen kodiert gespeichert werden und beim Laden wieder dekodiert werden.
Carriage-Return+Linefeed innerhalb eines Strings könnte man so speichern:
Code:
das ist Zeile 1/n/rdas ist Zeile 2
In der Unit JclStrings gibt es die Funktionen StrEscapedToString und StrStringToEscaped; damit ist das kodieren und dekodieren kurz und schmerzlos.
Siehe Jedi Code Library: http://homepages.borland.com/jedi/jcl/

glkgereon 9. Nov 2004 19:31

Re: mal wieder: zeilenumbrüche im stringgrid....
 
THX...die functions aus JclStrings funzen

I :love: JCL..... :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.

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