Ir para conteúdo

POWERED BY:

Arquivado

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

bdexterholland

Problemas com sistema de busca em rich

Recommended Posts

Eu tenho o seguinte método para busca em um objeto do tipo trichedit:

 

 

 

procedure Tjanelaprincipal.ToolButton9Click(Sender: TObject);var  i:word;  parar:boolean;begin  parar:=false;  if (PageControl1.PageCount>0) and (length(RichAtivo.Text)>0) then	begin	  i:=richativo.SelStart+richativo.SelLength;	  repeat		if copy(richativo.Text,i,length(trim(edit1.Text)))=edit1.Text then		  begin			parar:=true;			edit1.Color:=clWhite;			RichAtivo.SetFocus;			RichAtivo.SelLength:=length(trim(edit1.Text));		  end		else		  begin			inc(i);			if i>Length(richativo.Text) then			  begin				parar:=true;				Edit1.Color:=$00aaaaff;				RichAtivo.SetFocus;				RichAtivo.SelLength:=0;				beep;			  end;		  end;	  until parar;	end;end;

 

 

Ele so tá achando uma vez, esse código tava funcionando normal e eu fui mexendo para corrigir uns bugs dele e agora sí acha uma vez. alguém pode me ajudar...

 

...para teste eu faço assim:

 

escrevo várias vezes a palavra 'teste' separada por espaços e procuro pela palavra 'teste'. o sistema obviamente deve achar, mas só está achando a primeira palavra...

Compartilhar este post


Link para o post
Compartilhar em outros sites

i aew bdexterholland, beleza???

 

então cara, você ta falando que ele acha a primeira vez e sai da rotina...

 

 

bom, dei uma olhada por cima, e acredito que seja devido a essa parte abaixo:

 

if copy(richativo.Text,i,length(trim(edit1.Text)))=edit1.Text then		  begin			parar:=true;			edit1.Color:=clWhite;			RichAtivo.SetFocus;			RichAtivo.SelLength:=length(trim(edit1.Text));		  end

PQ?

 

Pq ele vai procurar por teste, e quando achar, como você mesmo colocou, parar vai ser True, e ele repete até achar, e não até o final do Richtext...

 

 

bom, acredito que seja isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Smash para você !!! ;]mas no caso, esse sistema é assim:Eu mando procurar e ele deve char o primeiro a partir do cursor e selecionar para mostrar ao usuário. Quando eu mandar procurar denovo, ele deve procurar a próxima ocorrencia.......No fim das contas, é sempre uma busca a partir do cursor até encontrar ou alcançar o final do texto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como ficou

procedure Tjanelaprincipal.ToolButton9Click(Sender: TObject);var  i:word;  parar:boolean;begin  parar:=false;  if (PageControl1.PageCount>0) and (length(RichAtivo.Text)>0) then	begin	  i:=richativo.SelStart+richativo.SelLength;	  repeat		if CheckBox1.Checked then	 //case sensitive = true		  begin			if copy(richativo.Text,i,length(trim(edit1.Text)))=edit1.Text then			  begin				parar:=true;				edit1.Color:=clWhite;				RichAtivo.SetFocus;				RichAtivo.SelStart:=i;				RichAtivo.SelLength:=length(trim(edit1.Text));			  end			else			  begin				inc(i);				if i>Length(richativo.Text) then				  begin					parar:=true;					Edit1.Color:=$00aaaaff;					RichAtivo.SetFocus;					RichAtivo.SelLength:=0;					beep;				  end;			  end;		  end		else		  begin			if copy(AnsiUpperCase(richativo.Text),i,length(trim(edit1.Text)))=AnsiUpperCase(edit1.Text) then			  begin				parar:=true;				edit1.Color:=clWhite;				RichAtivo.SetFocus;				RichAtivo.SelStart:=i;				RichAtivo.SelLength:=length(trim(edit1.Text));			  end			else			  begin				inc(i);				if i>Length(richativo.Text) then				  begin					parar:=true;					Edit1.Color:=$00aaaaff;					RichAtivo.SetFocus;					RichAtivo.SelLength:=0;					beep;				  end;			  end;		  end;	  until parar;	end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Karaka, detesto fazer sistemas de busca

 

procedure Tfrmprocurar.Button1Click(Sender: TObject);  procedure busca(primeira:boolean);  var	parar:boolean;	inicio,i,fim:word;	direcao:integer;	frase,procurado:string;  begin	Button1.Caption:='Procurar Próxima';	fim:=0;	direcao:=0;	inicio:=0;	if RadioButton1.Checked then	  begin		direcao:=1;		if primeira then		  begin			if RadioButton3.Checked then			  begin				inicio:=0;				fim:=length(richativo.Text)-1;			  end;			if RadioButton4.Checked then			  begin				inicio:=richativo.SelStart;				fim:=length(richativo.Text)-1;			  end;			if RadioButton5.Checked then			  begin				inicio:=richativo.SelStart;				fim:=richativo.SelStart+(richativo.SelLength-1);			  end;		  end		else		  begin			inicio:=richativo.SelStart;			if RadioButton3.Checked then			  fim:=length(richativo.Text)-1;			if RadioButton4.Checked then			  fim:=length(richativo.Text)-1;			if RadioButton5.Checked then			  fim:=richativo.SelStart+(richativo.SelLength-1);		  end;	  end;	if RadioButton2.Checked then	  begin		direcao:=-1;		if primeira then		  begin			if RadioButton3.Checked then			  begin				inicio:=length(richativo.Text)-1;				fim:=0;			  end;			if RadioButton4.Checked then			  begin				inicio:=length(richativo.Text)-1;				fim:=richativo.SelStart;			  end;			if RadioButton5.Checked then			  begin				inicio:=richativo.SelStart+(richativo.SelLength-1);				fim:=richativo.SelStart;			  end;		  end		else		  begin			inicio:=richativo.SelStart;			if RadioButton3.Checked then			  fim:=0;			if RadioButton4.Checked then			  fim:=0;			if RadioButton5.Checked then			  begin				inicio:=richativo.SelStart+(richativo.SelLength-1);				fim:=richativo.SelStart;			  end;		  end;	  end;	i:=inicio;	parar:=false;	primeirabusca:=false;	repeat	  if not CheckBox1.Checked then		begin		  frase:=AnsiUpperCase(copy(richativo.Text,i,length(ComboBox1.Text)));		  procurado:=AnsiUpperCase(ComboBox1.Text);		end	  else		begin		  frase:=(copy(richativo.Text,i,length(ComboBox1.Text)));		  procurado:=(ComboBox1.Text);		end;	  if frase=procurado then		begin		  parar:=true;		  RichAtivo.SetFocus;		  if i<>0 then			dec (i);		  RichAtivo.SelStart:=i;		  RichAtivo.SelLength:=length(trim(combobox1.Text));		end	  else		begin		  i:=i+direcao;		  if i=fim then			parar:=true;		end;	until parar;  end;begin  busca(primeirabusca);end;

 

Esse código é para a janela de pesquisa (Crtl+F), (o código anterior é para a barra de busca (F2)) a função de busca em todos os arquivos abertos ainda não está funcionando mas penso que isso é o mais fácil.

 

Pesso que vocês fassam download do executável, testem o sistema de busca e me ajudem a resolver esse galho.

 

http://psygames.byethost10.com/forum/arquivos/psypad.exe

 

 

 

A função richativo identifica qual richedit está com o foco no momento se várias abas estiverem abertas.

 

a variável primeirabusca é uma variável global dentro da Unit da janela do Ctrl+F e é setada em true quando mexe no combobox...

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.