Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateinamen in Edit-Feld onDragDrop (https://www.delphipraxis.net/41943-dateinamen-edit-feld-ondragdrop.html)

kallculator 11. Mär 2005 01:24


Dateinamen in Edit-Feld onDragDrop
 
Hallo allerseits,
habe mich heute zum ersten Mal in Delphi versucht und hänge jetzt bei dem Versuch, den Namen einer Datei, die ich auf das Fenster meiner Anwendung ziehe, in eine Edit-Box einzufügen.

Vereinfacht dargestellt:
Delphi-Quellcode:
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if (Source = [eine Datei]) then
    Edit1.Text = Source.Filename;
end;
Bekäme man das irgendwie hin und muss ich für so eine Operation irgendetwas includen ("uses ...")?

Grüße
kallC

Sprint 11. Mär 2005 02:33

Re: Dateinamen in Edit-Feld onDragDrop
 
Du musst Windows sagen, dass dein Programm Dateien per Drag & Drop akzeptiert. Und dann musst du deine TForm um eine Nachrichtenschleife erweitern.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...
  private
    { Private-Deklarationen }
    procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
  ...
  end;
Delphi-Quellcode:
uses ShellAPI;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Self.Handle, True);
end;
Delphi-Quellcode:
procedure TForm1.WMDropFiles(var Message: TWMDropFiles);
var
  Buffer: array[0..MAX_PATH] of Char;
begin

  DragQueryFile(Message.Drop, 0, @Buffer, SizeOf(Buffer));
  Edit1.Text := Buffer;

end;
Wenn du mehrere Dateien auswerten willst, musst du den Rückgabewert von DragQueryFile auswerten und in einer Schleife DragQueryFile aufrufen.

Delphi-Quellcode:
procedure TForm1.WMDropFiles(var Message: TWMDropFiles);
var
  Count: Integer;
  I: Integer;
  Buffer: array[0..MAX_PATH] of Char;
begin

  Memo1.Clear;
  Count := DragQueryFile(Message.Drop, UINT(-1), nil, 0);

  for I := 0 to Count - 1 do
  begin
    DragQueryFile(Message.Drop, I, @Buffer, SizeOf(Buffer));
    Memo1.Lines.Add(Buffer);
  end;

end;

kallculator 11. Mär 2005 09:51

Re: Dateinamen in Edit-Feld onDragDrop
 
Vielen Dank für deine ausführliche Antwort! :-D

Das ganze habe ich jetzt erst einmal für nur eine Datei eingebaut. Wenn ich "Run" klicke, werden keine Fehler angezeigt und ich bekomme meine exe-Datei. Nur passiert nichts, sobald ich eine Datei auf dem Window droppen will ("Nicht verfügbar"-Mauszeiger).

Sprint 11. Mär 2005 17:35

Re: Dateinamen in Edit-Feld onDragDrop
 
Hast du auch DragAcceptFiles aufgerufen?

kallculator 11. Mär 2005 18:24

Re: Dateinamen in Edit-Feld onDragDrop
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Self.Handle, True);
end;
Das ist eingebaut. Muss das an eine besondere Stelle?
Vielen Dank für deine Mithilfe!

kallculator 12. Mär 2005 07:50

Re: Dateinamen in Edit-Feld onDragDrop
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
  procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Self.Handle, True);
end;

procedure TForm1.WMDropFiles(var Message: TWMDropFiles);
var
  Buffer: array[0..MAX_PATH] of Char;
begin

  DragQueryFile(Message.Drop, 0, @Buffer, SizeOf(Buffer));
  Edit1.Text := Buffer;

end;

end.
So sieht der komplette Code aufs Wesentliche reduziert aus. Vielleicht habe ich ja schon hier einen Fehler gemacht.

Sharky 12. Mär 2005 08:02

Re: Dateinamen in Edit-Feld onDragDrop
 
Hai kallculator,

bei mir geht der Code ohne Probleme (Delphi 7).

Sprint 12. Mär 2005 08:33

Re: Dateinamen in Edit-Feld onDragDrop
 
Läuft bei mir unter Windows 95 mit Delphi 3 und unter Windows XP mit Delphi 5 einwandfrei.

kallculator 12. Mär 2005 09:52

Re: Dateinamen in Edit-Feld onDragDrop
 
Zitat:

Zitat von Sharky
Hai kallculator,

bei mir geht der Code ohne Probleme (Delphi 7).

nur das Debuggen oder auch das Drag'n'Droppen? Egal welche Datei ich in das Fenster ziehe, es geht nicht.

:(
Was läuft bei mir falsch? Habe Delphi Personal 7 auf Win XP (ein Visual Style dürfte ja nichts ausmachen).
Muss ich bestimmte Form Properties auswählen (BorderStyle, FormStyle, usw.)? Habe den Standard (Neu...) drin.

Sharky 12. Mär 2005 10:01

Re: Dateinamen in Edit-Feld onDragDrop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von kallculator
...oder auch das Drag'n'Droppen? ...

Auch das Droppen.

Ich hänge mein Projekt mal an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 2  1 2      

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