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

[Duvida] Destacando palavras


brhvitor6

Pergunta

24 respostass a esta questão

Posts Recomendados

  • 0

Segue um exemplo que acabei de fazer: http://www.4shared.com/file/241868050/3fe2...r_richedit.html

mudacorrichedit.png

coloca a palavra vaca no edit, seleciona uma cor e clica em pintar, ai você vai ver que vai pintar todas as palavras vacas independentemente se estão maiusculas ou minusculas.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

o problema persiste... eu usei um timer para verificar as palavras no richedit e coloquei

Application.ProcessMessages;
no onchange mas o problema persiste --------------------------------- Descobri o erro:
SelStart := 0;
    SelLength := 0;

Mas não sei corrigi-lo...

ele volta para a coluna 0 e linha 0 porq isso ficava voltando.

Editado por brhvitor6
Link para o comentário
Compartilhar em outros sites

  • 0

cara a função Pintar palavras é essa

function TfrmColorir.PintarPalavras(RichEdit : TRichEdit; Cor : TColor; Negrito : Boolean): string;
var
  FoundAt : LongInt;
  StartPos, ToEnd : integer;
  vBusca : string;
  str : string;
begin
  vBusca := Edit1.text;
  with RichEdit1 do
  begin
    SelStart := 0;
    SelLength := 0;
    repeat
      StartPos := SelStart + SelLength;
      ToEnd := Length(Text) - StartPos;
      FoundAt := FindText(vBusca, StartPos, ToEnd, []);
      if FoundAt < 0 then Break;
      begin
        SelStart := FoundAt;
        SelLength := Length(vBusca);
      end;
      SelAttributes.Color := Cor;
      if Negrito then
      SelAttributes.Style := SelAttributes.Style + [fsBold]
      else
      SelAttributes.Style := SelAttributes.Style - [fsBold]
    until False;
    SelStart := 0;
    SelLength := 0;
    SelAttributes.Color := clWindowText;
  end;
end;

Fiz testes aqui e nenhum dos problemas citados está ocorrendo, tente testar o executável que enviei junto com as fontes, e me diga se nele dá o erro.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

com minhas alterações n funciona:

function PintarPalavras(palavra:string;RichEdit : TRichEdit; Cor : TColor; Negrito : Boolean): string;
var
  FoundAt : LongInt;
  StartPos, ToEnd : integer;
  vBusca : string;
  str : string;
begin
  vBusca := palavra;
  with form1.RichEdit1 do
  begin
    SelStart := 0;
    SelLength := 0;
    repeat
      StartPos := SelStart + SelLength;
      ToEnd := Length(Text) - StartPos;
      FoundAt := FindText(vBusca, StartPos, ToEnd, []);
      if FoundAt < 0 then Break;
      begin
        SelStart := FoundAt;
        SelLength := Length(vBusca);
      end;
      SelAttributes.Color := Cor;
      if Negrito then
      SelAttributes.Style := SelAttributes.Style + [fsBold]
      else
      SelAttributes.Style := SelAttributes.Style - [fsBold]
    until False;
    SelStart := 0;
    SelLength := 0;
    SelAttributes.Color := clWindowText;
  end;
end;
timer 1
PintarPalavras('vitor',RichEdit1, clblack,true);

o objetivo é que o usuario não tenha que apertar o botão...

Editado por brhvitor6
Link para o comentário
Compartilhar em outros sites

  • 0

Porque você está referenciando um componente do form na função sendo que já existe um parametro para isso?

with form1.RichEdit1 do

Fiz como você disse e funcione normal, substitua sua função.

Segue função:

function Tform1.PintarPalavras(Palavra: string; RichEdit : TRichEdit; Cor : TColor; Negrito : Boolean): string;
var
  FoundAt : LongInt;
  StartPos, ToEnd : integer;
  vBusca : string;
begin
  vBusca := Palavra;
  with RichEdit1 do
  begin
    SelStart := 0;
    SelLength := 0;
    repeat
      StartPos := SelStart + SelLength;
      ToEnd := Length(Text) - StartPos;
      FoundAt := FindText(vBusca, StartPos, ToEnd, []);
      if FoundAt < 0 then Break;
      begin
        SelStart := FoundAt;
        SelLength := Length(vBusca);
      end;
      SelAttributes.Color := Cor;
      if Negrito then
      SelAttributes.Style := SelAttributes.Style + [fsBold]
      else
      SelAttributes.Style := SelAttributes.Style - [fsBold]
    until False;
    SelStart := 0;
    SelLength := 0;
    SelAttributes.Color := clWindowText;
  end;
end;
Não se esqueça de declarar essa função no Type...
type
  Tform1 = class(TForm)
    RichEdit1: TRichEdit;
    ...............
   procedure ........
   function PintarPalavras(Palavra: string; RichEdit : TRichEdit; Cor : TColor; Negrito : Boolean): string;
   procedure ......
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

fiz algumas alterações para que não fique voltando o |...

function Tform1.PintarPalavras(Palavra: string; RichEdit : TRichEdit; Cor : TColor; Negrito : Boolean): string;
var
  FoundAt : LongInt;
  StartPos, ToEnd : integer;
  vBusca : string;
  v,b:integer;
begin
  vBusca := Palavra;
  with RichEdit1 do
  begin
    v := SelStart;
    b := SelLength;
    SelStart := 0;
    SelLength := 0;
    repeat
      StartPos := SelStart + SelLength;
      ToEnd := Length(Text) - StartPos;
      FoundAt := FindText(vBusca, StartPos, ToEnd, []);
      if FoundAt < 0 then Break;
      begin
        SelStart := FoundAt;
        SelLength := Length(vBusca);
      end;
      SelAttributes.Color := Cor;
      if Negrito then
      SelAttributes.Style := SelAttributes.Style + [fsBold]
      else
      SelAttributes.Style := SelAttributes.Style - [fsBold]
    until False;
    SelStart := v;
    SelLength := b;
    SelAttributes.Color := clWindowText;
  end;
end;

mas continua com o erro que ele n muda so a palavra que eu quero...

era pra ficar:

vitor huahuahuahuahu

mas fica:

vitor huahuahuahuahu

Link para o comentário
Compartilhar em outros sites

  • 0

pra importar você usa:

RichEdit1.Lines.LoadFromFile('C:\teste.txt');

Vou ter que sair agora e só volto amanha, muda o tópico do Titulo e acrescenta Jhonas dai ele te da uma força, pois também n sou muito bom em delphi.. hehehe

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
dei uma lida... mas ambos usam database... vou tentar me basear nos códigos... qualquer duvida eu posto aqui...

tirando o database fica assim:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    FindDialog1: TFindDialog;
    RichEdit1: TRichEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

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;
  X : INTEGER;
  vBusca : string;
begin
  X := 0;

  with RichEdit1 do
  begin
    WHILE X <= RichEdit1.Lines.Count 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);
         SelAttributes.Color := clRed;
         SelAttributes.Style := SelAttributes.Style + [fsBold];
       end;
       INC(X);

    END;
   end;
end;


end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
com esse script q você me passou n resolve....

eu importei todas as palavras que quero em um memo e quero que toda vez que eu escreva uma palavra que esteja no memo se destaque no richtext...

Voce quer aprender ou quer tudo de bandeja ....rs

se voce olhar o exemplo que te passei no post

http://scriptbrasil.com.br/forum/index.php...st&p=583811

verá que voce pode trocar o database por um memo e conseguir esse resultado ( ou se pesquisar existe um post com essa duvida usando um Memo ) .... então se esforce um pouquinho que voce consegue .... não é dificil

abraço

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...