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

(Resolvido) Funções em um memo em delphi


Sonyer

Pergunta

Olá!

Amigos, gostaria de saber com quais scripts posso utilizar o find dialog e o replace dilog em delphi, como fazer eles procurarem/localizarem em um memo chamado tuto?

Outra, como fazer neste mesmo memo, as funções de refazer (Ctrl + Z) e de desfazer?! Poderiam me dar alguns códigós?!

:blink:

Obrigado!

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
Outra, como fazer neste mesmo memo, as funções de refazer (Ctrl + Z) e de desfazer?! Poderiam me dar alguns códigós?!
Sonyer, Sobre esta parte do undo, veja se este tópico também poderá ser aplicado ao seu TMemo (eu acho que não) - Dúvida com undo\redo

Eu acredito que seria interessante você substituir este TMemo por um TRichEdit (com muito mais recursos).

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Amigos, desculpem a demora para responder!

Segui sua dica Micheus asm agora me apareceu outro problema, o código do replace dialog não funciou, somente funcionava em um memo, teria como me fornecer outro?!

Quanto ao redo/undo tive o mesmo problema citado no tópico e, não consegui fazer um sistema de refazer... Poderiam me passar o code, o RichEdit se chama tuto pois sassim não tenho de alterar muitas propriedades...

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
Segui sua dica Micheus asm agora me apareceu outro problema, o código do replace dialog não funciou, somente funcionava em um memo, teria como me fornecer outro?!
Voce pode experimentar o deste post (usando o RichEdit)

Quanto ao redo/undo tive o mesmo problema citado no tópico e, não consegui fazer um sistema de refazer... Poderiam me passar o code, o RichEdit se chama tuto pois sassim não tenho de alterar muitas propriedades...
Quanto a isto, naquele tópico eu havia mencionado este post, em que eu já havia citado que não seria possível contornar o problema da versão da dll richedit carregada pelo Delphi sem que fosse usado outro componente de terceiro (JvRichEdit é free) ou a alteração sugerida em um post no forum Expert-Exchange (neste caso, seria necessário você ter o código fonte da unit ComCtrls)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Para o que me pasou, somente é para o finddialog e não para o replace, onde meu problema está ocorrendo. Conhece algum sobre ele?!
Sonyer, segue um código completo para uso da caixa de diálogo TReplaceDialog. Como sugestão, você deve usar componentes TRichEdit e desabilitar a propriedade HideSelection.

// Botão que mostra a caixa de diálogo
procedure TForm1.Button3Click(Sender: TObject);
begin
 // verfica se ponto de inserção está no fim do texto e posiciona no início
  if RichEdit1.SelStart = Length(RichEdit1.Text) then
    RichEdit1.SelStart := 0;
 // remove qualquer seleção
  RichEdit1.SelLength;
 // Mostra a caixa de diálogo
  ReplaceDialog1.Execute;
end;

procedure TForm1.ReplaceDialog1Find(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 ReplaceDialog1.Options then
    Options := [stMatchCase];
  if frWholeWord in ReplaceDialog1.Options then
    Options := Options + [stWholeWord];
 // retorna a posição do texto encontrado ou -1 (não achou)
  FoundPos := RichEdit1.FindText(ReplaceDialog1.FindText, StartSearch, EndSearch, Options);
 // Marca (seleciona) o texto encontrado
  if FoundPos <> -1 then
  begin
    RichEdit1.SelStart := FoundPos;
    RichEdit1.SelLength := Length(ReplaceDialog1.FindText);
    RichEdit1.SetFocus;
  end;
end;

procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
  FoundPos,
  EndSearch,
  FoundCount :LongInt;
  Options :TSearchTypes;
begin
 // se não há nada encontrado, não há o que trocar
  if RichEdit1.SelLength = 0 then
    Exit;

 // troca apenas a ocorrência da palavra atual
  if frReplace in ReplaceDialog1.Options then
    RichEdit1.SelText := ReplaceDialog1.ReplaceText
  else
   // troca todas as ocorrências da palavra
    if frReplaceAll in ReplaceDialog1.Options then
    begin
     // realiza a primeira troca
      RichEdit1.SelText := ReplaceDialog1.ReplaceText;
      FoundCount := 1;

     // 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)
      EndSearch := Length(RichEdit1.Text);

     // determina como será a busca - comparação
      Options := [];
      if frMatchCase in ReplaceDialog1.Options then
        Options := [stMatchCase];
      if frWholeWord in ReplaceDialog1.Options then
        Options := Options + [stWholeWord];
      repeat
        FoundPos := RichEdit1.FindText(ReplaceDialog1.FindText, RichEdit1.SelStart, EndSearch, Options);
       // Marca (seleciona) o texto encontrado
        if FoundPos <> -1 then
        begin
          RichEdit1.SelStart := FoundPos;
          RichEdit1.SelLength := Length(ReplaceDialog1.FindText);
          RichEdit1.SetFocus;
         // substitui o texto selecionado (encontrado)
          RichEdit1.SelText := ReplaceDialog1.ReplaceText;
          Inc(FoundCount);
        end else
          ShowMessage(Format('Todas as %d ocorrências foram substituidas.', [FoundCount]));
      until FoundPos = -1;
    end;
end;

Abraços

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...