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