Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

deio

Criação de um form

Recommended Posts

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

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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

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

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

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

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 :

Imagem Postada

 

(esquece as músicas XD )

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.