728x90
요즘 이메일 보낼때나 구글 드라이브를 사용하여 웹 브라우저에서 파일을 업로드 할 때
파일을 간단히 끌어서 놓기만 하면 첨부가 된다
이와 같은 기능을 델파이 윈도우 폼에서 구현해보자 한다
메인폼 화면에서 파일을 해당 폼에 끌어놓으면 에디터에 경로가 찍히게 만들어보려고 한다
1. 메인 폼에서 OnCreate 이벤트에 DragAcceptFiles(Handle, True);
OnClose 이벤트에 DragAcceptFiles(Handle, False); 를 각각 추가하여 드래그 허용을 해준다
(이 허용을 하고 실행시 파일을 끌어서 폼 위에 올리면 마우스포인터에 +모양이 추가로 보인다)
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DragAcceptFiles(Handle, False);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
2. 폼의 private 혹은 public부분에 파일 드롭 윈도우 메세지를 수신할 수 있는 함수를 추가한다
procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
3. 드롭파일 메세지를 처리할 함수(WMDropFiles)를 구현한다
procedure TfrmMain.WMDropFiles(var Msg: TMessage);
var
i, NumFiles, NameLength: Integer;
hDrop: THandle;
tmpFile: array [0..MAX_PATH] of Char;
begin
hDrop := Msg.WParam;
try
NumFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
for i:=0 to NumFiles-1 do begin
NameLength:=DragQueryFile(hDrop, i, nil, 0);
DragQueryFile(hDrop, i, tmpFile, NameLength+1);
edtAddPath.Text := tmpFile;
end;
finally
DragFinish(hDrop);
SetForegroundWindow(Handle);
end;
end;
※주의점 윈도우10 델파이 2010에서 해본 결과 관리자 권한이 들어가면 해당 기능이 동작하지 않습니다
IDE를 관리자권한으로 실행하면 디버깅시 해당기능이 동작하지 않습니다
파일에 관리자권한이 필요할때가 많을텐데 내부에서 따로 처리를 해줘야 할듯 합니다...ㅠ
728x90
'운동하는 개발자 > Delphi' 카테고리의 다른 글
델파이 JSON String 파싱 / delphi json parsing (0) | 2021.07.02 |
---|---|
델파이 중복 실행 (델파이 다중 실행 IDE 두개 켜기) (0) | 2021.06.16 |
delphi, lazarus 동작시간 계산 (0) | 2021.04.23 |
Delphi JEDI Error / Exception in an expert of the JCL / An Exception was raised in an expert of the JCL / EJclExpertException (0) | 2021.03.23 |
델파이 검색(Find In Files) 에러 / There is no associated form for (GExpert) (0) | 2021.03.23 |