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

(Resolvido) Como colorir texto em RumTime (tempo de execução) Delphi


LucAlucard

Pergunta

Gente eu conseguí fazer uma funçãosinha achando uma coisa ou outra pronta da net e gostaria de melhora-la... só q não sou tão bom assim rsrs... Qria saber se alguém aew pode me ajudar...

Eu qro acessar um banco de Dados... E se eu achar a palavra dentro digamos da tabela "Dicionário" na coluna "palavras" eu posssa colorir em tempo de execução... mais ou menos como o sql server faz quando a gente ta digitando o script um exemplo é o SELECT e o SUM q ficam azul e meio rosa... em rumtime (tempo de execução)...

Se alguém puder me dar uma força! ^^.. Eu agradeceria muito!! ^^

Vlw gente brigadão e um forte abraço a todos!!

Tava quase esquecendo... pra quem quiser dar uma olhada no código q eu fiz.. e quero melhorar (não foi eu qm fez TUDO eu só dei uma ageitada.. então por favor.. os créditos não ficam pra mim ^^)

function TForm2.fnBuscarPorPalavra (ValorBusca : String ; RichEdit : TRichEdit) : Boolean;

var

ProcurePor : LongInt;

PosInicial, PosFinal : integer;

vPosAntiga : Integer;

begin

with RichEdit do

begin

vPosAntiga := SelStart;

SelStart := 0;

SelLength := 0;

while True do

begin

PosInicial := SelStart + SelLength;

PosFinal := Length(Text) - PosInicial;

ProcurePor := FindText(ValorBusca, PosInicial, PosFinal, []);

if ProcurePor < 0 then Break;

begin

SelStart := ProcurePor;

SelLength := Length(ValorBusca);

end;

SelAttributes.Color := clRed;

SelAttributes.Style := SelAttributes.Style + [fsBold];

end;

SelStart := vPosAntiga;

SelLength := 0;

SelAttributes.Color := clWindowText;

end;

end;

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

5 respostass a esta questão

Posts Recomendados

  • 0

Bom gente... consegui dar uns passos.. mas to começando a ficar com sono... tem uns bugs ainda...

Por exemplo :

Cadastre lá no seu banco de dados (seja lá qual for..) alguma coisa pra ele realçar... aew depois você digita no RichEdit pra ele ir fazendo a no key Up... ou verifica num botão você qm sabe..

a busca ele faz quase perfeitamente... porém... quando eu digito lá por exemplo na tabela tem cadastrado Lucas, Thiago e Bruno... aew eu digito lá :

Lucas

E depois eu volto na posição 1 (onde ta o 'L') e digito lá Bruno o 'Bruno' não vai ficar colorido exceto q eu coloque o Bruno na frente do Lucas... (bom sentido ta gente ^^')...

Se vocês puderem me ajudar a corrigir esse bug por favor... eu ficaria muito grato!!... ^^'' Agradeceria muito a força!! ^^ Abração a todos vocês aew gente!! ^^...

E boa noite q eu to com sono T_T...

Pra qm quisera função ta aqui

function TForm2.fnBuscarPorPalavra (RichEdit : TRichEdit ; DataSource : TDataSource) : Boolean;

var

ProcurePor : LongInt;

PosInicial, PosFinal : integer;

vPosAntiga : Integer;

vBusca : String;

begin

Result := True;

try

with RichEdit do

begin

vPosAntiga := SelStart;

SelStart := 0;

SelLength := 0;

DataSource.DataSet.First;

while True do

begin

PosInicial := SelStart + SelLength;

PosFinal := Length(Text) - PosInicial;

if DataSource.DataSet.RecordCount <= 0 then Break;

if DataSource.DataSet.Eof then Break;

while not DataSource.DataSet.Eof do

begin

vBusca := DataSource.DataSet.FieldByName('PALAVRA').AsString;

ProcurePor := FindText(vBusca, PosInicial, PosFinal, []);

if ProcurePor < 0 then begin DataSource.DataSet.Next; Break; end;

begin

SelStart := ProcurePor;

SelLength := Length(vBusca);

end;

SelAttributes.Color := clRed;

SelAttributes.Style := SelAttributes.Style + [fsBold];

DataSource.DataSet.Next;

end;

end;

SelStart := vPosAntiga;

SelLength := 0;

SelAttributes.Color := clWindowText;

end;

except raise; Result := False; end;

end;

Link para o comentário
Compartilhar em outros sites

  • 0
Eu qro acessar um banco de Dados... E se eu achar a palavra dentro digamos da tabela "Dicionário" na coluna "palavras" eu posssa colorir em tempo de execução... mais ou menos como o sql server faz quando a gente ta digitando o script um exemplo é o SELECT e o SUM q ficam azul e meio rosa... em rumtime (tempo de execução)...

Cadastre lá no seu banco de dados (seja lá qual for..) alguma coisa pra ele realçar... aew depois você digita lá no RichEdit pra ele ir fazendo a no key Up... ou verifica num botão você qm sabe..

A idéia não seria ... voce procurar pela palavra no banco de dados, e se encontrada jogar o campo da tabela no RichEdit e colorir a palavra selecionada no meio das outras e de todos os registros encontrados ? fica sem sentido ... pois se as palavras estão dentro do RichEdit , as mesmas não estarão apontando para o respectivo registro da sua tabela.

entretanto se a ideia for .... realçar ( negrito ) o campo onde encontrar a palavra na tabela, ai tambem não tem sentido o código que voce postou ... outras modificações seriam necessarias ou até outra lógica

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

... Como posso explicar... Digamos.. quero q determinadas palavras fiqem coloridas e em negrito por exemplo.. mas pra mim saber q palavras q eu qro eu preciso saber a q palavra... então eu cadastro no banco de dados as palavras... no meu caso por exemplo q qro fazer um treco = o sql server q pinta a palavra se eu digitar determinada palavra...

Eu só qro modificar as palavras do RichEdit...

Vlw pela observação... e brigado por me ajudar também nesse meu post...

Link para o comentário
Compartilhar em outros sites

  • 0
Eu só qro modificar as palavras do RichEdit...

Esse exemplo que fiz, voce vai digitar a palavra num componente FindDialog onde a palavra será pesquisada em um campo especifico dentro do bancos .... se achada será copiada para o RichEdit todo o conteudo do campo e a palavra sera realçada na posição em que ela se encontra ( no começo, meio ou fim )

Caso seja isso mesmo que voce quer, basta modificar o código para o seu uso

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Grids, DBGrids, ComCtrls, Db, DBTables;

type
  TForm1 = class(TForm)
    Query1: TQuery;
    DataSource1: TDataSource;
    FindDialog1: TFindDialog;
    RichEdit1: TRichEdit;
    DBGrid1: TDBGrid;
    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;
  RichEdit1.Lines.Clear;
  DataSource1.DataSet.First;
  while not DataSource1.DataSet.Eof do
  begin
     vBusca := DataSource1.DataSet.FieldByName('NOME').AsString;
     if pos(FindDialog1.FindText,vBusca) > 0 then
        RichEdit1.Lines.Append(vBusca);
     DataSource1.DataSet.Next;
  end;

  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

Bom gente brigadão pela força de todos vocês aqui do Fórum..!

Conseguí fazer o que eu qria. E to postando como eu fiz no final das contas.. (lógico ainda tem coisas pra melhorar.. e os créditos não são meus.. a final de contas essa função estava semi pronta.. eu só precisei inserir o que eu qria fazer a mais dentro dela...)

bom... aqui vai o código pra quem estiver precisando assim como eu precisei...

function TForm2.fnBuscarPorPalavra(RichEdit: TRichEdit; DataSource: TDataSource)

: Boolean;

var

ProcurePor: LongInt;

PosInicial, ProFinal: integer;

vPosAntiga, Limite: integer;

vBusca: String;

begin

Result := True;

try

with RichEdit do

begin

vPosAntiga := SelStart;

SelStart := 0;

SelLength := 0;

Limite := 0;

DataSource.DataSet.First;

while True do

begin

PosInicial := SelStart + SelLength;

if (Limite = 3) then

PosInicial := (Length(RichEdit.Text) - (RichEdit.Lines.Count - 1));

ProFinal := Length(RichEdit.Text) - PosInicial;

if DataSource.DataSet.RecordCount <= 0 then

Break;

if RichEdit.Text <> '' then

begin

if ((PosInicial) = (Length(RichEdit.Text) - (RichEdit.Lines.Count - 1)

)) and (DataSource.DataSet.Eof) then

Break;

end

else

Break;

if DataSource.DataSet.Eof then

DataSource.DataSet.First;

while not DataSource.DataSet.Eof do

begin

vBusca := DataSource.DataSet.FieldByName('PALAVRA').AsString;

ProcurePor := FindText(vBusca, PosInicial, ProFinal, []);

if ProcurePor < 0 then

begin

DataSource.DataSet.Next;

if DataSource.DataSet.Eof then

Limite := Limite + 1;

Break;

end;

SelStart := ProcurePor;

SelLength := Length(vBusca);

SelAttributes.Color := clRed;

SelAttributes.Style := SelAttributes.Style + [fsBold];

DataSource.DataSet.Next;

if DataSource.DataSet.Eof then

Limite := Limite + 1;

end;

end;

SelStart := vPosAntiga;

SelLength := 0;

SelAttributes.Color := clWindowText;

SelAttributes.Style := [];

end;

except

raise ;

Result := False;

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