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