D4n1l0d Postado Setembro 2, 2006 Denunciar Share Postado Setembro 2, 2006 Boa Tarde!!ow , eu to tendo um problemao, eu to querendo implementar aquela caixa de pesquisar em um memopara o usuario realizar pesquisas de texto, mas nem está dando!!como eu faço isso?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thales Pontes Martins Postado Setembro 2, 2006 Denunciar Share Postado Setembro 2, 2006 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Setembro 3, 2006 Denunciar Share Postado Setembro 3, 2006 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ódigoprocedure 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
D4n1l0d
Boa Tarde!!
ow , eu to tendo um problemao, eu to querendo implementar aquela caixa de pesquisar em um memo
para o usuario realizar pesquisas de texto, mas nem está dando!!
como eu faço isso??
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.