![]() |
erkennen ob Verzeichnis oder Datei bei dragover
Gibt es überhaupt die Möglichkeit schon beim DragOver zu erkennen, was über der jeweiligen Komponente schwebt?
Beim Drop ist es ja kein Problem aber schon zu spät. Grund: Ich möchte, wenn ein Verzeichnis auf die falsche Komponente gezogen wird dropen verbieten bzw. wenn Datei dann erlauben! Geht das überhaupt? Gefunden hab ich bis jetzt nichts! Gruss alf |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Ja, das geht. Du musst das Interface "IDropTarget" einbauen.
Dann kannst du mit RegisterDragDrop/RevokeDragDrop deine Komponente als Ziel an-/abmelden und in den entsprechenden Events filtern. |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Erstmal Danke für die Antwort.
Verstehen tu ich es noch nicht. :gruebel: Leider sind die Beispiele die ich gefunden habe nicht allgemein, um es gleich zu kapieren. Aber übung macht den Meister :coder2: Mal sehen ob ich es verstehe? Gruß alfold |
AW: erkennen ob Verzeichnis oder Datei bei dragover
![]() Hab's nicht ausprobiert, aber vielleicht hilft dir das weiter. |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Habs gerade im Test IDropTarget. Funct auch, aber im Dragover mH:gruebel:
Keine Ahnung wie ich da abfragen soll. Dort werden keine IDataObject übergeben nur im Drop! Woher nehme ich die Information was da drüber schwebt? Ich befürchte das dies nie vorgesehen ist und war und demzufolge auch niemand in DrogOver einbezogen hat. So auch bei Shelldropper, habs mir gerade angeschaut. Auch ander Componenten haben so was nicht drin. Ich gehe nun davon aus das ich das selber in der funktion DragOver einarbeiten muss. Ich teste das mal mit Shelldropper. Ich hoffe das Martin nichts dagegen hat. |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Wenn du sonst keine andere Lösung findest, könntest du den Pfad - den du per Drag & Drop erhältst - selber prüfen ob es sich hier um eine Datei oder ein Verzeichnis handelt. Einen Ansatz dazu findest du bspw. hier:
![]() |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Gefunden!
Im DragEnter kan man das abfragen. Ich wusste nicht das DragEnter vor Drop ausgeführt wird:mrgreen: Wieder was gelernt:wink: Danke für die Hilfe. |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Sorry das ich dir da ad-hoc keine genaueren Infos geben konnte... Ist schon eine Weile her, dass ich das eingebaut habe.
|
AW: erkennen ob Verzeichnis oder Datei bei dragover
Hallo,
ich stand mal vor einem ähnlichen Problem Ich wollte/musste rausfinden, ob via Drag&Drop eine Datei oder ein Pfad in ein Edit gezogen wird. Hab dann das ![]() Hab´s dann für mich so geändert:
Delphi-Quellcode:
procedure TMainForm.ApplicationEventsMessage(var Msg: tagMSG;
var Handled: Boolean); const BufferLaenge = 255; var i: Integer; Anzahl_Dateien: Integer; Dropped_Dateiname: array[0..BufferLaenge] of Char; begin //www.delphipraxis.net/1005177-post2.html If Msg.message = WM_DROPFILES then begin Anzahl_Dateien := DragQueryFile(Msg.wParam, Cardinal(-1), nil, 0); try for i := 0 to Pred(Anzahl_Dateien) do begin DragQueryFile(Msg.wParam, i, @Dropped_Dateiname, BufferLaenge); If Msg.hwnd = LabeledButtonEdit_NCUpgrade.Handle then begin If FileType(PChar(@Dropped_Dateiname)) = FT_File then LabeledButtonEdit_NCUpgrade.Text := PChar(@Dropped_Dateiname); end; If Msg.hwnd = LabeledButtonEdit_Ablagepfad.Handle then begin If FileType(PChar(@Dropped_Dateiname)) = FT_Directory then LabeledButtonEdit_Ablagepfad.Text := PChar(@Dropped_Dateiname); end; end; finally DragFinish(Msg.wParam); Handled := true; end; end; end; |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Danke. @Helmi
Aber auch hier wird nicht vor dem Drop geprüft. Mir ging es ausschliesslich darum vor dem Drop die Prüfung zu machen, im Prinzip beim DragOver. Gruß alfold |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Ich bin mir überhaupt nicht sicher, dass dein Vorhaben überhaupt geht.
Wenn ich mir vorstelle, ich nimm eine Datei aus dem Windows Explorer und zieh sie in meine Anwendung. Wenn ich dich richtig verstanden habe, so müsste die Prüfung ja schon beim "Anpacken der Datei" passieren. Da ist sie ja noch im Explorer - erst wenn ich sozusagen mit der Maus über meiner Anwendung bin, kann ich prüfen was ich bekomme. |
AW: erkennen ob Verzeichnis oder Datei bei dragover
Ja es geht, zumindesten mit IDropTarget. Wenn man in der DropEnter Funktion
abfragt ob Datei oder Verzeichnis.
Delphi-Quellcode:
Dann kann man bei DragOver mit
if DirectoryExists(szBuffer) then
is_Dir:= True else is_Dir:= False;
Delphi-Quellcode:
das dann dementsprechend auswerten.
if is_Dir then
dwEffect := DROPEFFECT_NONE else dwEffect := DROPEFFECT_COPY ; Result := S_OK; So funktioniert es jedenfals bei mir:thumb: getestet mit WinXP. Auf Win7 bin ich noch nicht dazu gekommen. EDIT: Wenn ich MS richtig verstehe(kann leider kein Engl) wird DropEnter vor allem ausgeführt. So kann die Applikation entscheiden was sie damit anfangen will. Zumal DropEnter und Drop identisch in ihrem Aufruf sind! Warum allerdings das nirgends in Delphi "OnDragEnter" oder in den Externen Dropper komponenten mit drin ist verstehe ich nicht!? Gruß alfold |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz