Entwickler-Ecke
Windows API - Per Drag & Drop Dateipfad in gezogenes Feld einfuegen
white-desert - Fr 18.04.08 10:11
Titel: Per Drag & Drop Dateipfad in gezogenes Feld einfuegen
Hallo,
ich will eine datei vom explorer in ein beliebiges Eingabefeld eines beliebigen programms ziehen.
dort soll dann der dateipfad der gerade gezogenen datei beim "drop" eingefuegt werden.
Moderiert von
Narses: Bild als Anhang hochgeladen
es soll also ein tool werden, mit dem man am schnellsten dateipfade überallhin einfügen kann.
mein status:
das handle eines eingabefeldes unter der maus herauszufinden und dort einen text eintippen zu lassen
ist gar kein problem (vieeeeeel hilfe hier im forum).
nur ...
- wie schafft man es ein globales, systemweites "ondrop" zu implementieren,
- wie kriegt man den dateipfad der gezogenen datei raus?
hooks fuer drag&drop habe ich nicht gefunden :-(
und einen hook fuer das klicken auf eine datei auch nicht :-(
wäre es irgendwie möglich, oder kann ichs gleich vergessen,
weil zu systemnah ist?
danke!
_frank_ - Fr 18.04.08 12:27
wenn ich dich richtig verstehe gibt es prinzipiell es 2 möglichkeiten, das zu realisieren.
1: eine eigene Edit-Klasse, die in sich das WM_DropFiles handled
2: das WM_DropFiles (forumlar-)global einfangen und das fenster-handle weitergeben.
im Anhang 2 funktionstüchtige Demos beider Varianten
//edit
ach du meinst ein fremdes Programm?
wenn ja, dann must du per SetWindowLong die WndProc umbiegen (was unter NT prozessübergreifend glaube nicht mehr so leicht möglich ist) und das edit-feld per SetWindowText setzen.
in dem Fall dürfte aber der Aufwand den Zweck nicht rechtfertigen ;) frag lieber den Programmierer, ob er das Feature implementiert...
HTH Frank
white-desert - Mo 21.04.08 15:00
Danke für deine Antwort. :-)
okey... das umbiege würde ich ja noch hinbekommen, aber
wie kriege ich sozusagen ein globales ondrop?
Mr_Emre_D - Do 15.05.08 11:34
falls du immernochnicht weißt wies geht:
hier n bsp:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure WMDropFiles(var Msg:TMessage); message wm_DropFiles;
procedure TForm1.FormCreate(Sender: TObject); begin shellapi.DragAcceptFiles( form1.Handle, true ); end;
procedure TForm1.WMDropFiles(var Msg: TMessage); var hDrop, i, res: integer; Buffer: array[ 0..255 ] of char; begin hDrop:= Msg.WParam; res:= DragQueryFile(hDrop,$FFFFFFFF,nil,0); for i:= 0 to res - 1 do begin res:= DragQueryFile( hDrop, i, @Buffer, 255); showmessage( buffer ); end; end; |
;)
PS: Hamma vor paar Tagen in der Schule durchgenommen :)
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
_frank_ - Do 15.05.08 11:40
er sucht eine Möglichkeit von fremden Anwendungen das Drag&drop abzufangen....
in der eigenen Anwendung ist das kein Problem :)
Gruß Frank
Mr_Emre_D - Do 15.05.08 11:47
akso, tja ich sollte lieber in Zukung die Frage durchlesen ...
hehe, sorry, aber vlt. hilft das ja jemandem ?!
MfG
Tex - Sa 17.05.08 16:57
Hi _frank_,
dein Beispiel von oben, dragedit2.zip, ist total klasse. Genau das brauch ich.
Allerdings bin ich noch nicht ganz durchgestiegen.
Dein Beispiel so wie es ist funzt bestens.
Ich habe jetzt noch auf die Form eine List Box gepackt und
in "TForm1.FormCreate" die Zeile "DragAcceptFiles(listbox1.handle,true);"
und in "TForm1.FormClose" die Zeile "DragAcceptFiles(listbox1.Handle,false);" hinzugefügt.
Das klappt aber leider nicht.
Was muss ich tun damit auch die ListBox den Drag akzeptiert?
Gruß,
Tex
_frank_ - Sa 17.05.08 17:35
die Sache ist die, dass ich den Text mittels SetWindowText setze.
beim Listview schlägt das fehl, da man dort ein Item adden müsste...du könntest aber die Message-Methode so abändern dass die prüft, ob das control hinter msg.unused (Handle) eine Listbox ist und entsprechend reagieren.
HTH Frank
Tex - Sa 17.05.08 17:44
Ahh verstehe...
Das werd ich versuchen.
Besten Dank,
Tex
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!