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 >>>>> > > > [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