Forms - Datei per Drag and Drop aus dem Explorer empfangen



  • Ich möchte das file was ich öffnen möchte, einfach auf mein programmformular ziehen können und wenn ich es dort loslasse, soll es geöffnet werden.
    Wonach muss ich suchen an Methoden oder Funktionen?

    [ Dieser Beitrag wurde am 12.05.2002 um 16:02 Uhr von junix editiert. ]



  • Übersetzung gemäss diesem Artikel:

    Angenommen du möchtest Form1 Drag n Drop fähig machen:

    • Füge beim OnCreateEvent von Form1 folgendes hinzu:
    // Sorgt dafür, dass dein Formular DnD akzeptiert
    DragAcceptFiles(Form1->Handle,true);
    
    • Jetzt schreibst du in die Private-Deklaration von TForm1
    // Deklaration des MessageHandlers
    void __fastcall WmDropFiles(TWMDropFiles& Message);
    
    • Schreib das ans Ende deiner public-Sektion des TForm1 headers:
    // Sets up the message handler
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WmDropFiles)
    END_MESSAGE_MAP(TForm)
    
    • Jetzt die Implementierung. Schreib das in deine Form1.cpp
      [cpp]// Implementierung des Message Handlers
      void __fastcall TForm1::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));
      // **HIER kannst du jede "gedropte" Datei mit
      **// einem eigenen Algorithmus verarbeiten. Zum Beispiel
      // die Dateien öffnen oder die Namen mal vormerken.
      }
      DragFinish(hDrop);
      }[/cpp]

    Zur Krönung schreibst du jetzt noch oben in die .cpp folgendes:

    #include <shellapi.h> //Brauchst du damit "DragAcceptFiles" & Co erkannt werden.
    

    Et Voilà (: Habs ausprobiert, klappt einwandfrei bei mir. Hoffe bei dir auch.

    -junix

    [ Dieser Beitrag wurde am 12.05.2002 um 16:03 Uhr von junix editiert. ]

    [ Dieser Beitrag wurde am 19.06.2003 um 09:33 Uhr von Jansen editiert. ]


Anmelden zum Antworten