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

(Resolvido) Como criar recurso Localizar e Substituir


Viniw

Pergunta

Ola eu to fazendo o segundo semestre do tecnico de informatica

meu professor pediu pra fazer um bloco de notas que tem que ter as seguintes coisas:

Novo

Salvar

Abrir

Sair

Cor

Fonte

Alinhar a esquera

Alinhar a direita

Centralizar

Localizar

Subistuir

Fiz quase tudo, menos o localizar e subistituir

eu concigo abri o FindDialog e ReplaceDialog com os comandos

FindDialog1.execute;

ReplaceDialog.execute;

(cada um no seu respectivo botão)

mas eles não funcionam para achar ou subistuir palavras no texto.

por favor me ajudem com isso que eu to muito inrrolado com esse trabalho

des de já vlw

Editado por Micheus
Título do tópico alterado. Não observação do item 3.6 das regras do forum.
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Fiz quase tudo, menos o localizar e subistituir

eu concigo abri o FindDialog e ReplaceDialog com os comandos

FindDialog1.execute;

ReplaceDialog.execute;

(cada um no seu respectivo botão)

mas eles não funcionam para achar ou subistuir palavras no texto.

Para utilizar o FindDialog e o replaceDialog é bem simples, os dois são bem parecidos:

O metodo Execute irá exibir a janela. Por exemplo:

ReplaceDialog.Execute

Dependendo da ação do usuário, os eventos OnFind, OnReplace serão disparados.

Por exemplo : no FindDialog, ao disparar o OnFind, pegue o texto da propriedade FindDialog1.FindText, leia os atributos definidos pelo usuario em Options e saia procurando.

No RichEdit você pode usar o metodo FindText.

Para substituir também é simples e envolve um passo a mais. O texto encontrado é marcado, certo? Então você codifica algo como :

RichEdit1.SelText := ReplaceDialog1.ReplaceText .

exemplo de uso do FindDialog

http://devmedia.com.br/articles/viewcomp.a...=350&hl=ibx

com isso voce já tera uma idéia de como implementar o codigo

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

eu to ficando meiu perdido

digitei assim:

procedure TForm1.Subistuir1Click(Sender: TObject);

begin

ReplaceDialog1.execute;

Memo1.SelText:=ReplaceDialog1.ReplaceText;

end;

mas agora eu clico abro a janela do localizar e/ou do subistuir digito alguma coisa, clico em localizar e nom acontece nada

dai eu cancelo e abro denovo e a palavra que eu digitei aparece no Memo

Link para o comentário
Compartilhar em outros sites

  • 0
eu to ficando meiu perdido

mas agora eu clico abro a janela do localizar e/ou do subistuir digito alguma coisa, clico em localizar e nom acontece nada dai eu cancelo e abro denovo e a palavra que eu digitei aparece no Memo

exemplo do Delphi usando o RichEdit1

procedure TForm1.Button1Click(Sender: TObject);

begin
  FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);
  FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RichEdit1 do
  begin
    { begin the search after the current selection if there is one }
    { otherwise, begin at the start of the text }
    if SelLength <> 0 then

      StartPos := SelStart + SelLength;
    else

      StartPos := 0;

    { ToEnd is the length from StartPos to the end of the text in the rich edit control }

    ToEnd := Length(Text) - StartPos;

    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog1.FindText);
    end;
  end;
end;
já que voce esta usando Memo, fiz um exemplo para voce usando o FindDialog1 e o ReplaceDialog1
unit UProcuraSubstitui;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    FindDialog1: TFindDialog;
    ReplaceDialog1: TReplaceDialog;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ReplaceDialog1Replace(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  s : string;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
   s := Memo1.Lines.Text;
   FindDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  posicao:integer;

begin
  FindDialog1.Options := [];

  if frMatchCase in FindDialog1.Options then
     FindDialog1.Options := [frMatchCase];

  if frWholeWord in FindDialog1.Options then
     FindDialog1.Options := FindDialog1.Options + [frWholeWord];

  if frWholeWord in FindDialog1.Options then
     FindDialog1.Options := FindDialog1.Options + [frDown];

  if frWholeWord in FindDialog1.Options then
     FindDialog1.Options := FindDialog1.Options + [frFindNext];

  if Pos(FindDialog1.FindText, S) > 0 then
     begin
        posicao :=  pos(FindDialog1.FindText, s)-1;
        S[Pos(FindDialog1.FindText, S)] := '0';
     end;

  if posicao <> 0 then
  begin
    Memo1.SelStart := posicao;
    Memo1.SelLength := Length(FindDialog1.FindText);
    Memo1.SetFocus;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   ReplaceDialog1.Execute;
end;

procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
  posicao :integer;
begin

  ReplaceDialog1.Options := [];

  if frMatchCase in FindDialog1.Options then
     ReplaceDialog1.Options := [frMatchCase];

  if frWholeWord in FindDialog1.Options then
     ReplaceDialog1.Options := ReplaceDialog1.Options + [frWholeWord];

  if frWholeWord in FindDialog1.Options then
     ReplaceDialog1.Options := ReplaceDialog1.Options + [frDown];

  if frWholeWord in FindDialog1.Options then
     ReplaceDialog1.Options := ReplaceDialog1.Options + [frFindNext];

  posicao :=  pos(ReplaceDialog1.FindText, Memo1.Lines.Text);

  if posicao <> 0 then
  begin
    Memo1.SelStart := posicao-1;
    Memo1.SelLength := Length(ReplaceDialog1.FindText);
    Memo1.SelText:=ReplaceDialog1.ReplaceText;
    Memo1.SetFocus;
  end;


end;

end.

Veja se esclarece as idéias

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Marcos --

Cara, tente o seguinte:

No evento "ON FIND" do componente FINDDIALOG1, coloque o seguinte código:

procedure TFLeis.FindDialog1Find(Sender: TObject);

var

FoundAt: LongInt;

StartPos, ToEnd: Integer;

begin

with MLei do

begin

if SelLength <> 0 then

StartPos := SelStart + SelLength

else

StartPos := 0;

ToEnd := Length(Text) - StartPos;

FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);

if FoundAt <> -1 then

begin

SetFocus;

SelStart := FoundAt;

SelLength := Length(FindDialog1.FindText);

end;

end;

end;

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...