23-01-2025, Saat: 15:01
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.
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.

