Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Drag&Drop von Dateien aus Explorer (https://www.delphipraxis.net/85351-drag-drop-von-dateien-aus-explorer.html)

Flare 29. Jan 2007 18:00


Drag&Drop von Dateien aus Explorer
 
Hallo liebe DP'ler!

Ich stehe gerade vor einem seltsamen Problem.

Ich habe folgenden Code (gekürzt):
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ID3V2, ShellApi, StdCtrls;

type
  TForm1 = class(TForm)
    files: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure WMDROPFILES(var Msg: TMessage); message WM_DROPFILES;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMDROPFILES(var Msg: TMessage);
var i, anzahl, size: integer;
  Dateiname: PChar;
begin
  inherited;
  Dateiname := '';
  anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255);
  for i := 0 to (anzahl - 1) do
  begin
    size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
    Dateiname:= StrAlloc(size);
    DragQueryFile(Msg.WParam, i, Dateiname, size);
    files.Items.Add(Dateiname);
    StrDispose(Dateiname);
  end;
  DragFinish(Msg.WParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Form1.Handle, true);
end;

end.
Dieser Code sollte eigentlich alle Dateien mit ihrem Dateinamen in meine ListBox (files) eintragen, macht er aber nicht. Er ruft nicht mal WMDROPFILES auf.

Das seltsame daran: Ich bin mir sicher, dass ich exakt diesen Code schon mal in einem anderen Programm zum laufen bekommen habe (habe es halt jetzt nurdort rauskopiert)

Ich hoffe ihr könnt mir helfen.


Flare

Trödel 29. Jan 2007 18:07

Re: Drag&Drop von Dateien aus Explorer
 
Versuch es mal damit:
OnFileDrop

xaromz 29. Jan 2007 18:49

Re: Drag&Drop von Dateien aus Explorer
 
Hallo,

oder meinen ShellDropper.

Gruß
xaromz

semo 29. Jan 2007 19:28

Re: Drag&Drop von Dateien aus Explorer
 
ich habe mal von einer weile ein beispiel geschrieben - siehe hier: http://www.hassmann-software.de/content/view/121/42/

Flare 29. Jan 2007 19:45

Re: Drag&Drop von Dateien aus Explorer
 
Danke für die Antworten.

Ich habe mich bis jetzt nur mit xaromz Komponente auseinandergesetzt und es funktioniert ebenfalls nicht.
Das ist, was ich habe:
Delphi-Quellcode:
procedure TForm1.ShellDropper1Drop(Sender: TObject; const DropRec: TDropRec);
var i: integer;
begin
  for i := 0 to DropRec.Files.Count - 1 do
  begin
    Files.Items.Add(DropRec.Files.Strings[i]);
  end;
end;
In ShellDropper1 ist Files als Control eingetragen und Enabled ist auch True aber er macht dennoch nix. Es wird einfach keine Methode von ShellDropper1 aufgerufen. Wenn ich mit meinen Dateien über die ListBox fahre, bleibt auch der Cursor so, dass er mir signalisiert, dass ich dort nix ablegen darf.

Muss man da irgendwie noch mehr einstellen? In dem Post wo xaromz die Komponente vorgestellt hat, wurde ja auch nur eine sehr spärliche Erklärung dazu geliefert (wobei die eigentlich reichen müsste).


Flare

//Edit: Dürfte eigentlich nicht ausschlaggebend sein, aber kann es sein, dass es an Vista liegt, dass mein Code nicht klappt? Wäre dann nur die Frage, warum es mit meinem anderen Programm klappt.

SirThornberry 29. Jan 2007 19:48

Re: Drag&Drop von Dateien aus Explorer
 
Wie sieht denn der Cursor aus wenn du Dateien auf dein Form ziehst? Ist deine Form eventuell von einem Panel etc. verdeckt so das man nichts mehr direkt auf das Form ablegen kann? Der Quelltext von dir sollte an sich funktionieren. Einziger Haken ist das du bereits im OnCreate das DropFiles erlaubst und danach teilweise sich das Handle noch ändert.

Achja, du schreibst das sich der Cursor nicht ändert wenn du eine Datei auf deine Listbox ziehst. Das ist auch klar denn du machst das ganze ja für das Formular und nicht für die Listbox.

Flare 29. Jan 2007 19:52

Re: Drag&Drop von Dateien aus Explorer
 
Zitat:

Zitat von SirThornberry
Wie sieht denn der Cursor aus wenn du Dateien auf dein Form ziehst?

Es ist der bekannte durchgestrichene Kreis, der signalisieren soll, dass man dort nix ablegen kann.

Zitat:

Zitat von SirThornberry
Ist deine Form eventuell von einem Panel etc. verdeckt so das man nichts mehr direkt auf das Form ablegen kann?

Nein, es ist auf der Form nur eine ListBox, 4 Buttons, ein Label und 3 Radio-Buttons und die überlagern sich keinesfalls.

Zitat:

Zitat von SirThornberry
Einziger Haken ist das du bereits im OnCreate das DropFiles erlaubst und danach teilweise sich das Handle noch ändert.

Wo soll ich es dann hinsetzen? Bei meinem anderen Programm habe ich es auch exakt an dieser Stelle und dort funktioniert es einwandfrei.


Flare

SirThornberry 29. Jan 2007 20:08

Re: Drag&Drop von Dateien aus Explorer
 
ob es im OnCreate funktioniert hängt davon ab ob das Form danach nochmal ein neues Handle bekommt (durch setzen des FormStyle etc.). Du könntest noch versuchen das ganze probehalber in ein ButtonClick zu setzen.
Ansonsten würde ich vermuten das Vista da wieder was anders macht.

Flare 29. Jan 2007 20:12

Re: Drag&Drop von Dateien aus Explorer
 
Habe es jetzt auf nen ButtonClick gesetzt, selbes Ergebnis.
Ich lasse es jetzt erstmal mit dem Versuch unter Vista das zum laufen zu bekommen :wall:
Trotzdem ein großes Danke an euch 4!


Flare


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.

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