Q&A

  • 탐색기에서 선택된 파일목록을 델프로그램에서 얻기
안녕하세요?

여기는 참 많은 량의 고급정보가 있네요.

델을 이제 마악 배우는 사람입니다.



탐색기에서 선택된 파일목록을 델파이 프로그램에서 얻고자 합니다.

여기저기 뒤져 보았는데 못 찾았어요.



델 전문가들의 도움을 구합니다.

제발 도와 주~~~~~세요. (한잔 살께요)



1  COMMENTS
  • Profile
    김영대 1999.07.30 05:13
    나기향 께서 말씀하시기를...

    > 안녕하세요?

    > 여기는 참 많은 량의 고급정보가 있네요.

    > 델을 이제 마악 배우는 사람입니다.

    >

    > 탐색기에서 선택된 파일목록을 델파이 프로그램에서 얻고자 합니다.

    > 여기저기 뒤져 보았는데 못 찾았어요.

    >

    > 델 전문가들의 도움을 구합니다.

    > 제발 도와 주~~~~~세요. (한잔 살께요)

    >



    술~ 언제 사실건데요?



    // 실행은 Button1을 클릭하여 원도우즈 탐색기를 실행시킨 후

    // 탐색기의 파일 몇개를 drag하여 이 폼위에 drop 하면 됩니다

    // 참고 사이트:

    // WM_DROPFILES 메시지 방식이 아닌 OLE drag&drop 으로 구현한 예제가 있는곳

    // ftp://www.melander.dk/anme/delphi/DragDropDemo.zip

    // http://godard.oec.uni-osnabrueck.de/student_home/dsteinwe/delphi/DietersDelphiSite.htm



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ShellAPI;



    type

    TForm1 = class(TForm)

    Memo1: TMemo;

    Button1: TButton;

    procedure FormActivate(Sender: TObject);

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }



    // handles the WM_DROPFILES message

    procedure WMDropFiles(var msg : TMessage); message WM_DROPFILES;

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    // WM_DROPFILES 메시지를 처리하는 handler

    procedure TForm1.WMDropFiles(var msg: TMessage);

    var

    i, NumFiles, NameLength: integer;

    hDrop: THandle; {Handle for Msg.wParam}

    TempFile: array[0..MAX_PATH] of Char;

    begin

    Memo1.Lines.Clear;



    try

    {1. drop handle 을 얻는다}

    hDrop := msg.WParam;



    {2. 얼마나 많은 파일들이 드롭되었는지 검사}

    NumFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, 0);



    {3. Loop}

    for i := 0 to (NumFiles - 1) do

    begin

    {4. drop된 파일명의 길이는 구한다}

    NameLength := DragQueryFile(hDrop, i, nil, 0);



    {6. drop된 파일명을 구한다}

    DragQueryFile(hDrop, i, TempFile, NameLength+1);



    Memo1.Lines.Add(StrPas(TempFile));

    end;

    finally

    DragFinish(hDrop);

    end;



    {7. Return zero.}

    msg.Result := 0;



    inherited;

    end;



    procedure TForm1.FormActivate(Sender: TObject);

    begin

    // Drop Files 가능하게 setting

    DragAcceptFiles(Form1.Handle, True);

    end;



    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    begin

    // Drop Files 기능 무효화

    DragAcceptFiles(Form1.Handle, False);

    CanClose := True;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    RunCommand: array[0..MAX_PATH] of Char;

    begin

    // 원도우즈 탐색기를 구동한다

    GetWindowsDirectory(RunCommand, MAX_PATH);

    StrCat(RunCommand, PChar('EXPLORER.EXE /n,/e'));

    WinExec(RunCommand, SW_SHOWNORMAL);

    end;



    end.