Hallo,
man muss unterscheiden, ob man fixe Zeilen oder Spalten im Grid hat, und ob diese ggf. mit ins Memo übernommen werden sollen, oder nicht.
Ein Weg (kommasepariert, Zeile für Zeile) wäre bspw. folgender:
Delphi-Quellcode:
Procedure Grid2Memo(oGrid: TStringGrid; oMemo: TMemo; bFixedCells: Boolean = False);
Var
i, j: Integer;
sTemp: String;
Begin
sTemp := '';
//wenn fixe Zeilen oder Spalten
If ((oGrid.FixedCols > 0) Or (oGrid.FixedRows > 0)) And Not bFixedCells Then Begin
//Zelle für Zelle durchgehen und fixe Zellen ignorieren
For i := oGrid.FixedRows To oGrid.RowCount - 1 Do Begin
sTemp := '';
For j := oGrid.FixedCols To oGrid.ColCount - 1 Do Begin
sTemp := sTemp + IntToStr(j) + ':' + IntToStr(i) + ','
End;
//letzten Separator löschen
Delete(sTemp, Length(sTemp), 1);
//Zeile dem Memo hinzufügen
oMemo.Lines.Add(sTemp);
End;
//keine fixen Spalten oder Zeilen oder wenn diese explizit mit übertragen werden sollen (bFixedCells)
End Else Begin
//Zeile für Zeile durchgehen
For i := oGrid.FixedRows To oGrid.RowCount - 1 Do Begin
//und komplett ans Memo übergeben (z.B. kommasepariert)
oMemo.Lines.Add(oGrid.Rows[i].CommaText);
End;
End;
End;
Aufruf für Übertrag mit fixen Zeilen/Spalten (unabhängig davon, ob vorhanden oder nicht)
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
Grid2Memo(StringGrid1, Memo1, True);
End;
Aufruf für Übertrag ohne fixe Zeilen/Spalten (unabhängig davon, ob vorhanden oder nicht)
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
Grid2Memo(StringGrid1, Memo1, False); //'False' kann hier auch weggelassen werden, da Defaultwert
End;