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


Responder a