Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Guido Eisenbeis 27. Okt 2006 23:08


DragOver vom Explorer erkennen
 
Hallo.

Wenn man im Explorer (oder vom Desktop) eine Datei per DragDrop ins eigene Formular zieht und dort loslässt, kann man sich die Daten der Quelle einverleiben.

Für mich geht es aber um den Schritt vorher: das "DragOver". Ich habe eine Anwendung aufgebaut, die virtuelle Explorer-Listviews benutzt. Betrachtet man nun ein einzelnes ListView, so kann es vom User auf- oder zugeklappt werden.

Was ich erreichen will, ist ein automatisches Aufklappen, wenn bei einem DragDrop vom Explorer mit der Maus über einen "Aufklapp"-Button gefahren wird.

Glaubt mir, ich habe mich schon dusselig gesucht! Im Internet, in den Foren, in der Delphi-Hilfe, der MSDN und wer weiß wo sonst noch! Ich weiß noch nicht mal, welche Suchbegriffe ich für dieses Thema nehmen soll. Zu "Drag & Drop", "DragOver", oder "Drag systemweit erkennen" gibt es Millionen "Treffer". Die haben jedoch alle nichts mit dem Thema zu tun.

Das Einzige was ich gefunden habe, ist "Eine Message vor WM_DropFiles (in der Art OnStartDrag)". Da hatte jemand genau das gleiche Problem. Leide bekam er keine Antwort!

Kurzfassung:

Wie kann ich über einem eigenen Control (z. B. TPanel) ein "DragOver" vom Explorer erkennen und z. B. ein ListView vergrößern ("aufklappen")?

Grüße,
Guido.

xaromz 28. Okt 2006 09:51

Re: DragOver vom Explorer erkennen
 
Hallo,

vielleicht kannst Du Dir mit IDropTargetHelper was basteln.

Oder noch einfacher: MSDN-Library durchsuchenIDropTarget:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Classes, Controls, Forms, ActiveX;

type
  TForm1 = class(TForm, IDropTarget)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    function DragEnter(const dataObj: IDataObject; grfKeyState: Longint;
      pt: TPoint; var dwEffect: Longint): HResult; stdcall;
    function DragOver(grfKeyState: Longint; pt: TPoint;
      var dwEffect: Longint): HResult; stdcall;
    function DragLeave: HResult; stdcall;
    function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint;
      var dwEffect: Longint): HResult; stdcall;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Dialogs;

{ TForm1 }

function TForm1.DragEnter(const dataObj: IDataObject; grfKeyState: Integer;
  pt: TPoint; var dwEffect: Integer): HResult;
begin
  dwEffect := DROPEFFECT_COPY;
  Result := S_OK;
end;

function TForm1.DragLeave: HResult;
begin
  Result := S_OK;
end;

function TForm1.DragOver(grfKeyState: Integer; pt: TPoint;
  var dwEffect: Integer): HResult;
begin
  Color := RGB(Random(256), Random(256), Random(256));
  dwEffect := DROPEFFECT_COPY;
  Result := S_OK;
end;

function TForm1.Drop(const dataObj: IDataObject; grfKeyState: Integer;
  pt: TPoint; var dwEffect: Integer): HResult;
begin
  dwEffect := DROPEFFECT_COPY;
  Result := S_OK;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  R: Integer;
begin
  R := RegisterDragDrop(Handle, Self);
  if R <> S_OK then
    ShowMessage('Couldn''t initialize Drag''n''Drop!');
  Randomize;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  RevokeDragDrop(Handle);
end;

initialization
  OleInitialize(nil);
end.
Gruß
xaromz

xaromz 28. Okt 2006 13:30

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

weil ich sowas schon lange machen wollte, habe ich gleich eine Komponente gebastelt, die das Droppen von Dateien behandelt.

Gruß
xaromz

Guido Eisenbeis 28. Okt 2006 15:41

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Das hört sich doch gut an! Ich werde es heute noch ausprobieren und mich dann melden.

Bis hierhin schon mal vielen Dank.

Guido.

Guido Eisenbeis 28. Okt 2006 18:59

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Als Allererstes ein dickes Dankeschön! Die Komponente funktioniert (fast) wunderbar.

Für meine Zwecke sind insbesondere die Ereignisse "DragEnter" und "DragLeave" geeignet. Umgangssprachlich ist es zwar richtig, dass ich beim "DragOver" über z. B. Panel1 das ListView1 zeigen will. Programmiertechnisch sieht das anders aus:
Genaugenommen soll, wie oben schon angedeutet, "DragEnter" ermittelt werden. Ab dann läuft eine Verzögerung von ca. 0,5 bis 1 Sekunde an. Wird das Panel1 innerhalb dieser Verzögerung wieder verlassen (= "DragLeave"), so wird das Zeigen des ListView1 NICHT ausgeführt.

Insofern ist deine Komponente genau das Richtige für meine Zwecke!

2 Probleme bestehen noch:

Erstens:

Wie kann ich mehrere Controls an "ShellDroper" zuweisen? So dass z. B. Panel1 .. Panelx überwacht werden.

Zweitens:

Mein Test-Programm enthält die Form1, darauf sind zwei Panels (Panel1 und Panel2). Panel1 habe ich der Komponente ("ShellDropper1") zur Designtime zugewiesen. Während der Ausführung des Test-Programms funktioniert alles ( "DragEnter", "DragOver" und "DragLeave"). Jedoch beim Beenden des Test-Programms wird folgende Exeption ausgelöst:

----------------------------------------
Debugger Exception Notification
----------------------------------------
Project Project1.exe raised exception class EInvalidOperation with message 'Control 'Panel1' has no parent window'.

Danach habe ich im Code deiner Komponente fogendes hinzugefügt:
Delphi-Quellcode:
 ...

initialization
  OleInitialize(nil);

finalization
  OleUninitialize; // <-- hinzugefügt (Ist das richtig/notwendig?)

end.
Leider bleibt die oben beschriebene Exeption.

Wie kann das behoben werden?


Nochmal dickes Lob für die Komponente! Ich hoffe, dass wir zumindest das Problem mit der Exeption lösen können.

Gruß,
Guido.

xaromz 28. Okt 2006 23:15

Re: DragOver vom Explorer erkennen
 
Hallo,
Zitat:

Zitat von Guido Eisenbeis
Erstens:

Wie kann ich mehrere Controls an "ShellDroper" zuweisen? So dass z. B. Panel1 .. Panelx überwacht werden.

Dazu musst Du die Komponente etwas umbauen. Schau Dir mal die beiden Methoden "Enable" und "Disable" an. Dort wird das Control als DropTarget registriert bzw. abgemeldet. Wenn Du mehrere Controls hast, musst Du eben eine Liste verwalten. Vielleicht habe ich am Sonntag etwas Zeit, das Ganze umzuschreiben.
Zitat:

Zitat von Guido Eisenbeis
Zweitens:

Mein Test-Programm enthält die Form1, darauf sind zwei Panels (Panel1 und Panel2). Panel1 habe ich der Komponente ("ShellDropper1") zur Designtime zugewiesen. Während der Ausführung des Test-Programms funktioniert alles ( "DragEnter", "DragOver" und "DragLeave"). Jedoch beim Beenden des Test-Programms wird folgende Exeption ausgelöst:

Das liegt daran, dass beim Zerstören der Komponente das Control wieder abgemeldet werden muss. Dazu wird das Handle des Controls verwendet. Wenn dieses aber schon zerstört wird, dann ist das Handle ungültig und der Aufruf schlägt fehl. Ich sehe mir das noch mal genauer an.

Gruß
xaromz

xaromz 29. Okt 2006 10:13

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

so, jetzt kann die Komponente auch mit mehreren Controls umgehen.
Das Control, für welches das Ereignis gerade gilt, steckt im "Sender".

Die Exception sollte jetzt nicht mehr kommen. Leider habe ich es aber nicht hinbekommen, ein Control abzumelden, bevor es sein Handle verliert. Deshalb kann ich nicht garantieren, dass es hier kein Ressourcenleck gibt. Aber eigentlich sollte Windows erkennen, dass das Handle zerstört wird und selbiges abmelden.

Gruß
xaromz

Guido Eisenbeis 29. Okt 2006 12:15

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Hier schon mal ein Vorweg-Lob! In meinem Kurztest hat das sehr gut hingehauen. Und außerdem die Eingabe für mehrere Contols find ich gelungen!

Den Bereich "TShellDropper.Notification" hatte ich schon im Auge. Da scheint sich ja auch was getan zu haben.

Ich werde den neuen Code heute noch ausführlich testen und melde mich dann.

Bis dahin: Danke!

Guido.

Guido Eisenbeis 30. Okt 2006 21:04

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Es gibt eine gute und eine schlechte Nachricht.

Zuerst die Gute:

So wie die Komponente "ShellDropper" angelegt ist, das find ich echt genial. Es können kompfortabel mehrere Controls zur Überwachung angegeben werden. Jedes Control kann einzeln enabled oder disabled werden. Trozdem benutzen alle Controls die gleichen Event-Routinen (z. B. für DragEnter und DragLeave). Dadurch ist die Handhabung wirklich gut. Der Betrieb funktioniert dann auch wirklich so, wie man es sich vorstellt.

Dann die Schlechte:

Nach der Benutzung der Komponente in der IDE verhält sich die IDE "sonderbar". Es kommen z. B. Exeptions wenn ich den Code von dieser oder von anderen Komponenten ansehe. Z. B. "Forms" oder "Windows".

Dann ist es mir fast unmöglich, eine "ShellDropper"-Komponente zu löschen. Das heißt, ich setzt eine Komponente auf ein leeres Form. Ob ich nun ein anderes Control zur Überwachung zuweise oder nicht, wenn ich die "ShellDropper"-Komponente löschen will beginnt ein Exeption-Regen:

Error
---------------------------
Access violation at address 51F3155D in module 'rtl100.bpl'. Read of address 95D5C950.
---------------------------

Error
---------------------------
Invalid pointer operation
---------------------------

Error
---------------------------
Borland Delphi for Microsoft Windows: bds.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten.
---------------------------

---------------------------
Application Error
---------------------------
Exception EInvalidPointer in module rtl100.bpl at 0000657D.Invalid pointer operation.
---------------------------


Hat das vielleicht mit dem Ressourcenleck zu tun, das du erwähnt hast?

Gruß,
Guido.

xaromz 30. Okt 2006 22:37

Re: DragOver vom Explorer erkennen
 
Hallo,
Zitat:

Zitat von Guido Eisenbeis
Zuerst die Gute:
...

Das hört man gerne.
Zitat:

Zitat von Guido Eisenbeis
Dann die Schlechte:

Nach der Benutzung der Komponente in der IDE verhält sich die IDE "sonderbar". Es kommen z. B. Exeptions wenn ich den Code von dieser oder von anderen Komponenten ansehe. Z. B. "Forms" oder "Windows".

Dann ist es mir fast unmöglich, eine "ShellDropper"-Komponente zu löschen. Das heißt, ich setzt eine Komponente auf ein leeres Form. Ob ich nun ein anderes Control zur Überwachung zuweise oder nicht, wenn ich die "ShellDropper"-Komponente löschen will beginnt ein Exeption-Regen:

Das hört man nicht so gerne.
Ich habe die Komponente nur in Delphi 2006 getestet, da funktioniert sie einwandfrei. Sie ist eigentlich auch so konstruiert, dass sie in der IDE nicht aktiv wird. Ich werde mir das noch mal ansehen.
Zitat:

Zitat von Guido Eisenbeis
Hat das vielleicht mit dem Ressourcenleck zu tun, das du erwähnt hast?

Wahrscheinlich nicht, aber ausschließen kann ich es nicht. Tritt der Fehler sofort auf, oder erst, nachdem Du das Programm einmal gestartet hast?

Gruß
xaromz

Guido Eisenbeis 31. Okt 2006 21:25

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Ich benutze ebenfalls Delphi 2006.

Zitat:

Tritt der Fehler sofort auf, oder erst, nachdem Du das Programm einmal gestartet hast?
Der Fehler tritt auf, nachdem ich die IDE schließe. Dabei ist es egal, ob ich das Programm vorher gestartet habe oder die IDE einfach nur öffne und wieder schließe.

Wenn ich eine ShellDropper-Komponente löschen will kommen die Exeptions in diesem Moment. Was passiert denn bei dir, wenn du eine ShellDropper-Komponente löschst? Funktioniert das denn?

Gruß,
Guido.

xaromz 31. Okt 2006 21:59

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

der Fehler tritt bei mir ebenfalls auf.

Versuch doch mal die angehängte Version.

Gruß
xaromz

Guido Eisenbeis 2. Nov 2006 18:04

Re: DragOver vom Explorer erkennen
 
Ja, Sir! Wird gemacht Sir! :-D *grins*

Grüße,
Guido.

oschulz 3. Nov 2006 08:55

Re: DragOver vom Explorer erkennen
 
So einfach wie genial.
Einfach zu Handhaben und eine Sache die man öfter benutzten wird. Danke für die Arbeit :thumb:

Guido Eisenbeis 3. Nov 2006 21:41

Re: DragOver vom Explorer erkennen
 
@oschulz

Wust' ich's doch! Da haben sich auch noch andere für das Thema interessiert! *smile* :wink:

@xaromz

Also die ersten Test hat dein Code wunderbar bestanden. In einem Testaufbau hat alles wunderbar funktioniert, ohne Querschläger und Exeptions! Am Wochenende werde ich wahrscheinlich dazu kommen, es in "echt", also in meiner Applikation auszuprobieren. Danach werde ich gerne meine Ergebnisse mit allen teilen.

Apropos:

@alle die sich für dieses Thema und den wirklich guten Code von xaromz interessieren:
Ein Forum lebt davon, dass möglichst viele ihre Gedanken und Erfahrungen miteinander teilen. Deshalb freue ich mich, wenn der ein oder andere sich hier zu Wort meldet und sagt, ob er Fehler gefunden hat, oder ob xaromz' Code so gut funktioniert, wie es im Moment aussieht.

Viele Grüße,
Guido.

xaromz 3. Nov 2006 22:09

Re: DragOver vom Explorer erkennen
 
Hallo,
Zitat:

Zitat von Guido Eisenbeis
Also die ersten Test hat dein Code wunderbar bestanden. In einem Testaufbau hat alles wunderbar funktioniert, ohne Querschläger und Exeptions!

Freut mich, dass es jetzt klappt.
Zitat:

Zitat von Guido Eisenbeis
Am Wochenende werde ich wahrscheinlich dazu kommen, es in "echt", also in meiner Applikation auszuprobieren. Danach werde ich gerne meine Ergebnisse mit allen teilen.

Mach das.

Gruß
xaromz

OldGrumpy 8. Nov 2006 17:01

Re: DragOver vom Explorer erkennen
 
Zitat:

Zitat von xaromz
Hallo,
Zitat:

Zitat von Guido Eisenbeis
Also die ersten Test hat dein Code wunderbar bestanden. In einem Testaufbau hat alles wunderbar funktioniert, ohne Querschläger und Exeptions!

Freut mich, dass es jetzt klappt.

Mal eine ganz dumme Frage, wie benutzt man TShelldropper? :)

Ich such momentan eine Möglichkeit, einen Link aus dem Internet Explorer auf ein TEdit in meinem Programm zu ziehen, geht das mit TShelldropper? Falls nicht, ließe sich TShelldropper entsprechend erweitern?

oschulz 8. Nov 2006 17:29

Re: DragOver vom Explorer erkennen
 
Das is auch möglich. Der Shelldroper gibt dir einen String mit den markierten Dateien zurück. Die kannst du dann nach deinen Wünschen verarbeiten. Der Pfad zu den Dateien ist dabei absolut, also ein kompletter Pfad.

Edit Schreibfehler berichtigen :D

OldGrumpy 8. Nov 2006 18:15

Re: DragOver vom Explorer erkennen
 
Ja und wie wird TShelldropper nun "verdrahtet"? Kleines Codesample oder Pointer reicht ja schon, so ganz ohne Doku fühl ich mich momentan etwas "nackt" ;)

oschulz 8. Nov 2006 18:42

Re: DragOver vom Explorer erkennen
 
am Besten du installierst dir die Komponente als Package und packst sie auf deine Form. Danach wählst du Controlsliste die Controls aus, die "überwacht" werden sollen. Per Hand kannst du auch den Formularnamen eingeben. Dann kannst du bei OnDrop deinen Code einfügen. Ist sehr Simple, das bekommst du schon hin.

xaromz 9. Nov 2006 00:19

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

die Komponente kann bisher nur mit dem Format "CF_HDROP" umgehen, welches die Shell verwendet. Der IE nutzt aber das Format "CFSTR_INETURL".
Natürlich ist es kein großes Problem, die Komponente so abzuändern, dass sie auf dieses Format reagiert. Ich hab da mal was vorbereitet...

Die Komponente besitzt jetzt eine neue Eigenschaft "DropSource". Darüber kann man einstellen, ob die Komponente Dateien oder Internetlinks annimmt.

Zitat:

Zitat von OldGrumpy
...so ganz ohne Doku fühl ich mich momentan etwas "nackt" ;)

Recht viel ist ja an der Komponente nicht dran. Scheint aber langsam mehr zu werden :wink: .

Gruß
xaromz

OldGrumpy 9. Nov 2006 11:39

Re: DragOver vom Explorer erkennen
 
Ich war nur über die Designtime-Realisierung etwas irritiert. Zuerst legt man abstrakte DropControls an, die man danach dann nochmal einzeln anfasst und mit existierenden Controls verknüpft :) Ich hatte mir das gestern nur kurz mal angeschaut, werd gleich mal das neue Package kompilieren und das ganze ausprobieren :)

Edit: So, nun habe ich begriffen wie das Ding funktioniert und auch Drag and Drop aus dem IE hinbekommen. Der Trick war, das Property DropSource von TShelldropper korrekt einzustellen :)

Leider funktioniert das ganze nur mit dem IE, andere Browser sind da nicht so kooperativ. Da muss ich jetzt wohl doch Plugins bauen ;)

Gibt es eigentlich einen Grund dafür, dass man nur jeweils eine Art DropSource behandeln kann?

dataspider 9. Nov 2006 14:40

Re: DragOver vom Explorer erkennen
 
@xaromz

Delphi-Quellcode:
{ Use of this file is permitted for commercial and non-commercial }
{ use, as long as the author is credited.                         }
... ich hab kleine Probleme bei der Übersetzung.
Ich finde deine Klasse echt durchdacht und würde sie gern verwenden.
Was ist mit is credited gemeint?

Frank

xaromz 9. Nov 2006 15:18

Re: DragOver vom Explorer erkennen
 
Hallo,
Zitat:

Zitat von dataspider
... ich hab kleine Probleme bei der Übersetzung.
Ich finde deine Klasse echt durchdacht und würde sie gern verwenden.
Was ist mit is credited gemeint?

Eine Nennung des Namens wäre schön, z. B. "Diese Software verwendet Routinen von..." oder so ähnlich.
Das ist mein Standard-Disclaimer und bei dieser Komponente eigentlich Overkill. Du kannst also die Nennung auch weglassen.

Gruß
xaromz

xaromz 9. Nov 2006 15:22

Re: DragOver vom Explorer erkennen
 
Hallo,
Zitat:

Zitat von OldGrumpy
Leider funktioniert das ganze nur mit dem IE, andere Browser sind da nicht so kooperativ. Da muss ich jetzt wohl doch Plugins bauen ;)

Ist mir auch schon aufgefallen. Opera z. B. verwendet wohl ein anders Format.
Zitat:

Zitat von OldGrumpy
Gibt es eigentlich einen Grund dafür, dass man nur jeweils eine Art DropSource behandeln kann?

Das hat praktische Gründe. Ich müsste sonst in den Ereignissen noch mitteilen, was gedroppt wird (Dateien oder eine URL). Da ich keine Lust hatte, das überall mit einzubauen, gibt's eben nur entweder oder. Ich werde das aber noch überarbeiten, da z. B. ein Control keine zwei Shelldropper nutzen kann.

Gruß
xaromz

OldGrumpy 9. Nov 2006 15:43

Re: DragOver vom Explorer erkennen
 
Ah gut, ich dachte mir schon sowas. Ich hab mich mit dem Thema Drag and Drop bisher noch nicht so arg beschäftigt, aber jetzt liegts für ein Projekt halt gerade akut an. Ist allerdings auch nur "Zuckerguss" so dass ich da nicht viel Zeit investieren kann. Aber die Komponente ist schon genial, das muss man Dir lassen :)

xaromz 9. Nov 2006 19:15

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

die überarbeitete Version im Anhang (v1.2) kann jetzt mit Shell, IE und Firefox umgehen (bei Opera kommt nicht mal ein Event :cry: ). In den Ereignissen wird jetzt jeweils ein Record übergeben, in dem die Art des Objekts steht (Shell oder URL). Je nach Quelle ist entweder die StringListe (Ansi + Unicode) oder die URL gefüllt.

Gruß
xaromz

OldGrumpy 9. Nov 2006 21:18

Re: DragOver vom Explorer erkennen
 
Wow, ich bin wirklich begeistert. Das nenne ich mal prompt :) Dass Opera da recht eigensinnig ist, ist mir auch schon aufgefallen, Windows bringt beim Drag and Drop über die Taskleiste nicht mal den Zielprozess nach vorne. Da ham die Jungs vermutlich was vergessen :)

Guido Eisenbeis 27. Dez 2006 00:34

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Nach meinem letzten Posting musste ich mich auf die Abschlussprüfung meiner Umschulung vorbereiten. Diese Abschlussprüfung war Ende November. Danach musste ich mich um mein Auskommen kümmern (Jobsuche), und jetzt kam Weihnachten mit seinen Vorbereitungen.

Deshalb kam ich leider nicht dazu, deinen Code komplett zu testen. Da sich aber löblicherweise auch andere damit beschäftigt und hier keine Fehler gemeldet haben, gehe ich davon aus, dass da alles in Ordnung ist.

In nächster Zeit werde ich auch weiterhin mit Arbeitssuche beschäftigt sein (Fachinformatiker Anwendungsentwicklung). Da wird wohl keine Zeit zum Testen bleiben.

Trotzdem wollte ich mich melden und mich dem Lob der anderen DPler anschließen! Ich finde, es ist eine wirklich löbliche Sache, einen Komponente zu entwickeln und zur Verfügung zu stellen.

Vielen Dank,
Guido.

Thomasl 22. Mär 2007 22:25

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Die version 1.2 geht mit delphi 7 nicht mehr (keine WideStrings.dcu)!
Sonst super komponente!

GuenterS 7. Aug 2007 16:34

Re: DragOver vom Explorer erkennen
 
Hallo,

ich konnte mir damit behelfen aus allen Widesstrings und TWideStrings und TWideStringList, Strings, TStrings und TStringlists zu machen.

(und die WideStrings Unit auszukommentieren)

Das Problem mit MK_ALT konnte ich allerdings nicht lösen, kennt meine Delphi Version (5) nicht.


Ansonsten super Sache :)

nase09 29. Aug 2007 04:21

Re: DragOver vom Explorer erkennen
 
Hallo zusammen,

tolles Projekt! Bin nur leider zu blöd das als Package zu
installieren..(bin da noch etwas unerfahren *schäm*)
Könnte mal jemand etwas detaillierter beschreiben..
(Das ist ja nur ein Pas-File, und keine Package-Datei(dpk) :?)
Ich benutze Delphi 7 - über Component/install Packages..
geht da nix mit pas-files.. tut mir leid,bin echt ratlos,
hat vielleicht jemand Lust ein kleines Tutorial zu schreiben
(Oder wenn es sehr verzwickt ist, könnte
hier jemand für die letzte Version das .dpk reinstellen) ?

In freudiger Erwartung
..Brad

nase09 29. Aug 2007 05:16

Re: DragOver vom Explorer erkennen
 
Zitat:

Zitat von GuenterS

Das Problem mit MK_ALT konnte ich allerdings nicht lösen, kennt meine Delphi Version (5) nicht.

kannst MK_ALT einfach mit '32' ersetzten (oder 'const MK_ALT=32;' schreiben ..)

Gruß
..Brad

dominikkv 29. Aug 2007 06:07

Re: DragOver vom Explorer erkennen
 
Zitat:

Zitat von nase09
Hallo zusammen,

tolles Projekt! Bin nur leider zu blöd das als Package zu
installieren..(bin da noch etwas unerfahren *schäm*)
Könnte mal jemand etwas detaillierter beschreiben..
(Das ist ja nur ein Pas-File, und keine Package-Datei(dpk) :?)
Ich benutze Delphi 7 - über Component/install Packages..
geht da nix mit pas-files.. tut mir leid,bin echt ratlos,
hat vielleicht jemand Lust ein kleines Tutorial zu schreiben
(Oder wenn es sehr verzwickt ist, könnte
hier jemand für die letzte Version das .dpk reinstellen) ?

In freudiger Erwartung
..Brad

erstelle ein eigenes package, rechts im projektmanager rechtsklick auf das package und die pas hinzufügen.
dann speichern und nochmal rechtsklick -> installieren.

nase09 29. Aug 2007 06:42

Re: DragOver vom Explorer erkennen
 
Zitat:

Zitat von dominikkv
erstelle ein eigenes package, rechts im projektmanager rechtsklick auf das package und die pas hinzufügen.
dann speichern und nochmal rechtsklick -> installieren.

aach soooo :shock:
(der gute alte Projektmanager, den sollte ich mal gründlich studieren..,
das mit den Packages ist ja wirklich sehr praktisch wie ich hier sehe..)
jetzt gehts *freu*
nur schade, daß Opera sich verweigert. Vielleicht bekommt das hier doch noch jemand hin (?)
Drag&Drop aus Opera auf den Desktop geht - müßte doch also irgendwie möglich sein..

Vielen Dank
..Brad

GuenterS 29. Aug 2007 22:21

Re: DragOver vom Explorer erkennen
 
Was noch ein Hit wäre...

wäre Unterstützung für Drag&Drop direkt aus Outlook.

Anhänge aus Thunderbird gehen ja jetzt schon nur bei Outlook-Anhängen reagiert noch nichts.

Wäre das denkbar und lösbar?

xaromz 30. Aug 2007 08:43

Re: DragOver vom Explorer erkennen
 
Hallo,

ich kann mir mal anschauen, was da von Outlook kommt, wenn man einen Anhang droppt. Dazu komme ich aber wahrscheinlich erst nächste Woche.
Was kommt denn von Thunderbird an? Der Dateiname? Welchen Pfad hat der dann?

Gruß
xaromz

GuenterS 1. Sep 2007 13:52

Re: DragOver vom Explorer erkennen
 
Hallo,

habe gerade nachsehen können, was kommt wenn man von Thunderbird ein Attachement bekommt. Der macht das dann über das Filesystem


Wenn man Attachement mit Namen A.xls droppt, steht bei mir C:\Dokumene~1\guenter\LOKALE~1\Temp\A.xls

Er machts also anscheinend über das Temp Verzeichnis des jeweiligen Users.

Schön wärs natürlich wenn die gesamte Email auch ginge.

xaromz 5. Sep 2007 12:55

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

Jetzt geht also auch Outlook. Es ist wohl so, dass Outlook einen etwas anderen Weg geht: es übergibt die Dateien als Stream. Das führt zu ein paar Änderungen in der Komponente:
  • Die Dateieigenschaft (TFileType) hat ein neues Feld 'ftTemporary'. Dieses wird gesetzt, wenn eine Datei aus einem Stream stammt
  • Dateien, deren FileType 'dsTemporary' enthält, werden erst beim Droppen tatsächlich erzeugt und sind vorher (DragOver, DragEnter) nicht vorhanden.
  • Dateien, deren FileType 'dsTemporary' enthält, müssen vom Programm manuell gelöscht werden.
Leider funktioniert das Droppen ganzer Mails nicht. Ich bekomme zwar einen gültigen Dateinamen (deshalb scheint es zuerst auch zu funktionieren), wenn ich aber den Stream speichern will, bekomme ich einen Fehler (E_INVAILDARG). Ich weiß nicht, ob ich das noch hinbekomme.

Gruß
xaromz

Guido Eisenbeis 6. Sep 2007 11:41

Re: DragOver vom Explorer erkennen
 
Hallo xaromz.

Es ist schon erstaunlich, was sich aus meinem kleinen Anfangsproblem entwickelt hat. Die ShellDropper.pas ist ja nun eine Komponente geworden, die wirklich einige Features zu bieten hat.

Lob und Dank für deine Arbeit! :thumb:

Viele Grüße,
Guido.

PS: Wenn die Komponente jetzt auch noch Kaffee kochen könnte, ... ! :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.
Seite 1 von 2  1 2      

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