Drag and Drop - Listbox zu RichEdit
-
Hallo,
bin gerade dabei ein Drag&Drop von einer TListBox zu einem TRichEdit zu realisieren.
TListBox dient dabei als Quelle und das TRichEdit als Ziel.
Es funktioniert auch, nur mit einem kleinen Schönheitsmarkel, der das gesamte Projekt durcheinanderbringt.
Die aktuelle Zeile meines TRichEdit sieht so aus:
> |
Jetzt soll er den Text nach der CursorPosition einfügen ohne dabei die ">> " zu löschen.
Habe es anfänglich so versucht, funktioniert auf den ersten Blick auch, aber er fügt am Ende des Textes eine "leere Zeile" ein. Das darf nicht sein.//--------------------------------------------------------------------------- void __fastcall TfrmMain::RichEdit1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Accept = Source->ClassNameIs("TListBox"); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::RichEdit1DragDrop(TObject *Sender, TObject *Source, int X, int Y) { RichEdit1->Lines->Delete(RichEdit1->Lines->Count-1); RichEdit1->Lines->Insert(RichEdit1->Lines->Count,">> "+lboxSource->Items-> Strings[lboxSource->ItemIndex]); RichEdit1->SelStart=RichEdit1->Text.Length()-1; RichEdit1->SetFocus(); }Wie gesagt, diese Lösung würde mir schon ausreichen (obwohl sie noch nicht perfekt ist), wenn ich nur verhindern könnte, dass automatisch eine leere Zeile unterhalb des Ganzen eingefügt wird.
Das gleich Problem hatte ich schon mal bei Betätigung der "Enter" Taste im OnKeyPress Event des TRichEdit's.
Wurde damals gelöst, indem man Key auf 0 setzte.
Gibt es hierfür vielleich auch eine derartige Lösung?
Vielen Dank
-
Hallo,
hab mir kurz einen anderen Beitrag angeguckt und gemerkt, dass es für mein Problem ausreicht. War wohl kurz auf dem Holzweg unterwegs. *Sorry*

So funktioniert es:
void __fastcall TForm1::cwDragDrop(TObject *Sender, TObject *Source, int X, int Y) { int aktzeile = cw->CaretPos.y; int aktpos = cw->CaretPos.x; AnsiString st=ListBox1->Items->Strings[ListBox1->ItemIndex]); cw->Lines->Strings[aktzeile] = cw->Lines->Strings[aktzeile].Insert(st, aktpos); cw->SelStart=cw->Text.Length()-1; cw->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TForm1::cwDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Accept = Source->ClassNameIs("TListBox"); } //---------------------------------------------------------------------------Thema damit erledigt...