{Inicie um novo projeto no delphi, coloque um componente Memo e um ListBox no formulário e, declare a procedure abaixo na área private da Unit do seu formulário, ela é um manipulador para mensagem da operação de drag-and-drop(arrastar-e-soltar) de arquivos:
Eu descobri este recurso valioso quando procurava uma maneira mais rápida de pegar o caminho de arquivos, para uma aplicação multimídia que estou desenvolvendo. Ai voc não tem que ficar colocando OpenDialog(hehehe...) pra ficar abrindo arquivos, até porque a maioria dos usuários já conhecem esse recurso.
bom proveito!!
}
procedure TForm1.WMDropFiles(var Msg: TMessage); var
I, FileCount, BufferSize: word;
Drop: HDROP;
FileName: string;
Pt: TPoint;
RctListBox, RctMemo: TRect; begin { Pega o manipulador (handle) da operação
"arrastar e soltar" (drag-and-drop) }
Drop := Msg.wParam;
{ Pega a quantidade de arquivos soltos (dropped) }
FileCount := DragQueryFile(Drop, $FFFFFFFF, nil, 0);
{ Se nenhum arquivo... } if FileCount = 0 thenbegin
ShowMessage('Nenhum arquivo.');
Exit; end;
{ Pega o retângulo do ListBox }
RctListBox := ListBox1.BoundsRect;
{ Pega o retângulo do Memo }
RctMemo := Memo1.BoundsRect;
{ Se soltou fora da área cliente do form... } ifnot DragQueryPoint(Drop, Pt) then
ShowMessage('Arquivos soltos fora da área cliente do form') { Se soltou na área do ListBox... } elseif PtInRect(RctListBox, Pt) thenbegin { Pega todos os nomes de arquivos e coloca no ListBox } for I := 0 to FileCount -1 dobegin { Obtém o comprimento necessário para o nome do arquivo,
sem contar o caractere nulo do fim da string. }
BufferSize := DragQueryFile(Drop, I, nil, 0);
SetLength(FileName, BufferSize +1); { O +1 é p/ nulo do fim da string } if DragQueryFile(Drop, I, PChar(FileName), BufferSize+1) = BufferSize then
ListBox1.Items.Add(string(PChar(FileName))) else
ShowMessage('Erro ao obter nome do arquivo.'); end; { Se soltou na área do Memo... } endelseif PtInRect(RctMemo, Pt) thenbegin if FileCount > 1 then
ShowMessage('Será mostrado apenas o conteúdo do primeiro arquivo.');
{ Obtém o comprimento necessário para o nome do arquivo,
sem contar o caractere nulo do fim da string.
O segundo parâmetro (zero) indica o primeiro arquivo da lista }
BufferSize := DragQueryFile(Drop, 0, nil, 0);
SetLength(FileName, BufferSize +1); { O +1 é p/ nulo do fim da string } if DragQueryFile(Drop, 0, PChar(FileName), BufferSize+1) = BufferSize then
Memo1.Lines.LoadFromFile(string(PChar(FileName))) else
ShowMessage('Erro ao obter nome do arquivo.'); end;
Msg.Result := 0;
end;
procedure TForm1.FormCreate(Sender: TObject); begin //A função abaixo ativa o recurso de arrastar e soltar arquivos sobre //seu aplicativo
DragAcceptFiles(Handle, true); end;
procedure TForm1.FormDestroy(Sender: TObject); begin
DragAcceptFiles(Handle, false); end;