Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Dateien vom Explorer in Listbox schieben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.12.2004, 22:51 Uhr
~Verschieber
Gast


Hallo,
ich habe auf einem Formular ne Listbox und würde jetzt gern Dateien vom Exploerer per Drag & Drop rein schieben (den Pfad zur Datei/en dort dann anzeigen). Hat jemand ne Idee wie ich das bewerkstelligen könnte?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.12.2004, 13:15 Uhr
~Th
Gast


Du mußt die Windows-Message 'WM_DROPFILES' abfangen (schau in der Hilfe von Win32-SDK nach). Direkt mit Borland-VCL geht das nicht (zumindestens bis Version 5.5 nicht, bei 6 weiß ich es nicht).

Die benötigten Funktionen sind dann: DragFinish, DragQueryFile, DragQueryPoint, DragAcceptFiles

Ich habe mir dafür ein Formular-Template erzeugt, damit ich es für verschiedene Projekte einsetzen kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.12.2004, 14:12 Uhr
~Verschieber
Gast


Danke Th,
so funktioniert es jetzt zumindest mal für das ganze Formular:
Header:

C++:
private:
        void __fastcall WmDropFiles(TWMDropFiles& Message);
public:
        BEGIN_MESSAGE_MAP
         MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
        END_MESSAGE_MAP(TForm)



Cpp:

C++:
void __fastcall TForm1::WmDropFiles(TWMDropFiles& Message)
{
  char buff[MAX_PATH];
  HDROP hDrop = (HDROP)Message.Drop;
  
   int numFiles = DragQueryFile(hDrop, -1, NULL, NULL);
   ListBox1->Clear();
   for (int i=0;i < numFiles;i++)
   {
    DragQueryFile(hDrop, i, buff, sizeof(buff));
    ListBox1->Items->Add(buff);
   }
  }
  DragFinish(hDrop);
}



Gibt jetzt ne Möglichkeit das auf ein bestimmtest Control(z.B. Listbox) zu beschränken?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.12.2004, 14:55 Uhr
~Th
Gast


Ich glaube, das geht nicht.
Ich benutze es immer, um Dateien per Drag&Drop in einer MDI-Applikation zu öffnen.

Da man die Windows-Messages ja nur von einer TForm-Komponente empfangen kann, scheint deine Lösung die einzige Möglichkeit zu sein. Bei mehreren Listboxen ist das natürlich problematisch, da der Empfänger nicht bestimmt werden kann. Außer du fragst die Mausposition ab (GetCursorPos) und checkst, ob es sich über einer bestimmten Komponente befindet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.12.2004, 18:59 Uhr
~Verschieber
Gast


Es ist auch nur für einzelne Komponeten möglich. Du musst nur ne neue Klasse von der Standardkomponente ableiten und dann die Funktion für den Drop sowie die Message_Map erstellen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: