Localizar Memo

Delphi

02/05/2008

[b:d65b7d4f67]Galera eu consegui fazer um busca em um memo usando o Finddialog
So q o meu código n ta 100¬, nem todas as funções do finddialog estão funcionando..
Eu queria fazer uma busca por palavras como se tivesse utilizando o finddialog...
Ex.: Eu digitei a palavra Teste em um Edit o codigo procuraria a palavra teste dentro do memo e selecionaria ela.

E eu tb estou tendo dificuldade em fazer um código pra subistituir em um memo a primeira palavra depois do cursor.

Se alguem poder me ajudar com uma dessa duas coisas eu agradeço Muito muito muito....[/b:d65b7d4f67]


Mortify

Mortify

Curtidas 0

Respostas

Dbergkamps10

Dbergkamps10

02/05/2008

Olá,
Veja aqui: http://forum.devmedia.com.br/viewtopic.php?t=79829&highlight=memo

PS.: Antes de postar um novo tópico, use o botão pesquisar. Muitas dúvidas estão resolvidas lá.

Att
Dalton


GOSTEI 0
Mortify

Mortify

02/05/2008

[b:b90a69c18a]Cara o meu caso n é esse
Eu já havia visto este post e tentando edita-lo para ele ficar do jeito q eu kero mais n obtive sucesso

O q eu quero é q ele busque a palvra que esta no Edit somente uma vez
Se ele encontrar ele Seleciona o texto no memo.

no exemplo acima ele exibe uma mensagem perguntando se o cara quer continuar a busca. Eu queria q ele so buscasse a proxima palavra se o cara clicasse novamente no botão.[/b:b90a69c18a]

[color=red:b90a69c18a][size=18:b90a69c18a]Aguardo resposta
Se alguem souber como fazer!!![/size:b90a69c18a][/color:b90a69c18a]


GOSTEI 0
Marco Salles

Marco Salles

02/05/2008

talves isto seje útil para você

procedure TForm1.Button1Click(Sender: TObject);
var
 posicao,i,coluna,linha:integer;
begin
posicao:=0;
Linha:=memo1.Lines.Count;
for i:=0 To Linha-1 do
  begin
    memo1.Lines.Strings[i]:=Trim(memo1.Lines.Strings[i]);
    Coluna:=Pos(edit1.Text,memo1.Lines.Strings[i]);
      While Coluna > 0 DO
       begin
         posicao:=posicao+coluna-1;
         memo1.SetFocus;
         memo1.SelStart:=posicao;
         memo1.SelLength:=length(edit1.Text);
         abort;
      end;
    posicao:=posicao+length(memo1.Lines.Strings[i])+2;
  end;
end;



GOSTEI 0
Marco Salles

Marco Salles

02/05/2008

Voce tb Pode tentar fazendo assim :

procedure TForm1.Button1Click(Sender: TObject);
var
lista:TstringList;
posicao:integer;
begin
try
lista:=TstringList.Create;
lista.AddStrings(memo1.Lines);
posicao:=pos(edit1.Text,lista.Text);
if posicao > 0 Then
  begin
   Memo2.Lines.Add(inttostr(posicao));
   memo1.SetFocus;
   memo1.SelStart:=posicao-1;
   memo1.SelLength:=length(edit1.Text);
  end
else
  showmessage(´Aviso : Palavra ou Texto Não Localizado´)
finally
lista.Free;
end;
end;


P:S .. ambos os códigos tanto o último quanto o anterior são CaseSensitivéis


GOSTEI 0
Mortify

Mortify

02/05/2008

[b:9e6da8dbf2]Isso dai eu ja havia conseguido fazer
Nesses 2 casos ele so faz a busca uma única vez
Eu preciso que ao clicar no botão na segunda vez ele selecione a segunda palavra do memo
[/b:9e6da8dbf2]
Por exemplo:
asdfaskjdflk aksdjfkasjd Teste1 kljasdfkjalsdf Teste2 askldjflkajsdlfkjaklsdjf askdfjklasjdklfjkTeste3


[b:9e6da8dbf2]Na primeira vez q eu clicasse no botão ele selecionaria a palvara Teste q tem o número 1 na frente, na segunda vez a palavra Teste2 e na terceira Teste3 e assim sucessivamente até q ele n encontre mais nehuma palavra Teste no texto (nesse caso ele exibiria a mensagem q não foi possivel encontra mais nenhuma palavra).

Obirgado por tentar ^^[/b:9e6da8dbf2]


GOSTEI 0
Marco Salles

Marco Salles

02/05/2008

interpretação faz parte de qualquer codigo

voce disse claramente :

[b:7a6415d38d]citação de Mortify[/b:7a6415d38d]
O q eu quero é q ele busque a palvra que esta no Edit [b:7a6415d38d]somente uma vez[/b:7a6415d38d]



GOSTEI 0
Mortify

Mortify

02/05/2008

IxiI
Me espressei mal da primeira vez
Desculpa ai vei

O q eu queria ter dito era q eu queria q ele buscasse o texto somente uma vez para cada clique
É q no seu outro código ele fazia as buscas seguidamente..

Te AMUUU
Já tem até seus creditos no meu programa na parte de agradecimentos (colokei o link do seu perfil daki).

Desculpa ai por ter feito vc perder seu tempo

[color=red:09c5382018][b:09c5382018]NUNCA MAIS POSTO NADA COM SONO ^^[/b:09c5382018][/color:09c5382018]


GOSTEI 0
Marco Salles

Marco Salles

02/05/2008

[b:a37ba21edc]citação de Marco Salles[/b:a37ba21edc]
interpretação faz parte de qualquer codigo voce disse claramente : [b:a37ba21edc]citação de Mortify [/b:a37ba21edc] [quote:a37ba21edc]O q eu quero é q ele busque a palvra que esta no Edit somente uma vez
[/quote:a37ba21edc]

[b:a37ba21edc]citação de Mortify [/b:a37ba21edc]
Isso dai eu ja havia conseguido fazer Nesses 2 casos ele so faz a busca uma única vez


bem eu acho que o grau de dificuldade é fazer o primeiro codigo é bem maior que o segundo.. pois usa uma propriedade SelLength pouco difundida ... Para Continuar a pesquisa ao clicar no Botão é so fazer uma
pequena modificação no codigo

[b:a37ba21edc]A variavel posicao não pode ser local e usar PosEx ao Inves de Pos[/b:a37ba21edc]

var
posicao:integer;


procedure TForm1.Button1Click(Sender: TObject);
var 
lista:TstringList;
begin
try
lista:=TstringList.Create;
lista.AddStrings(memo1.Lines);
posicao:=PosEx(edit1.Text,lista.Text,posicao+1);
if posicao > 0  then
  begin
   memo1.SetFocus;
   memo1.SelStart:=posicao-1;
   memo1.SelLength:=length(edit1.Text);
  end;
finally
lista.Free;
end;
end;


procedure TForm1.Edit1Change(Sender: TObject);
begin
posicao:=0;
end;



GOSTEI 0
Marco Salles

Marco Salles

02/05/2008

IxiI Me espressei mal da primeira vez Desculpa ai vei


Tudo bem ... Espero que o Ultimo post te atenda ... Mas voce pode tb fazer a memsa coisa nun único clique do Botão . e o Sistema perguntar se que continuar a Busca... Emfim , são muitas as possibilidades

espero ter ajudado...


GOSTEI 0
Mortify

Mortify

02/05/2008

Era isso mesmo q eu queria
Brigadão vei ^^


GOSTEI 0
POSTAR