바탕화면이나 탐색기 등에서 파일을 폼에 드래그 앤 드롭하면 실행시켜주는 프로그램.
가장 먼저 선행되어야 할 것은 FormCreate 등에 드래그&드롭이 가능하도록 설정하는 일이다.
procedure TfrmMain.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True); // 드래그&드롭이 가능하도록
end;
그리고 폼의 public 에 WM_DROPFILES 메세지를 받아먹을 이벤트 핸들러를 구현한다. (사실 이게 끝이다..)
type
TfrmMain=class(TForm)
... 중략 ...
public
procedure WMDropFiles(var msg: TMessage); message WM_DROPFILES;
아래는 구현부다. 드래그 앤 드롭된 파일을 실행시키는 일을 한다.
// Drag&Drop 이벤트 핸들러
procedure TfrmMain.WMDropFiles(var msg: TMessage);
var
i, NumFiles, NameLength: Integer;
hDrop: THandle;
tmpFile: array [0..MAX_PATH] of Char;
begin
{1} // Drop 핸들 얻기
hDrop:=msg.WParam;
try
{2} // 몇개의 파일이 드롭되었는가
NumFiles:=DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
{3} // 드롭된 파일 수 만큼 루프를 돌며 실행시킴
for i:=0 to NumFiles-1 do begin
{4} // 파일이름 String 의 길이를 얻어옴
NameLength:=DragQueryFile(hDrop, i, nil, 0);
{5} // 드롭된 파일의 이름을 받아옴
DragQueryFile(hDrop, i, tmpFile, NameLength+1);
{6-1} // 파일이 있다면 open 을 통해 실행시킴
if FileExists(StrPas(tmpFile)) then begin
ShellExecute(GetDesktopWindow, 'open', PChar(StrPas(tmpFile)), nil, nil,
SW_SHOWNORMAL);
end
{6-2} // 파일이 없다면 명령행 인자가 있을지도 모르므로 open이 아니라 실행
else begin
WinExec(tmpFile, SW_SHOWNORMAL);
end;
end; // for
finally
DragFinish(hDrop); // 핸들 해제
end;
msg.Result:=0;
inherited;
end;
'Delphi' 카테고리의 다른 글
[Delphi] 프로세스 우선순위 올리기 (0) | 2009.04.18 |
---|---|
[Delphi] 작업표시줄에 나타나지 않기 (0) | 2009.04.18 |
[Delphi] 바탕화면을 내 폼안으로 (0) | 2009.04.18 |
[Delphi] Zip 압축관련 Component (ZipMaster) (0) | 2009.04.18 |
[Delphi] 디렉토리 선택 Dialog 띄우기 (0) | 2009.04.18 |