![]() |
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:
Bekäme man das irgendwie hin und muss ich für so eine Operation irgendetwas includen ("uses ...")?
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin if (Source = [eine Datei]) then Edit1.Text = Source.Filename; end; Grüße kallC |
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:
Wenn du mehrere Dateien auswerten willst, musst du den Rückgabewert von DragQueryFile auswerten und in einer Schleife DragQueryFile aufrufen.
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;
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; |
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). |
Re: Dateinamen in Edit-Feld onDragDrop
Hast du auch DragAcceptFiles aufgerufen?
|
Re: Dateinamen in Edit-Feld onDragDrop
Delphi-Quellcode:
Das ist eingebaut. Muss das an eine besondere Stelle?
procedure TForm1.FormCreate(Sender: TObject);
begin DragAcceptFiles(Self.Handle, True); end; Vielen Dank für deine Mithilfe! |
Re: Dateinamen in Edit-Feld onDragDrop
Delphi-Quellcode:
So sieht der komplette Code aufs Wesentliche reduziert aus. Vielleicht habe ich ja schon hier einen Fehler gemacht.
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. |
Re: Dateinamen in Edit-Feld onDragDrop
Hai kallculator,
bei mir geht der Code ohne Probleme (Delphi 7). |
Re: Dateinamen in Edit-Feld onDragDrop
Läuft bei mir unter Windows 95 mit Delphi 3 und unter Windows XP mit Delphi 5 einwandfrei.
|
Re: Dateinamen in Edit-Feld onDragDrop
Zitat:
:( 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. |
Re: Dateinamen in Edit-Feld onDragDrop
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich hänge mein Projekt mal an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
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