deio 0 Denunciar post Postado Maio 29, 2007 olá a todos estou querendo criar um form, parecido com os de abrir arquivos, porém faltam duas coisas q naum sei fazer : 1)onde está destacado de vermelho, ao clicar em um objeto do shelllistview, o nome do arquivo apareça num edit, 2)onde está destacado de azul, escolher apenas aquele tipo de arquivo a ser visualizado no shelllistview, os componentes q ja tenho são : shellcombobox shelllistview buttons e labels Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Maio 29, 2007 Para a primeira situação de pegar o nome do arquivo que esta sendo selecionado, você pode fazer no evento OnChange o seguinte: procedure TForm1.ShellListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);beginif ShellListView1.Selected <> nil then edtArquivo.Text:=ShellListView1.SelectedFolder.PathName;end; Onde que ele vai carregar para um edit chamado edtArquivo o caminho do que você selecionar. Na segunda questão para filtrar conforme desejar, fiz um teste com um edit chamado edtFiltrar, onde que nele coloco o que desejo filtrar na pasta, para isto pode usar o evento OnAddFolder, fazendo algo do tipo: procedure TForm1.ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder; var CanAdd: Boolean);beginif edtFiltrar.Text <> '' then begin if edtFiltrar.Text <> '*.*' then begin if (ExtractFileExt(AFolder.PathName) = ExtractFileExt(edtFiltrar.Text)) or AFolder.IsFolder then CanAdd:=True else CanAdd:=False; end; end;end; Onde que se o edit estiver diferente de vazio e diferente de *.* ele filtra e mostra somente os desejados... Pode colocar em um botão a opção para executar o filtro, para isto basta fazer... procedure TForm1.btnFiltrarClick(Sender: TObject);beginShellListView1.Refresh;end; Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Maio 31, 2007 olatestei a parte o código q você me passou e funcionou XDto afim de trocar o edit por um combobox, só q como ficaria o código ?e ele só funciona, no caso, se estiver escrito '.dbf' , mas como faço para ser q nem na imagem 'Database File (*.dbf)', q ele só considere a parte dentro do parenteses? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Maio 31, 2007 Mas isto você teria que cria um procedimento ou uma forma de controle pelo item do Combo selecionado, depois é só passar no lugar do valor do edit o valor seu tratado. Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Maio 31, 2007 Mas isto você teria que cria um procedimento ou uma forma de controle pelo item do Combo selecionado, depois é só passar no lugar do valor do edit o valor seu tratado.............. não entendi :huh: Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Maio 31, 2007 Coloque o combo com o que desejar de opções, depois quando vai passar pelo procedimento de teste se pode ou não adicionar o arquivo, você faz a validação conforme desejar, só que como disse pode ficar entre parênteses ou com mais descrições, e então você precisa pegar o valor selecionado e tratar o tipo para conseguir filtrar de forma correta, tente criar a sua tela e fazer o procedimento, caso não consiga, coloque aqui o que conseguiu fazer para que possamos lhe ajudar... Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Maio 31, 2007 desculpa a ignorância mas oq significa o * na condiçãoif edtFiltrar.Text <> '*.*' then Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Junho 1, 2007 No caso o *.* para o windows em comando iria significar que é para puxar todos os arquivos diferentemente da extenção e demais informações... Neste caso ele somente faz uma validação se for diferente de *.* ele testa... Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 1, 2007 consegui fazer com combobox, falta só ele fazer q nem eu disse no 3° post... Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Junho 1, 2007 beleza... você vai ver que vai ser simples, pois somente precisa tratar a informação selecionada... Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 1, 2007 ta aí o problema, eu naum sei fazer isso :( Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Junho 1, 2007 Mas tenta, começa a desenvolver, para ir aprendendo, caso realmente não consiga, coloque aqui o que desenvolveu que lhe ajudamos... Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 1, 2007 opa, achei um troço na net q acho q resolve XD var cr, lf, txt, ext, sRight: String; iPos: Integer;beginif combobox1.text <> '' then txt := combobox1.text; Begin cr := chr(13); lf := chr(10); While (iPos>0) do Begin If Copy(txt,iPos,1)='*' then Begin sRight := Copy(abrir,iPos+1,Length(txt)-iPos); Break; End; iPos := iPos-1; End;ext := sright; pelo oq eu entendi, essa função vai pegar oq tiver escrito em combobox1.text, e vai copiar tudo oq estiver depois do '*' . Ex : 'Database File (*.dbf)' vai virar '.dbf)' dai naquela função q tu me passou, ao invés de usar combobox1.text usa a variavel ext procedure TForm1.ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder; var CanAdd: Boolean);beginif ext <> '' then begin if ext <> '*.*' then begin if (ExtractFileExt(AFolder.PathName) = ExtractFileExt(ext)) or AFolder.IsFolder then CanAdd:=True else CanAdd:=False; end; end;end; só falta eu limitar até onde copiar, eu quero q ele pare antes do ')' ... Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Junho 2, 2007 Vou lhe ajudar mais um pouco... :D Seguinte, no OnChange do seu ComboBox coloque: var x: integer;beginext:='*.*';if ComboBox1.Text <> '' then begin ext:=ComboBox1.Text; for x:=1 to Length(ext) do begin if copy(ext,x,1) = '(' then begin ext:=copy(ext,x + 1,5); Break; end; end; end;ShellListView1.Refresh;E no evento OnAddFolder do seu TShellListView pode deixar a mesa coisa, precisa somente declarar no private do seu formulário a variável ext...ext: string; Fonte ficando algo do tipo: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ComCtrls, ShellCtrls;type TForm1 = class(TForm) ComboBox1: TComboBox; ShellListView1: TShellListView; procedure ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder; var CanAdd: Boolean); procedure ComboBox1Change(Sender: TObject); private { Private declarations } ext: string; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ComboBox1Change(Sender: TObject);var x: integer;beginext:='*.*';if ComboBox1.Text <> '' then begin ext:=ComboBox1.Text; for x:=1 to Length(ext) do begin if copy(ext,x,1) = '(' then begin ext:=copy(ext,x + 1,5); Break; end; end; end;ShellListView1.Refresh;end;procedure TForm1.ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder; var CanAdd: Boolean);beginif ext <> '' then begin if ext <> '*.*' then begin if (ExtractFileExt(AFolder.PathName) = ExtractFileExt(ext)) or AFolder.IsFolder then CanAdd:=True else CanAdd:=False; end; end;end;end. Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 4, 2007 testei e funcionou XD os arquivos .zip tb estão aparecendo, como eu faço para eles naum aparecerem? XD o meu form ta quase pronto, agora só falta fazer a função desses botões aqui, o ultimo botão eu consegui descobrir sozinho O.o : (esquece as músicas XD ) Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Junho 4, 2007 Teria de rever a validação da linha: if (ExtractFileExt(AFolder.PathName) = ExtractFileExt(ext)) or AFolder.IsFolder then Os arquivos .zip devem de estar passando por esta validação... Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 4, 2007 ou altera essa condição pra barrar os arquivos .zip ou cria uma nova condição, acho q cria uma nova é mais fácil e tem menos chances de dar problemas....falta agora ver aqueles botões infernais q eu ainda naum consegui resolver T.T Compartilhar este post Link para o post Compartilhar em outros sites
deio 0 Denunciar post Postado Junho 5, 2007 alguém?? Compartilhar este post Link para o post Compartilhar em outros sites