Dateien aus dem Explorer in die Anwendung ziehen (Drag and Drop)
-
hi,
ich möchte den pfad einer datei die man in eine listbox zieht dort als item adden. dazu habe ich ein beispiel von rad.bytesandmore.de was aber mit dem BCB5 irgendwie nicht geht. es geht alles bis auf das, das das item in der listbox erscheint.http://www.bytesandmore.de/rad/cpp/snipp/sc03026.php
weis jemand genaueres? das beispiel ist drum für BCB4 evl. geht das mit dem 5er wirlich nicht. wie kann ich das sonst realisieren?
-
Hallo,
Das geht auch mit dem BCB5.
Vielleicht könntest du den Fehler etwas genauer beschreiben. Bist du mal mit dem Debugger durchgegangen?
-
hat sich erledigt. irgendwie geht es wenn ich ein neues projekt mache. auf meinem vorhandenen projekt geht es nicht. da muss ich nun denf ehler suchen hmm...
-
ah habs. das funktioniert nicht wenn die listbox in einem TPageControl liegt.
-
hm das ist aber blöd. ich muss die listbox in einem tpagecontrol haben da ich die listbox sonst in jeder page sehe. weis jemand wie ich das problem lösen kann das es trotzdem geht?
-
Das muß auch gehen wenn die Listbox auf einem PageControl ist. Da wir aber nicht wissen, was du bisher gemacht hast, ist es schwer zu helfen.
-
es geht definitive nicht mit einem TPageControl. jedenfalls nicht mit dem unveränderten code von rad.bytesandmore.de
du kannst es gerne mal testen

listbox in eiem tpagecontrol = geht nicht.
listbox auserhalb eines tpagecontrol = geht.

-
Ich habs jetzt getestet und du hast recht. Das liegt wohl daran, das in diesem Fall die WMDropFiles-Funktion nicht aufgerufen wird (d.h. der Event wird nicht abgefangen).
Ich hab das mal auf die Schnelle gelöst, indem ich ein ApplicationEvents-Control auf die Form gelegt habe und dort den WM_DROPFILES-Event abgefangen habe. Das funktioniert zwar, ich weiß aber nicht ob das sonderlich elegant ist bzw. irgendwelche Nebeneffekte hat.
Der OnMessage-Event von ApplicationEvents sieht dann so ausvoid __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled) { int test = Msg.message; if( Msg.message == WM_DROPFILES ) { int ilFilesCount, ilStrLength; char caFileName[MAX_PATH]; // Anzahl der Dateien bestimmen: ilFilesCount=DragQueryFile((HDROP)Msg.wParam,-1,NULL,0); for(int ilIndex=0; ilIndex<ilFilesCount; ilIndex++) { // Länge des Dateinamens bestimmen: ilStrLength=DragQueryFile((HDROP)Msg.wParam,ilIndex,NULL,0); // Dateinamen in char-Array caFileName übernehmen: DragQueryFile((HDROP)Msg.wParam, ilIndex, caFileName, ilStrLength+1); // ...und ab in die Listbox: ListBox1 -> Items -> Add(caFileName); } Handled = true; } else Handled = false; }