RichEdit - Drag und Drop
-
Wie kann ich mit Drag und Drop im RichEdit arbeiten so wie es in der ListBox geht. Oder ist das nicht möglich? Ich habe ein beispiel für eine listBox aber beim RichEdit funktioniert es nicht!
h //--------------------------------------------------------------------------- private: // Anwender-Deklarationen void __fastcall WMDropFiles(TWMDropFiles &Message); public: // Anwender-Deklarationen BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles) END_MESSAGE_MAP(TForm) __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- cpp //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { DragAcceptFiles(ListBox1->Handle, true); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- void __fastcall TForm1::WMDropFiles(TWMDropFiles &Message) { int ilFilesCount, ilStrLength; char caFileName[MAX_PATH]; // Anzahl der Dateien bestimmen: ilFilesCount=DragQueryFile((HDROP)Message.Drop,-1,NULL,0); for(int ilIndex=0; ilIndex<ilFilesCount; ilIndex++) { // Länge des Dateinamens bestimmen: ilStrLength=DragQueryFile((HDROP)Message.Drop,ilIndex,NULL,0); // Dateinamen in char-Array caFileName übernehmen: DragQueryFile((HDROP)Message.Drop, ilIndex, caFileName, ilStrLength+1); RichEdit1->Lines->LoadFromFile(caFileName); } } //---------------------------------------------------------------------------
Bitte um Hilfe. Danke
[ Dieser Beitrag wurde am 04.10.2002 um 00:40 Uhr von Jansen editiert. ]
-
Aus irgendeinem Grund scheint das RichEdit WM_DROPFILES nicht zu empfangen, zumindest nicht beim Verwenden einer Messagemap. Mit dem Überschreiben der WindowProc funktioniert es aber:
// in .h private: // User declarations TWndMethod OldRichEditWP; void __fastcall NewRichEditWP(TMessage &Msg); // in .cpp //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // register the RichEdit as a drop site DragAcceptFiles(RichEdit1->Handle, true); OldRichEditWP = RichEdit1->WindowProc; RichEdit1->WindowProc = NewRichEditWP; } //--------------------------------------------------------------------------- void __fastcall TForm1::NewRichEditWP(TMessage &Msg) { if (Msg.Msg == WM_DROPFILES) { // grab a handle to the drop structure HDROP HDrop = (HDROP)Msg.WParam; // find the number of files dropped int num_files = DragQueryFile(HDrop, 0xFFFFFFFF, (LPSTR)NULL, NULL); // only accept one file at a time if (num_files != 1) { ShowMessage("Only one file at a time please!"); Msg.Result = 0; return; } // load the file int NameLength = DragQueryFile(HDrop, 0, NULL, NULL) + 1; char *FileName = new char[NameLength]; DragQueryFile(HDrop, 0, FileName, NameLength); RichEdit1->Lines->LoadFromFile(FileName); // clean up delete [] FileName; DragFinish(HDrop); Msg.Result = 0; return; } // un-subclass the RichEdit if (Msg.Msg == WM_DESTROY) RichEdit1->WindowProc = OldRichEditWP; OldRichEditWP(Msg); } //---------------------------------------------------------------------------
Quelle: Borland Newsgroups
-
Genau das was ich gesucht habe!
Danke