Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Windows Explorer dan delphi formuna dosya Drag&Drop işlemi örneği
#1
Selamlar

Belki birisine lazım olur diye burayada kalsın
Windows Explorer üzerinden delphide açık olan bir form üzerine dosya süreükle bırak işlemi örneğidir.
Bu örnek sürüklenen dosyanın full path bilgisi ile bir listbox içerisine ekler.

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, Vcl.Forms, SysUtils, Variants, Classes, Graphics, Controls, Dialogs, StdCtrls, Vcl.AppEvnts;


type
 PChangeFilterStruct = ^TChangeFilterStruct;
 TChangeFilterStruct = record
   cbSize: DWORD;
   ExtStatus: DWORD;
 end;

function ChangeWindowMessageFilterEx(
 hWnd: HWND;
 Msg: UINT;
 Action: DWORD;
 ChangeFilterStruct: PChangeFilterStruct
): BOOL; stdcall; external 'user32.dll';

const
 MSGFLT_ALLOW = 1;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   procedure FormDestroy(Sender: TObject);
   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}

uses ShellAPI;


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

{$REGION 'Bu yapi tüm uygulama için geçerli olacak şekilde sürükle bırak kontrollerini sağlıyor'}
{
  ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);
  ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);
  ChangeWindowMessageFilter ($0049, MSGFLT_ADD);
}
{$ENDREGION}

{$REGION 'Bu yapi sadece pencere bazında geçerli olacak şekilde sürükle bırak kontrollerini sağlıyor'}
  ChangeWindowMessageFilterEx(Form1.Handle, WM_DROPFILES, MSGFLT_ALLOW, nil);
  ChangeWindowMessageFilterEx(Form1.Handle, WM_COPYDATA, MSGFLT_ALLOW, nil);
  ChangeWindowMessageFilterEx(Form1.Handle, $0049, MSGFLT_ALLOW, nil);
{$ENDREGION}

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Form1.Handle, False);

end;

procedure TForm1.WMDropFiles(var Msg: TMessage);
var
hDrop: THandle;
FileCount: Integer;
NameLen: Integer;
I: Integer;
S: string;

begin
hDrop:= Msg.wParam;
FileCount:= DragQueryFile (hDrop , $FFFFFFFF, nil, 0);

for I:= 0 to FileCount - 1 do begin
  NameLen:= DragQueryFile(hDrop, I, nil, 0) + 1;
  SetLength(S, NameLen);
  DragQueryFile(hDrop, I, Pointer(S), NameLen);

  Listbox1.Items.Add (S);
end;

DragFinish(Msg.WParam);
end;

end.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
Elinize sağlık, kütüphaneme ekliyorum lazım olur mutlaka.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yapay zeka delphi kl007 9 686 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 565 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 388 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 1.372 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  Delphi ile SQL server bağlantı hatası yakalama Under 20 2.047 21-11-2025, Saat: 15:24
Son Yorum: mrmarman



Konuyu Okuyanlar: