Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 17 de Outubro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
66 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Arrastando arquivos para a aplicação
Publicado por KMerlotti : Terça, Março 15, 2011 - 12:19 GMT-3 (1155 leituras)
Comentários 4 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Kelver Merlotti 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;

Espero que seja útil!

Por: Kelver Merlotti - Coordenador Editorial
Contato: kelver@activedelphi.com.br
Fonte: http://delphi.about.com



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: marone (rod.alves88@gmail.com) : Mar 15, 2011 - 09:28
(Informações sobre o membro | Enviar uma mensagem)
Kelver,

Muito bom seu artigo! Gostaria de saber se há uma forma de aplicar este conceito em outros objetos que não o form?

Abraço!
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados