Drag&Drop Explorer -> ListBox
-
Hallo zusammen
Ich möchte per Drag&Drop Dateien in ein ListBox ziehen.
Ich kenne das Beispiel aus der FAQ.
Wenn ich dies einbinde funktioniert auch alles, allerdings reagiert dann das gesamte Formular auf Drag&Drop. Ich möchte allerdings nur das die ListBox darauf reagiert.
Wenn ich nun anstattDragAcceptFiles(Form1->Handle,true);
DragAcceptFiles(ListBox1->Handle,true);
schreibe. Ändert sich zwar der Cursor nur noch auf der ListBox, allerdings die WmDropFiles(TWMDropFiles& Message) Funktion wird nicht mehr ausgeführt.
MfG Stephan
-
Hallo zusammen
Nachtrag:
Die ListBox befindet sich in einem PageControl.MfG Stephan
-
Hast du die neu geschriebene Nachrichtenbehandlungsroutine auch der ListBox und nicht dem Formular zugewiesen? Sonst wird es wohl nicht klappen.
Gruß, Oli
-
public in der h:
BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WmDropFiles) END_MESSAGE_MAP(TForm)private in der h:
void __fastcall WmDropFiles(TWMDropFiles& Message);und in der cpp hab ich
void __fastcall TfrmMain::WmDropFiles(TWMDropFiles& Message) { char buff[MAX_PATH]; HDROP hDrop=(HDROP)Message.Drop; int numFiles=DragQueryFile(hDrop,-1,NULL,NULL); for(int i=0;i<numFiles;i++) { DragQueryFile(hDrop,i,buff,sizeof(buff)); String szExt=ExtractFileExt(buff); if(szExt==".cpp"||szExt==".hpp"|| szExt==".c" ||szExt==".h" || szExt==".cxx"||szExt==".hxx") { ltbFiles1->Items->Insert(ltbFiles1->Items->Count,buff); } } DragFinish(hDrop); }halt die endungen (szExt) kannst du natürlich ändern, ltbFiles1 ist die ListBox.
und der akzeptiert files aus dem explorer! mal ausprobiern
-
Na toll, das ist doch genau das, was in der FAQ steht!?
_Stephan_:
M.E. musst du dafür eine Komponente von TListBox (oder was immer das Ziel sein soll) ableiten und WM_DROPFILES schon dort abfangen.Oder du suchst dir bei torry.net o.ä. was fertiges.
-
@Jansen: ich hab nur das gepostet, was ich hab, und bei mir gehts ja so!
-
Ja, das geht grundsätzlich, das hatte _Stephan_ ja auch schon geschrieben.
Bei dieser Lösung "akzeptieren" aber auch die Form selbst und sämtliche darauf befindliche Controls per DnD empfangene Dateien. Wie man letzteres verhindert, das ist Thema dieses Threads.Setzen, Sechs!

-
*scnr* jansen hat gewonnen

vlt musst du das WmDropFiles irgendwie in TListBox unterkriegen?
[edit] wenns bei dem Private von der TForm so ist und dann die ganze form reagiert, wirds wohl so sein!
[edit2] wenn du WmDropFiles bei TForm1 reinmachst reagiert auch nur Form1 drauf ^^
und wenn du dann Drag'n'Drop nicht mit TForm1 machst dann geht halt nix
-
Hallo zusammen
@Jansen
Deine Idee mit dem ableiten von der Komponente war richtig, es funktioniert.Vielen dank für eure Hilfe.
MfG Stephan