Einzelnen Beitrag anzeigen

s-off
(Gast)

n/a Beiträge
 
#2

Re: den Inhalt eines StringGrid in einem Memo speichern?

  Alt 30. Jan 2008, 17:33
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;
  Mit Zitat antworten Zitat