Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DragOver vom Explorer erkennen (https://www.delphipraxis.net/79771-dragover-vom-explorer-erkennen.html)

GuenterS 21. Sep 2007 10:41

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:
 MK_ALT = 32;
 FILE_ATTRIBUTE_DEVICE = $00000040;
 PathDelim = '\';
Ich denke ich hänge die Unit einfach mal an, vielleicht hat das Verhalten ja auch etwas mit meinen Änderungen zu tun.

xaromz 21. Sep 2007 20:08

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

GuenterS 21. Sep 2007 22:24

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]

xaromz 22. Sep 2007 11:03

Re: DragOver vom Explorer erkennen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe jetzt die Komponente nochmals überarbeitet.
Getestet habe ich:
  • Drag aus der Shell (Explorer) -> funktioniert
  • Drag einer URL aus Internet Explorer -> funktioniert
  • Drag einer URL aus Firefox -> funktioniert
  • Drag einer URL aus Opera -> funktioniert nicht
  • Drag einer Mail aus Windows Mail -> funktioniert
  • Drag eines Anhangs aus Windows Mail -> funktioniert
  • Drag einer Mail aus Outlook (2007) -> funktioniert nicht
  • Drag eines Anhangs aus Outlook (2007) -> funktioniert
  • Drag einer Mail aus Thunderbird (2.0.0.6) -> funktioniert nicht
  • Drag eines Anhangs aus Thunderbird (2.0.0.6) -> funktioniert
Im Anhang ist auch ein Demo-Programm inklusive Quelltext.

Gruß
xaromz

GuenterS 24. Sep 2007 11:26

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 .

xaromz 24. Sep 2007 12:21

Re: DragOver vom Explorer erkennen
 
Hallo,
Zitat:

Zitat von GuenterS
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 .

Setz doch mal einen Breakpoint in der Methode "ProcessFileGroup" und schau, was passiert. In dieser Methode werden nämlich die temporären Dateien erstellt, und zwar unmittelber, bevor das Ereignis "OnDrop" ausgelöst wird.

Gruß
xaromz

GuenterS 24. Sep 2007 16:59

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).

xaromz 24. Sep 2007 17:51

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

GuenterS 24. Sep 2007 18:41

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?

OldGrumpy 24. Sep 2007 18:59

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr.
Seite 5 von 7   « Erste     345 67      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz