Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
/applications/core/interface/imageproxy/imageproxy.php?img=http://img463.imageshack.us/img463/1280/imagem3jo0.png&key=a550f9f9e133f552eef8229ee46e0194c6a192c907c8476b0a4b52a44be38311" alt="Imagem Postada" />
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?
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.
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:
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...
desculpa a ignorância mas oq significa o na condiçãoif edtFiltrar.Text <> '.*' then
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...
consegui fazer com combobox, falta só ele fazer q nem eu disse no 3° post...
beleza... você vai ver que vai ser simples, pois somente precisa tratar a informação selecionada...
ta aí o problema, eu naum sei fazer isso :(
Mas tenta, começa a desenvolver, para ir aprendendo, caso realmente não consiga, coloque aqui o que desenvolveu que lhe ajudamos...
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 ')' ...
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.
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 :
/applications/core/interface/imageproxy/imageproxy.php?img=http://img529.imageshack.us/img529/1881/imagem1fz5.png&key=cee4e53b5c3652f5446bb74aae239ff3e328c16fb9aa0db6ea770382a21f4b88" alt="Imagem Postada" />
(esquece as músicas XD )
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...
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
alguém??
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;