Fonte: www.activedelphi.com.br
Operações de arrastar são comuns em aplicações Win32. Quando trabalhamos com o Windows Explorer, podemos copiar, mover e até excluir arquivos utilizando o recurso "arrastar e soltar". A VCL do Delphi já possui implementação para trabalharmos com "Drag and Drop", mas para aceitar arquivos externos, temos de trabalhar com as mensagens da API do Windows.
Sabemos que o arrastar começa quando um objeto é movido com o botão do mouse pressionado e, ao largar o botão, acontece o soltar. Para um "objeto janela" (formulário do Delphi) ser capaz de aceitar um arquivo "soltado" do Windows, é necessário uma chamada ao método DragAcceptFiles. Depois, precisamos de um gerenciador para a mensagem WM_DROPFILES.
Para montar o exemplo, em uma nova aplicação, adicione ao uses a unit ShellApi. Acrescente ao form um Memo e no evento onCreate, faça:
procedure TForm1.FormCreate(Sender: TObject);
begin
//informa ao SO que o form está pronto para receber o "soltar"
DragAcceptFiles( Handle , True ) ;
end;
Em seguida, na seção private do forme, faça a seguinte declaração:
private
{ Private declarations }
procedure WMDROPFILES(var msg: TWMDropFiles); message WM_DROPFILES;
E por último, implemente este método, que fará o gerenciamento das mensagens WM_DROPFILES, conforme o código asseguir:
procedure TForm1.WMDROPFILES(var msg: TWMDropFiles);
const
MAXFILENAME = 255;
var
cnt, Qtde: integer;
Nome: array [0..MAXFILENAME] of char;
begin
//quantos arquivos estão sendo "soltados" na aplicação
Qtde := DragQueryFile(msg.Drop, $FFFFFFFF, Nome, MAXFILENAME);
//percorre a lista de arquivos
for cnt := 0 to Qtde-1 do
begin
//recupera o nome
DragQueryFile(msg.Drop, cnt, Nome, MAXFILENAME) ;
//aqui, fazemos o que for necessário com o arquivo, onde neste caso
//apenas adicionamos seu nome à primeira linha do Memo
memo1.Lines.Insert(0, Nome) ;
end;
//libera a memória
DragFinish(msg.Drop) ;
end;
Sabemos que o arrastar começa quando um objeto é movido com o botão do mouse pressionado e, ao largar o botão, acontece o soltar. Para um "objeto janela" (formulário do Delphi) ser capaz de aceitar um arquivo "soltado" do Windows, é necessário uma chamada ao método DragAcceptFiles. Depois, precisamos de um gerenciador para a mensagem WM_DROPFILES.
Para montar o exemplo, em uma nova aplicação, adicione ao uses a unit ShellApi. Acrescente ao form um Memo e no evento onCreate, faça:
procedure TForm1.FormCreate(Sender: TObject);
begin
//informa ao SO que o form está pronto para receber o "soltar"
DragAcceptFiles( Handle , True ) ;
end;
Em seguida, na seção private do forme, faça a seguinte declaração:
private
{ Private declarations }
procedure WMDROPFILES(var msg: TWMDropFiles); message WM_DROPFILES;
E por último, implemente este método, que fará o gerenciamento das mensagens WM_DROPFILES, conforme o código asseguir:
procedure TForm1.WMDROPFILES(var msg: TWMDropFiles);
const
MAXFILENAME = 255;
var
cnt, Qtde: integer;
Nome: array [0..MAXFILENAME] of char;
begin
//quantos arquivos estão sendo "soltados" na aplicação
Qtde := DragQueryFile(msg.Drop, $FFFFFFFF, Nome, MAXFILENAME);
//percorre a lista de arquivos
for cnt := 0 to Qtde-1 do
begin
//recupera o nome
DragQueryFile(msg.Drop, cnt, Nome, MAXFILENAME) ;
//aqui, fazemos o que for necessário com o arquivo, onde neste caso
//apenas adicionamos seu nome à primeira linha do Memo
memo1.Lines.Insert(0, Nome) ;
end;
//libera a memória
DragFinish(msg.Drop) ;
end;
Nenhum comentário:
Postar um comentário