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