![]() |
Re: DragOver vom Explorer erkennen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Xaromz,
tut mir leid für die sehr späte Rückmeldung. Leider ist die jetztige neue Version für mich eher ein Rückschritt. Jetzt kann ich auch keine Anhänge aus Thunderbird mehr droppen, die von Outlook (version 2000) gehen nach wie vor nicht. Ich habe ein Panel als DropControl in der ShellDropper Komponente registriert. Leider kommt nur noch das Drop-Verbotsschild, wenn ich einen Anhang einer Email aus Thunderbird oder Outlook dort droppen möchte. Wenn ich das DragOver Event implementiere und dort Accept auf true setze kommt er wohl in das Drop-Event, aber FilesW und Files Eigenschaften sind jeweils leer. Auch kein Filetype ist gesetzt. Das hat zumindest in der vorherigen Version funktioniert. Ich musste in der Unit allerdings einige Änderungen vornehmen um sie lauffähig zu bekommen. Delphi5 hat leider keine WideStrings Unit und kennt damit auch keine TWideStringList, WideString oder TWideStrings. Ich habe daher die WideStrings Unit entfernt und aus TWideStrings TStrings, aus WideString String und aus TWideStringList TStringList gemacht. Desweiteren war es notwendigt folgende Konstanten zu definieren, da sie meiner Delphi Version (5) unbekannt waren.
Delphi-Quellcode:
Ich denke ich hänge die Unit einfach mal an, vielleicht hat das Verhalten ja auch etwas mit meinen Änderungen zu tun.
MK_ALT = 32;
FILE_ATTRIBUTE_DEVICE = $00000040; PathDelim = '\'; |
Re: DragOver vom Explorer erkennen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
wenn Du einfach jeden WideString durch einen AnsiString ersetzt, dann kann das ja nicht funktionieren; Du musst natürlich die API-Aufrufe auch anpassen. Im Anhang findest Du eine Version, die abhängig vom Compiler die WideStrings einbindet (ab Delphi 7) oder eben nicht. Schau doch mal, ob das hilft. Gruß xaromz |
Re: DragOver vom Explorer erkennen
Jetzt kann die Komponente mit Attachements aus Outlook umgehen, das funktioniert jetzt, Anhänge aus Thunderbird gehen aber leider nicht in dieser Version.
Diese Version ließ sich auch gut in Delphi5 einbinden. [Nachtrag] Ich habe es jetzt auch mit Turbo Delphi probiert, da funktioniert es leider weder aus Thunderbird noch aus Outlook... [/Nachtrag] |
Re: DragOver vom Explorer erkennen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich habe jetzt die Komponente nochmals überarbeitet. Getestet habe ich:
Gruß xaromz |
Re: DragOver vom Explorer erkennen
Hallo,
das Droppen von Anhängen aus Outlook funktioniert jetzt auch, nur wenn man das gleich mit Thunderbird probiert, gibt es jetzt das Problem, dass zwar das File erstellt wird. Das ist auch gut so, nur leider findet das nach dem Drop-Ereignis statt, so dass man im Drop-Event nicht auf das File zugreifen kann. Dies ist anscheinend aber nur bei Thunderbird Anhängen der Fall . |
Re: DragOver vom Explorer erkennen
Hallo,
Zitat:
Gruß xaromz |
Re: DragOver vom Explorer erkennen
Hallo,
das mit dem Breakpoint habe ich gemacht und nun ist auch "klar" warum es bei Thunderbird Anhängen nicht funktioniert. Wenn ich einen Anhang aus Thunderbird droppe, kommt er nämlich gar nicht in die Methode "ProcessFileGroup". Beim Auslösen des Drop-Events besteht das File, allerdings ist dieses noch offen und leer, und kann deshalb im Drop-Event nicht geöffnet werden. Läßt man das Programm weiterlaufen (wenn man nur den Dateinamen abfragt), kommt er zwar auch nicht in die Methode "ProcessFileGroup" aber die Datei existiert dann (mit Inhalt). |
Re: DragOver vom Explorer erkennen
Hallo,
ich habe jetzt nochmal Thunderbird installiert, und habe folgende Beobachtung gemacht: Thunderbird verwendet den Standard-Weg für das Droppen von Dateien, verhält sich also so wie die Shell. Deshalb kommt auch kein ProcessFileGroup (der andere Weg). Leider erstellt aber Thunderbird den Inhalt der gedroppted Datei erst, wenn die Drop-Aktion komplett abgeschlossen ist, also, nachdem die Anwendung das Ereignis verarbeitet hat und der Handler in Thunderbird zurückgekehrt ist; das heißt, die Datei wird erst komplett sein, kurz nachdem sie gedroppt wurde. Das ist bei einer Kopieraktion in der Shell unwichtig, aber für die Verarbeitung in einem anderen Programm wirklich dämlich. Ich fürchte, mit diesem Timing wirst Du selbst zurechtkommen müssen. Gruß xaromz |
Re: DragOver vom Explorer erkennen
Kann es sein, dass es sich beim Problem mit dem dropen ganzer Emails aus Thunderbird oder Outlook um ein ähnliches Problem handelt?
|
Re: DragOver vom Explorer erkennen
Ich würde dieses Verhalten von Thunderbird mal als Bug in deren Bugtracker einstellen. Parallel dazu könnte man für solche Fälle einen Workerthread starten der 1-2 Sekunden lang in Intervallen versucht, auf die Datei zuzugreifen, bis er entweder in sein Timeout (drag&drop fehlgeschlagen) läuft oder halt Erfolg hat :) Ist natuerlich ne ziemliche Krüppellösung aber funktioniert erstmal.
|
Re: DragOver vom Explorer erkennen
Hallo,
Zitat:
Gruß xaromz |
Re: DragOver vom Explorer erkennen
Was mich aber stutzig macht ist, dass es mit früheren Versionen der Shelldropper Komponente funktioniert hat, das mit den Anhängen aus Thunderbird.
|
Re: DragOver vom Explorer erkennen
Thunderbird wird ja auch häufiger mal aktualisiert, vielleicht hat sich da in letzter Zeit was geändert...
|
Re: DragOver vom Explorer erkennen
Nein, das kann ich so ziemlich ausschließen, das war immer die gleiche Version .... kann es aber gerne morgen nochmal mit einer der älteren Versionen testen um das auszuschließen.
|
Re: DragOver vom Explorer erkennen
hallo, auch
das ist mein erster beitrag hier, möchte aber dazu sagen, dass ich diesen topic und die entwicklung der shelldropper-komponente - dazu gleich ein großes lob und n fettes dankeschön - schon seit anfang an mitverfolge. mir ist dabei auch aufgefallen, dass man in der version 1.2 email-attachments aus dem thunderbird (2.0.0.6) droppen konnte und jetzt in der version 1.6 nichtmehr!?! bin grad dabei der sache auf den grund zu gehen!? habt jemand vl schon eine idee? achja: thunderbird blieb der selbe ... nur shelldropper wurde auf den neuesten stand gebracht. |
Re: DragOver vom Explorer erkennen
Hallo,
ich habe gerade nochmal die Version 1.2 getestet. Auch mit dieser Version tritt das Problem auf, dass das Attachment erst nach dem Droppen wirklich erstellt wird. An den Routinen habe ich auch schon lange nichts wesentliches verändert. Gruß xaromz |
Re: DragOver vom Explorer erkennen
hmmm, das ist sehr interessant. ich habe ebenfalls die version 1.2 nochmals ausprobiert und konnte in der drop-ereignis prozedur der shelldropper komponente schon auf die gedroppte datei zugreifen. sobald ich die version 1.6 verwende geht dies an selbiger stelle nicht (siehe obiges problem). ... Komisch
Delphi-Quellcode:
also in dieser prozedur kann ich in der v1.2 auf das gedroppte file schon zugreifen, und in der v1.6 nicht!?!
procedure TfrmDokumente.ShellDropper1Drop(Sender: TObject;
const DropRec: TDropRec); begin .... end; |
Re: DragOver vom Explorer erkennen
hallo
ich habe heut nochmal die versionen 1.2 und 1.6 verglichen und habe glaube ich eine spur entdeckt warum das droppen von mail-attachments aus dem thunderbird in der v1.2 funktioniert und in der v1.6 nicht funktioniert: version 1.2:
version 1.6:
ich habs in meinem fall jetzt mal so gelöst, dass ich fillobjects auf jeden fall mal im dragenter ausführen lasse, um die tempfiles im drop bzw ondrop schon zu verfügung zu haben. hab meine überlegungen schnellschnell (dh änderungen sind noch nicht elegant ausprogrammiert) ausprobiert und so wie es ausschaut kann ich nun mail-attachments aus thunderbird, outlook express und outlook 2000 droppen. ps: weiters würd ich im drop nach dem ondrop die (temp)files dann schon wieder löschen. lg And the others ... and se others ... andy others |
Re: DragOver vom Explorer erkennen
Hallo,
Zitat:
Zitat:
Zitat:
Das Problem ist ja, dass Thunderbird den Inhalt der Datei erst schreibt, nachdem die Drop-Nachricht abgearbeitet wurde (lässt sich schön mit einem Breakpoint am Ende von "Drop" zeigen). Zitat:
Wenn die Dateien per FileGroup übergeben wurden, dann haben sie auch das Flag ftTemporary und werden, sofern das Flag gesetzt bleibt, auch wieder gelöscht. Gruß xaromz |
Re: DragOver vom Explorer erkennen
hallo
... ich hab schon befürchtet, dass ich mich ein wenig undeutlich ausgedrückt habe :mrgreen: . löschen der temporären dateien: war anscheinend mein fehler, hab nicht gesehen wo diese als ftTemporary gekennzeichneten Files wieder gelöscht werden. sorry :wink: weiter zu FillObjects: Zitat:
Delphi-Quellcode:
if FAccepted then
begin if Assigned(FOnDragEnter) then begin FillObjects(dataObj, dsEnter); PrepareRec(pt, grfKeyState); FOnDragEnter(FControl, FDropRec, FAccepted); end; end; Zitat:
im DragEnter:
Delphi-Quellcode:
im Drop:
...
if FAccepted then begin FillObjects(dataObj, dsEnter); if Assigned(FOnDragEnter) then begin //FillObjects(dataObj, dsEnter); PrepareRec(pt, grfKeyState); FOnDragEnter(FControl, FDropRec, FAccepted); end; end; ...
Delphi-Quellcode:
hoffe ich konnte mich dieses mal verständlich machen :)
...
FDropped := True; if FAccepted then begin if Assigned(FOnDrop) then begin if FIsFileGroup then FillObjects(dataObj, dsDrop); PrepareRec(pt, grfKeyState); FOnDrop(FControl, FDropRec); end; dwEffect := GetCursor; end else dwEffect := DROPEFFECT_NONE; ... |
Re: DragOver vom Explorer erkennen
Hallo,
Zitat:
Gruß xaromz |
AW: DragOver vom Explorer erkennen
Bin grade über diese nette, kleine Komponente gestoßen, weil ich genau diese Feature grad in einer Anwendung realisieren möchte.
Meine Frage dazu, läßt sich irgendwie feststellen, an welcher Position auf dem Zielcontrol sich der Cursor befindet wenn das Drop-Ereignis ausgelöst wird? Ich will Dateien aus dem Explorer auf ein Grid ziehen, und je nach Spalte und Zeile, auf der losgelassen wird, eine andere Procedure ausführen. |
AW: DragOver vom Explorer erkennen
Hat sich erledigt. Mit Mouse.Cursorpos und ScreenToClient lässt sich das passend errechnen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 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-2025 by Thomas Breitkreuz