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 anstatt

    DragAcceptFiles(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


Anmelden zum Antworten