Ir para conteúdo
Fórum Script Brasil
  • 0

Como Usar A Caixa De Pesquisar Para Pesquisar Em Um Memo?


D4n1l0d

Pergunta

2 respostass a esta questão

Posts Recomendados

  • 0

Deixa ver se entendí, você quer usar um TFindDialog pra achar uma string num memo?

Bom, o TFindDialog não procura nada, eu acho, ele só le a string que o cara quer achar.

Então você teria que implementar um algoritmo pra achar: você teria que sair varrendo todas as strings letra por letra, aonde você encontrasse uma letra que fosse igual a primeira da string que o cara quer achar e ainda restasse letras suficientes para completar a string você verificava se oque seguia era a string procurada.

Se não fosse case sensitive aí você teria que fazer um uppercase em ambas e comparar.

Ficaria mais ou menos alguma coisa um pouco parecida com isto->

function sc(cond: boolean; vt, vf : char) : char;
begin
  if (cond) then result:=vt else result:=vf;
end;

function find(list : TStrings; st: string; lin, col : integer; cases : boolean) : TPoint;
var 
  muito : string;
  ch : char;
begin
  if not(cases) then st:=uppercase(st);
  ch:=st[1];
  dec(lin);
  while (lin < list.count-1) do 
  begin
    inc(lin);
    dec(col);
    while (col <= (length(list[lin])-length(st))+1) do
    begin
      inc(col);
      if (sc(cases,list[lin][col],upcase(list[lin][col])) = ch) then
      begin
        muito:=copy(list[lin],col,length(st));
        if not(cases) then muito:=uppercase(muito);
        if (muito = st) then
        begin
          result.x:=col;
          result.y:=lin;
          exit;
        end;
      end;
    end;
  end;
showmessage('String não encontrada');
end;

Não sei se está certo porque não testei, dá uma debugada aí.

Declarei uma variável que eram as letras M e T e o forum substituiu por muito.

Link para o comentário
Compartilhar em outros sites

  • 0

D4n1l0d, caso você possa substituir o componente memo por um RichText, você teria algumas facilidades. Basta setar a propriedade PlainText para True e funcionaria como um memo comum. Ficaria assim:

- O RichEdit, implementa busca apenas para frente, então na propriedade Options do FindDialog você teria de setar para True a opção frHideUpDown, para que o radiobutton Busca para Cima/Baixo não apareça;

- O FindDialog.Execute você chama de onde quizer; seja botão ou atalho;

- No evento OnFind do FindDialog, você escreve o seguinte código

procedure TForm1.Button1Click(Sender: TObject);
begin
 // força pesquisa começar sempre do início do texto
 // quando a caixa de diálogo é iniciada
  RichEdit1.SelLength := 0;
  RichEdit1.SelStart := 0;
  FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  FoundPos,
  StartSearch,
  EndSearch :LongInt;
  Options :TSearchTypes;
begin
 // determina busca a partir da posição atual ou do início do texto
 // se você atribuir StartSearch := 0, então a pesquisa sempre
 // começa no início (pouco provável este uso)
  StartSearch := RichEdit1.SelStart +RichEdit1.SelLength;
  EndSearch := Length(RichEdit1.Text);
 // determina como será a busca - comparação
  Options := [];
  if frMatchCase in FindDialog1.Options then
    Options := [stMatchCase];
  if frWholeWord in FindDialog1.Options then
    Options := Options + [stWholeWord];
 // retorna a posição do texto encontrado ou -1 (não achou)
  FoundPos := RichEdit1.FindText(FindDialog1.FindText, StartSearch, EndSearch, Options);
  if FoundPos <> -1 then
  begin
    RichEdit1.SelStart := FoundPos;
    RichEdit1.SelLength := Length(FindDialog1.FindText);
    RichEdit1.SetFocus;
  end;
end;

Eu utilizo deste jeito e funciona a contento.

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...