hi
also, ich möchte mehrzeilige string-grid felder haben....
das habe ich grundsätzlich hiermit gelöst:
(Danke
DP )
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?