aus TStringGrid in Zwischenablage kopieren



  • wie kann ich aus dem Stringgrid die ausgewählten Zellen in die Zwischenablage kopieren?



  • Hallo,

    Du kopierst den Inhalt aller selektierten Zellen in einen temporären Ansistring und packst den dann mit

    Clipboard()->SetTextBuf(temp.c_str());
    

    in die Zwischenablage.
    Die einzelnen Zellstrings kannst du ja untereinander mit Tabs (Spalten) und Newlines (Zeilen) trennen.



  • ok. da hab ich gleich eine neue Frage. Wie wählt man einzelne Zeilen aus bzw alles?



  • Mit der Maus klicken und ziehen? oder wie meinst du das? 😕
    Für Spezielbehandlungen, wie Klick auf den Spalten- oder Zeilenkopf, musst du halt was in die OnClick-Funktion schreiben. Du brauchst doch dort nur abzufragen, wohin der Nutzer geklickt hat und dann durch setzten von Selection die Auswahl festlegen.



  • das Auswählen hab ich mit der Borland Hilfe rausbekommen. Habs so gemacht:

    // wählt alle Zellen aus:
    TGridRect auswahl;
    auswahl.Top = 1;
    auswahl.Bottom = index;
    auswahl.Left = 0;
    auswahl.Right = 9;
    grid->Selection = auswahl;
    

    wie speicher ich nun die ausgewählten Daten in den Zellen in einen String? Gibts da vll. eine fertige Methode?



  • Nein, da gibt es keine fertige Methode.
    Du kannst doch mit TStringGrid::Cells[][] auf die einzelnen Zellen zugreifen. Da holst du dann eben deinen String raus.
    Selection liefert dir doch nur die Zeilen und Spalten des selektierten Bereiches.



  • Hallo

    Nein, dafür gibt es keine fertige Methode. Schreib dir selber eine, dafür brauchst du zwei for-Schleifen und die String-Verkettung.

    bis bald
    akari



  • hab ich mir fast gedacht 🙂
    Hier mal mein Code. Da ich in dem StringGrid bei Options GoRowSelect auf true habe und zeilenweise auswähle, habe ich in der inneren Schleife den Index (Spalten) festgelegt. (hier 9 Spalten).

    void __fastcall TfrmMain::InZwschenablagekopieren1Click(TObject *Sender)
    {
       AnsiString sAuswahl = "";
       int i, j;
       for (i=grid->Selection.Top; i<=grid->Selection.Bottom; i++){
          for (j=0; j<=9; j++) {
             sAuswahl += grid->Cells[j][i] + "\t";
          }
          sAuswahl += "\n"; //Umbruch hier
       }
       Clipboard()->SetTextBuf(sAuswahl.c_str());
    }
    

    Das funktioniert so weit. Aber, kopiere ich den Inhalt in eine Textdatei (Editor von Windows) wird nicht umgebrochen. Hier wird ein Kästchen angezeigt. Wie kann ich hier einen Umbruch erzeugen?



  • Hallo

    Unter Windows ist der korrekte Zeilenumbruch "\r\n"

    bis bald
    akari


Anmelden zum Antworten