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


[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