Re: Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
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.brronirodrigo%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, $, 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
Re: Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
Ahhh 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.brronirodrigo%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, $, nil, 0); { Se nenhum arquivo... } if FileCount = 0
Re: Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
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 Ahhh 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.brronirodrigo%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
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 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-sua-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, $, 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
RES: Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
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 [mailto:delphi...@yahoogrupos.com.br] Em nome de Adriano Santos Enviada em: quinta-feira, 17 de junho de 2010 15:44 Para: delphi-br@yahoogrupos.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 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, $, 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
Re: Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
mas então cara... aquele exemplo ta bem mastigado... (http://www.planetadelphi.com.br/dica/6768/arrastar-e-soltar-arquivos-sobre-sua-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, $, 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
Re: Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
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-sua-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, $, 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
Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
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 Para: delphi-br@yahoogrupos.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-sua-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 mailto:asrsantos%40gmail.com Para: delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br Cc: delphi 1 lista-del...@yahoogrupos.com.br mailto:lista-delphi%40yahoogrupos.com.br 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 mailto:andreluiz.stivanatto%40yahoo.com.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]
Res: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox
oi Adriano ainda não consegui resolver não, se pode me mandar seu codigo de exemplo ? obrigado pela atenção ! Andre Luiz De: Adriano Santos asrsan...@gmail.com Para: delphi-br@yahoogrupos.com.br delphi-br@yahoogrupos.com.br Cc: delphi-br@yahoogrupos.com.br delphi-br@yahoogrupos.com.br Enviadas: Terça-feira, 15 de Junho de 2010 9:20:10 Assunto: Re: Res: [delphi-br] Arrastando arquivos do windows para dentro de um listbox Opa, Cheguei super tarde em casa. Emergência no serviço. Vi que a galera respondeu. Conseguiu resolver? Abs Adriano Santos +55 (11)8219-5420 http://twitter.com/asrsantos Enviado de meu iPhone Em 14/06/2010, às 17:49, Andre Luiz Stivanatto andreluiz.stivana...@yahoo.com.b r 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 m e respondido. Andre Luiz De: Adriano Santos asrsan...@gmail.com Para: delphi-br@yahoogrupos.com.br Cc: delphi 1 lista-del...@yahoogrupos.com.br 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. Te nho 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 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] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM [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]