1. uses에 ShellAPI를 추가합니다.
uses
.., ShellAPI;
2. 폼의 OnCreate와 OnClose에 파일을 받을 컴포넌트의 핸들을 넘겨 Drag&Drop을 허용/비허용합니다.
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Form1.Handle, True);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DragAcceptFiles(Form1.Handle, False);
end;
3. 폼에 WM_DROPFILES의 윈도우 메시지를 상속받는 함수를 생성합니다.
type
TForm1 = class(TForm)
..
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
public
{ Public declarations }
end;
4. 가져온 파일 정보로 원하는 다음 프로세스를 진행합니다.
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
DropHandle: HDROP;
nFileCount: Integer;
nLength: Integer;
sFileName: string;
I: Integer;
begin
inherited;
DropHandle := Msg.Drop;
try
nFileCount := DragQueryFile(DropHandle, $FFFFFFFF, nil, 0);
for I := 0 to Pred(nFileCount) do begin
nLength := DragQueryFile(DropHandle, I, nil, 0);
SetLength(sFileName, nLength);
DragQueryFile(DropHandle, I, PChar(sFileName), nLength + 1); //참조 -> https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-dragqueryfilea
ShowMessage(sFileName);
end;
finally
DragFinish(DropHandle);
end;
Msg.Result := 0;
end;
반응형