Delphi-PRAXiS
Seite 6 von 7   « Erste     456 7      

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)

xaromz 24. Sep 2007 19:00

Re: DragOver vom Explorer erkennen
 
Hallo,
Zitat:

Zitat von GuenterS
Kann es sein, dass es sich beim Problem mit dem dropen ganzer Emails aus Thunderbird oder Outlook um ein ähnliches Problem handelt?

nein, das ist was anderes. Wenn ich nachschaue, ob die Datenstruktur vom Typ "CFSTR_FILECONTENTS" ist, sagt mir Windows: "Ja". Wenn ich dann die Daten abholen will, sagt mir Windows: "Fehler" (ich glaube irgendwas mir falscher Parameter). Noch habe ich keine Ahnung, was da los ist.

Gruß
xaromz

GuenterS 24. Sep 2007 20:19

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.

OldGrumpy 24. Sep 2007 20:31

Re: DragOver vom Explorer erkennen
 
Thunderbird wird ja auch häufiger mal aktualisiert, vielleicht hat sich da in letzter Zeit was geändert...

GuenterS 24. Sep 2007 20:33

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.

AndyOthers 28. Sep 2007 13:45

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.

xaromz 28. Sep 2007 14:08

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

AndyOthers 28. Sep 2007 15:09

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:
procedure TfrmDokumente.ShellDropper1Drop(Sender: TObject;
  const DropRec: TDropRec);
begin

  ....

end;
also in dieser prozedur kann ich in der v1.2 auf das gedroppte file schon zugreifen, und in der v1.6 nicht!?!

AndyOthers 8. Okt 2007 12:12

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:
  • im dragenter wird fillobjects ausgeführt, temp-datei wird von thunderbird erstellt, ist aber noch leer
  • dann kommt drop
  • dragenter is schon abgeschlossen und temp-datei von tb ist nun richtig erstellt
  • also kann auf diese dann in ondrop zugegriffen werden

version 1.6:
  • fillobject wird erst im drop (auf jeden fall) ausgeführt, temp-datei wird von thunderbird erstellt, ist aber noch leer
  • somit kann im ondrop nicht auf die temp-dateien von tb zugegriffen werden, da ja die dateien erst nach dem droppen erstellt werden

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

xaromz 9. Okt 2007 08:35

Re: DragOver vom Explorer erkennen
 
Hallo,

Zitat:

Zitat von AndyOthers
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:

leider kann ich Deine Ausführungen nicht ganz nachvollziehen.

Zitat:

Zitat von AndyOthers
version 1.2:
  • im dragenter wird fillobjects ausgeführt, temp-datei wird von thunderbird erstellt, ist aber noch leer
  • dann kommt drop
  • dragenter is schon abgeschlossen und temp-datei von tb ist nun richtig erstellt
  • also kann auf diese dann in ondrop zugegriffen werden

Bei mir wird erst nach dem OnDrop die Datei mit Inhalt gefüllt, obwohl sie in OnDragEnter/OnDrop schon existiert (aber Null Byte groß ist).

Zitat:

Zitat von AndyOthers
version 1.6:
  • fillobject wird erst im drop (auf jeden fall) ausgeführt, temp-datei wird von thunderbird erstellt, ist aber noch leer
  • somit kann im ondrop nicht auf die temp-dateien von tb zugegriffen werden, da ja die dateien erst nach dem droppen erstellt werden

Die Methode FillObjects wird in DragEnter immer ausgeführt. Da Thunderbird keine FileGroup verwendet, werden auch die Dateien exakt so wie in der Methode Drop eingelesen.
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:

Zitat von AndyOthers
ps: weiters würd ich im drop nach dem ondrop die (temp)files dann schon wieder löschen.

Das die temporäre Datei von Thunderbird erstellt wird, muss sie auch von Thunderbird wieder gelöscht werden. Es gibt keine Möglichkeit, festzustellen, ob die gedroppte Datei temporär ist.
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

AndyOthers 15. Okt 2007 14:58

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:

Die Methode FillObjects wird in DragEnter immer ausgeführt.
hier muss ich aber widersprechen :gruebel: . wie man im nachfolgenden code auszug sieht, wird fillobjects nur ausgeführt, wenn man in seiner shelldropper komponente OnDragEnter verwendet. arbeitet man zB nur mit OnDrop wird hier FillObjects nicht ausgeführt!

Delphi-Quellcode:
if FAccepted then
  begin
    if Assigned(FOnDragEnter) then
    begin
      FillObjects(dataObj, dsEnter);
      PrepareRec(pt, grfKeyState);
      FOnDragEnter(FControl, FDropRec, FAccepted);
    end;
  end;
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).
RICHTIG. und genau deswegen lasse ich fillobjects AUF JEDEN FALL im DragEnter ausführen damit Thunderbird die Datei vorm Drop noch befüllen kann. und wie gesagt, jetzt funzts mit Thunderbird, OutlookExpress und Outlook 2000.

im DragEnter:
Delphi-Quellcode:
...
  if FAccepted then
  begin
     FillObjects(dataObj, dsEnter);
    if Assigned(FOnDragEnter) then
    begin
      //FillObjects(dataObj, dsEnter);
      PrepareRec(pt, grfKeyState);
      FOnDragEnter(FControl, FDropRec, FAccepted);
    end;
  end;
...
im Drop:
Delphi-Quellcode:
...
  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;
...
hoffe ich konnte mich dieses mal verständlich machen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Seite 6 von 7   « Erste     456 7      

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