Quem quiser dar uma olhada melhor no primeiro exemplo que passei, tem um
link de um post antigo meu.

http://www.devmedia.com.br/articles/post-2227-Tecnicas-de-drag-and-drop.html

Adriano

2010/6/18 Adriano Santos <asrsan...@gmail.com>

> Ahhhhhhhhhhhhhhh muleque, adoro isso.
>
> Consegui, mas não posso me vangloriar pq não fui eu quem fez o código, mas
> sei que funciona. O crédito todo vai para o Torry's Page o autor desse post:
>
> http://www.swissdelphicenter.ch/torry/showcode.php?id=493
>
> Meu, funciona perfeitamente. Faça o teste e viva a vida.
>
> Como dizem o Walter e o Rubem:
> "Quem procura, acha".
>
>
> --
> Adriano Santos
> http://twitter.com/asrsantos
> www.delphitodelphi.blogspot.com
>
>
>
>
> 2010/6/18 Adriano Santos <asrsan...@gmail.com>
>
> Pessoal,
>>
>> Nem publiquei o drag-and-drop ontem pq a solução que tem no meu exemplo é
>> bem simples, olhem só:
>>
>> procedure TForm1.ListaOrigemDragDrop(Sender, Source: TObject; X, Y:
>> Integer);
>> begin
>>   if (Source = ListaOrigem) or (Source = ListaDestino) then
>>     TListBox(Sender).EndDrag(True);
>> end;
>>
>> procedure TForm1.ListaOrigemDragOver(Sender, Source: TObject; X, Y:
>> Integer;
>>   State: TDragState; var Accept: Boolean);
>> begin
>>   if (Source = ListaOrigem) or (Source = ListaDestino) then
>>     Accept := True
>> end;
>>
>> procedure TForm1.ListaOrigemEndDrag(Sender, Target: TObject; X, Y:
>> Integer);
>> begin
>>   if Target <> nil then
>>     // trata o fim de uma operacao que foi aceita
>>     TListbox(Sender).MoveSelection(TListBox(Target){ListaDestino});
>> end;
>>
>> procedure TForm1.ListaOrigemMouseDown(Sender: TObject; Button:
>> TMouseButton;
>>   Shift: TShiftState; X, Y: Integer);
>> begin
>>   if (Button = mbLeft) and ((Sender = ListaOrigem) or (Sender =
>> ListaDestino)) then
>>     TListBox(Sender).BeginDrag(False) // inicia a operacao
>> end;
>>
>>
>> Aqui estou fazendo o drag-and-grop de um ListBox para outro.
>>
>> Olhei o código do link que passaram e aparentemente tá um xuxu beleza, mas
>> não funciona. Tô dando uma olhada pra ver se consigo descobrir o problema.
>>
>>
>> http://www.planetadelphi.com.br/dica/6768/arrastar-e-soltar-arquivos-sobre-sua-aplica%C3%A7%C3%A3o
>>
>>
>>
>> --
>> Adriano Santos
>> http://twitter.com/asrsantos
>> www.delphitodelphi.blogspot.com
>>
>>
>> 2010/6/17 Vitor Yahoo <vredesredsys...@yahoo.com.br>
>>
>>
>>>
>>> Entrando de gaiato na história aí...
>>> Não seria mais simples utilizar aqueles componentes da Win 31? Coloca os
>>> componentes na tela, inclusive o fileslistbox (ou o nome que seja) e
>>> trabalha com os arquivos pelo index desse componente. Se o caso é só
>>> renomear...
>>>
>>> -----Mensagem original-----
>>> De: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>[mailto:
>>> delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>] Em
>>> nome de Adriano Santos
>>> Enviada em: quinta-feira, 17 de junho de 2010 15:44
>>>
>>> Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>
>>> Assunto: Re: Res: Res: [delphi-br] Arrastando arquivos do windows para
>>> dentro de um listbox
>>>
>>> Beleza,
>>>
>>> Meu, vou publicar no blog hoje a noite do "meu drag-and-drop", não sei se
>>> vai ajudar.
>>>
>>> Se não tô enganado tenho um exemplo também de como arrastar e soltar de
>>> fora
>>> de uma aplicação Delphi para dentro dela, tipo qdo fazemos no Word ou
>>> Outlook por exemplo. Acho que tenho isso. Se tiver tento adaptar ao que
>>> precisa blz?
>>>
>>> --
>>> Adriano Santos
>>> http://twitter.com/asrsantos
>>> www.delphitodelphi.blogspot.com
>>>
>>> 2010/6/16 Roni Rodrigo <ronirodr...@yahoo.com.br<ronirodrigo%40yahoo.com.br>
>>> >
>>>
>>> >
>>> >
>>> > aahh..
>>> > qto ao icone circular do listbox... verifica a propriedade DragMode..
>>> > não lembro qual tem que ser, acho q é dmAutomatic.. mas enfim, da uma
>>> > testada ai... hehe
>>> > o/
>>> >
>>> > Em 16/06/2010 13:05, Roni Rodrigo escreveu:
>>> >
>>> > > mas então cara... aquele exemplo ta bem mastigado...
>>> > > (
>>> >
>>>
>>> http://www.planetadelphi.com.br/dica/6768/arrastar-e-soltar-arquivos-sobre-s
>>> ua-aplica%C3%A7%C3%A3o
>>> > )
>>> > > O listbox vc ja tem no form né?
>>> > > a seção private está na declaração do teu form, lá onde tem: Form1 =
>>> > > class(TForm) etc.... após as declarações dos seus componentes tem a
>>> > > palara reservada PRIVATE. Logo abaixo dela vc coloca essa linha:
>>> > > procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles;
>>> > > isso vai interceptar as mensagens de arrasto (Drag end drop) do
>>> windows..
>>> > > aí vc vai nos eventos OnCreate e OnDestroy do form....
>>> > > No Create:
>>> > > DragAcceptFiles(Handle, true);
>>> > > isso diz que seu aplicativo vai aceitar que algo seja arrastado sobre
>>> ele
>>> > > no Destroy:
>>> > > DragAcceptFiles(Handle, false);
>>> > > isso desativa o arrasto....
>>> > >
>>> > > ai vc só precisa dizer o que fazer quando arrastar os arquivos no seu
>>> > > form, no seu caso, adicioná-los ao listbox...
>>> > > o código está bem comentado, acho que da pra entender fácil...
>>> > > se não der certo procura outra rotina no google.. tem várias... mas
>>> não
>>> > > acredito que tenha maneira mais simples que essa....
>>> > >
>>> > > 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 then begin
>>> > > 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... }
>>> > > if not DragQueryPoint(Drop, Pt) then
>>> > > ShowMessage('Arquivos soltos fora da área cliente do form')
>>> > > { Se soltou na área do ListBox... }
>>> > > else if PtInRect(RctListBox, Pt) then begin
>>> > > { Pega todos os nomes de arquivos e coloca no ListBox }
>>> > > for I := 0 to FileCount -1 do begin
>>> > > { 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... }
>>> > > end else if PtInRect(RctMemo, Pt) then begin
>>> > > 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;
>>> > >
>>> > > Em 14/06/2010 20:01, Andre Luiz Stivanatto escreveu:
>>> > > > então meu listbox ja esta com essa opção abilitada :
>>> > > > AllowMultiSelect pra
>>> > > > permitir selecionar múltiplos arquivos
>>> > > >
>>> > > > é que para abrir 4.783 arquivos que tenho no pc demora muito tempo,
>>> > > > porisso preciso de arrrastar os arquivos para dentro do listbox é
>>> > > > muito mais facil fazer isso, pois eu abro a pasta que tem os 4.783
>>> > > > arquivos, vou em editar e mando selecionar tudo de uma vez depois,
>>> é
>>> > > > so aeu arrastar tudo para dentro do listbox.
>>> > > > não preciso de ter o memo, so quero o listbox mesmo, e esse codigo
>>> é
>>> > > > estranho pois não sei qual é a area privada da unit do form1 ?
>>> > > > preciso de um codigo mais simples que interage com o listbox, so
>>> > > > preciso que o listbox aceite os arquivos em modo arrastar, pois
>>> quando
>>> > > > tento fazer isso o cursor do mouse aparece o icone circular de
>>> negação.
>>> > > > você poderia me ver um exemplo mais pratico, ou montar o codigo ai
>>> e
>>> > > > me mandar, pois estou tentando e não estou conseguindo fazer esse
>>> > > > codigo, talvez você consigua pois se deve ter mais experiencia do
>>> > > que eu.
>>> > > > eu aprendi programação em delphi pois fiz o colegial +
>>> processamento
>>> > > > de dados no opção no ano de 2000 que comecei, so que em 2002
>>> cortaram
>>> > > > isso do plano das escolas , foi no terceiro ano, portanto esta
>>> > > > incompleto meus estudos, mas estou indo pesquisando e vendo
>>> exemplos.
>>> > > > so que isso que eu quero fazer num programa que renomeia extenções
>>> dos
>>> > > > arquivos ja consegui fazer, so falta isso para facilitar a minha
>>> vida,
>>> > > > pois pelo opendialog fica a vida toda para selecionar tudo, se eu
>>> > > > conseguir fazer o lisbox permitir o arrastar e soltar então fica
>>> muito
>>> > > > mais facil.
>>> > > > obrigado pela ajuda, mas se der para você me dar uma ajuda com um
>>> > > > codigo que interaja sem ter outros componentes dentro do projeto
>>> como
>>> > > > o memo, so quero o codigo que se interaja com o listbox, pois é so
>>> ele
>>> > > > quem vou usar.
>>> > > >
>>> > > > obrigado e agurado retorno de sua resposta.
>>> > > > Andre Luiz
>>> > > >
>>> > > > ________________________________
>>> > > > De: Roni Rodrigo <ronirodr...@yahoo.com.br<ronirodrigo%40yahoo.com.br>
>>> <ronirodrigo%40yahoo.com.br>
>>> > > <mailto:ronirodrigo%40yahoo.com.br 
>>> > > <ronirodrigo%2540yahoo.com.br><ronirodrigo%
>>> 2540yahoo.com.br>>
>>> > > > <mailto:ronirodrigo%40yahoo.com.br 
>>> > > > <ronirodrigo%2540yahoo.com.br><ronirodrigo%
>>> 2540yahoo.com.br>>>
>>> > > > Para: 
>>> > > > delphi-br@yahoogrupos.com.br<delphi-br%40yahoogrupos.com.br><delphi-br%
>>> 40yahoogrupos.com.br>
>>> > >
>>> <mailto:delphi-br%40yahoogrupos.com.br<delphi-br%2540yahoogrupos.com.br>
>>> <delphi-br%2540yahoogrupos.com.br>>
>>> >
>>> > > <mailto:delphi-br%40yahoogrupos.com.br<delphi-br%2540yahoogrupos.com.br>
>>> <delphi-br%2540yahoogrupos.com.br>
>>>
>>> > >
>>> > > > Enviadas: Segunda-feira, 14 de Junho de 2010 19:19:17
>>> > > > Assunto: Re: Res: [delphi-br] Arrastando arquivos do windows para
>>> > > > dentro de um listbox
>>> > > >
>>> > > > Olá André... não daria pra habilitar a opção AllowMultiSelect pra
>>> > > > permitir selecionar múltiplos arquivos? ai vc pode percorrer a
>>> lista
>>> de
>>> > > > arquivos selecionados, adicionando-os...
>>> > > > sobre arrastar o arquivo pro form, procurei no google e esse foi um
>>> dos
>>> > > > primeiros...
>>> > > >
>>> > >
>>> >
>>>
>>> http://www.planetadelphi.com.br/dica/6768/arrastar-e-soltar-arquivos-sobre-s
>>> ua-aplica%C3%A7%C3%A3o
>>> > > >
>>> > > > não testei mas parece funcionar...
>>> > > >
>>> > > > Em 14/06/2010 17:49, Andre Luiz Stivanatto escreveu:
>>> > > > > obrigado Adriano, até agora ninguém respondeu são 17:48 hs, se
>>> você
>>> > me
>>> > > > > mandar esse exemplo eu te agradeço, muito obrigado por ter me
>>> > > > respondido.
>>> > > > >
>>> > > > > Andre Luiz
>>> > > > >
>>> > > > > ________________________________
>>> > > > > De: Adriano Santos <asrsan...@gmail.com 
>>> > > > > <asrsantos%40gmail.com><asrsantos%
>>> 40gmail.com>
>>> > > <mailto:asrsantos%40gmail.com <asrsantos%2540gmail.com> <asrsantos%
>>> 2540gmail.com>>
>>> > > > <mailto:asrsantos%40gmail.com <asrsantos%2540gmail.com><asrsantos%
>>> 2540gmail.com>> <mailto:
>>> > asrsantos%40gmail.com <asrsantos%2540gmail.com>>>
>>> > > > > Para: 
>>> > > > > delphi-br@yahoogrupos.com.br<delphi-br%40yahoogrupos.com.br><delphi-br%
>>> 40yahoogrupos.com.br>
>>> > > <mailto:delphi-br%40yahoogrupos.com.br<delphi-br%2540yahoogrupos.com.br>
>>> <delphi-br%2540yahoogrupos.com.br>
>>> > >
>>> > > >
>>> <mailto:delphi-br%40yahoogrupos.com.br<delphi-br%2540yahoogrupos.com.br>
>>> <delphi-br%2540yahoogrupos.com.br>
>>> > >
>>> > > >
>>> <mailto:delphi-br%40yahoogrupos.com.br<delphi-br%2540yahoogrupos.com.br>
>>> <delphi-br%2540yahoogrupos.com.br>
>>> > >
>>> > > > > Cc: delphi 1
>>> <lista-del...@yahoogrupos.com.br <lista-delphi%40yahoogrupos.com.br>
>>> <lista-delphi%40yahoogrupos.com.br>
>>> > >
>>> <mailto:lista-delphi%40yahoogrupos.com.br<lista-delphi%2540yahoogrupos.com.br>
>>> <lista-delphi%2540yahoogrupos.com.b
>>> r>
>>> > >
>>> > > >
>>> <mailto:lista-delphi%40yahoogrupos.com.br<lista-delphi%2540yahoogrupos.com.br>
>>> <lista-delphi%2540yahoogrupos.com.b
>>> r>
>>> > >
>>> > > > >
>>> <mailto:lista-delphi%40yahoogrupos.com.br<lista-delphi%2540yahoogrupos.com.br>
>>> <lista-delphi%2540yahoogrupos.com.b
>>>
>>> r>
>>> > >>
>>> > > > > Enviadas: Segunda-feira, 14 de Junho de 2010 10:25:29
>>> > > > > Assunto: Re: [delphi-br] Arrastando arquivos do windows para
>>> dentro
>>> > de
>>> > > > > um listbox
>>> > > > >
>>> > > > > André,
>>> > > > >
>>> > > > > Se ninguém responder seu e-mail até a noite, te passo um exemplo.
>>> > > > > Tenho isso
>>> > > > > no meu server em home-office. Tenho um exemplo bem legal.
>>> > > > >
>>> > > > > --
>>> > > > > Adriano Santos
>>> > > > > http://twitter.com/asrsantos
>>> > > > > www.delphitodelphi.blogspot.com
>>> > > > >
>>> > > > > 2010/6/12 Andre Luiz Stivanatto
>>> <andreluiz.stivana...@yahoo.com.br <andreluiz.stivanatto%40yahoo.com.br>
>>> <andreluiz.stivanatto%40yahoo.com.br>
>>> > >
>>> <mailto:andreluiz.stivanatto%40yahoo.com.br<andreluiz.stivanatto%2540yahoo.com.br>
>>> <andreluiz.stivanatto%2540yahoo.c
>>> om.br>
>>> > >
>>> > > >
>>> <mailto:andreluiz.stivanatto%40yahoo.com.br<andreluiz.stivanatto%2540yahoo.com.br>
>>> <andreluiz.stivanatto%2540yahoo.c
>>> om.br>
>>> > >
>>> > > > >
>>> <mailto:andreluiz.stivanatto%40yahoo.com.br<andreluiz.stivanatto%2540yahoo.com.br>
>>> <andreluiz.stivanatto%2540yahoo.c
>>>
>>> om.br>
>>> > >>
>>> > > > >
>>> > > > > >
>>> > > > > >
>>> > > > > > Oi pessoal tudo bem ?
>>> > > > > > Estou com um projeto aqui que estou montando, tenho um form e
>>> um
>>> > > > > listbox1 ,
>>> > > > > > ja fiz um botão abrir arquivos com o opendialog1 so que para
>>> abrir
>>> > > > 4.783
>>> > > > > > arquivos no listbox1 não é facil, estava pensando em abrir a
>>> pasta
>>> > > > > dos 4.783
>>> > > > > > arquivos, depois mandar selecionar tudo de uma vez e arrastar
>>> para
>>> > > > > dentro do
>>> > > > > > listbox que esta dentro do meu projeto, ai os 4.783 arquivos
>>> > ficaram
>>> > > > > > listados no listbox de uma vez, é mais rapido do que lever
>>> varios
>>> > > > > minutos
>>> > > > > > selecionando pelo opendialog que demora muito mais, o que eu
>>> quero
>>> > > > é um
>>> > > > > > codigo que permita eu arrastar multiplos arquivos de uma pasta
>>> do
>>> > > > > windows e
>>> > > > > > jogar dentro do listbox, como faço esse codigo ?
>>> > > > > > obrigado pela atenção de todos !
>>> > > > > >
>>> > > > > > Andre Luiz
>>> > > > > >
>>> > > > > > [As partes desta mensagem que não continham texto foram
>>> removidas]
>>> > > > > >
>>> > > > > >
>>> > > > > >
>>> > > > >
>>> > > > > [As partes desta mensagem que não continham texto foram
>>> removidas]
>>> > >
>>> > > [As partes desta mensagem que não continham texto foram removidas]
>>> >
>>> > [As partes desta mensagem que não continham texto foram removidas]
>>> >
>>> >
>>> >
>>>
>>> [As partes desta mensagem que não continham texto foram removidas]
>>>
>>> ------------------------------------
>>>
>>>
>>> --
>>> <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
>>>
>>>  
>>>
>>
>>
>>
>>
>
>
> --
> Adriano Santos
> http://twitter.com/asrsantos
> www.delphitodelphi.blogspot.com
>
>


-- 
Adriano Santos
http://twitter.com/asrsantos
www.delphitodelphi.blogspot.com


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    delphi-br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a