Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TheMaker

Formatando texto em string grids

Recommended Posts

Olá...,

 

Primeiramente Feliz Natal e um 2005 de muito sucesso p/ todos os membro e moderadores do fórum!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Mudando de assunto....

 

Preciso de alguma dica sobre como formatar partes do texto em células de um StringGrid... Seguinte :

 

Supondo q fosse para realçar em negrito todas as ocorrências de Imasters no Grid..

 

ColunaX

 

Forum do Imaster

Imaster.com.br

Site do Imaster na internet

 

O q Ocorre acima é o resultado q desejo...

 

Agradeceria se alguém pudesse me ajudar!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Coloca a propriedade DefaultDrawing = False, e programa o evento OnDrawCell, mexendo nas propriedades Canvas.Brush, Canvas.Pen, Font.Style, etc..., como no exemplo abaixo:

 

 with StringGrid1.Canvas do  begin    Brush.Color := clBlack;    FillRect(Rect);    Font.Color := clWhite;    TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid2.Cells[ACol, ARow]);  end;

Abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Eduardo...Esse código q mandou ñ deu certo ou tem algo errado aqui...Pintar células ou textos não tem problema...a questão é como no exemplo q sugeri no inicio é colocar apenas parte do texto de uma célula em negrito ou de outra cor...Se tiver algo aí seria muito bom!!!Um Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oppss :o ,Não tinha entendido corretamente o problema!!Basicamente você tem que fazer o TextOut de parte do texto com o Font.Style normal e a parte que seria realçada com o Font.Style em negrito... Infelizmente não tenho nada pronto e pra fazer esse algoritmo é chatinho pacas, vou ver se bolo alguma coisa...Boa Sorte!!!!!! :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola ...

Eu tenho uma solução aqui mais naum sei se é exatamente o que precisa ... espero que ajude .... B)

 

procedure TFrm_Form1.StringGrid1DrawCell(Sender: TObject; ACol,

ARow: Integer; Rect: TRect; State: TGridDrawState);

begin

if SG_Grid.cells[( Coluna a ser pesquisada),ARow] = 'IMaster' then

begin

StringGrid1.Canvas.Brush.Color := $00FFAA55;

StringGrid1.Canvas.Font.Color := clBlack;

StringGrid1.Canvas.Font.Style := [fsBold];

end;

StringGrid1.Canvas.FillRect(Rect);

StringGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, TStringGrid(Sender).Cells[ACol, ARow]);

if gdFocused in State then

StringGrid1.Canvas.DrawFocusRect(Rect);

end;

 

 

Feliz 2005 ... com muita paz e amor ...

bjos Ju http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Ju.... http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Obrigado pela força...mas o q acontece...

 

esse Codigo q você postou vai alterar todo o conteúdo da célula...

 

O q eu realmente preciso é alterar a cor e o estilo da fonte de apenas uma parte do texto da célula ... EX :

 

Fórum do Imasters é nota 10!!

 

Entendeu?

 

Mas valeu mesmo assim!!!

 

e se caso tiver algo aí q ajude eu agradeço!!!

 

Beijão!!! http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega,

 

Eu utilizo um componente (SynEdit) em várias aplicações que necessito utilizar Syntax Highlighting, porém, o componente tem o estilo de um Richedit/memo. Como é open source, acredito que uma boa estudada no código possa servir de guia para resolver sua necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xi..... :unsure: Aroldo... esse componente SynEdit é muito extenso e complexo demais...Tudo o q eu preciso mesmo é mexer com algum código que faça StringGrid.Canvas.Font.Style aceitar 2 tipos diferentes fontes ao mesmo tempo....Valeu a força...Qualquer novidade q tiver é só falar!!!Um abraço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá sr....

 

Acho q dá pra tomar como base.

 

procedure TForm1.FormCreate(Sender: TObject);

begin

StringGrid1.Cells[0,0] := 'iMasters Fóruns -> Programação -> Delphi -> Formatando texto em string grids';

end;

 

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

const

str_Bold = 'iMasters';

 

var

str_Find,str_Found: String;

int_RectRight,int_StrFound: Integer;

begin

str_Find := StringGrid1.Cells[ACol,ARow];

int_StrFound := pos(str_Bold,str_Find);

str_Found := Copy(str_Find,0,int_StrFound-1);

int_RectRight := 0;

 

while (int_StrFound > 0) do

begin

StringGrid1.Canvas.Font.Style := [];

StringGrid1.Canvas.Font.Color := clBlack;

StringGrid1.Canvas.TextOut(Rect.Left + int_RectRight + 2, Rect.Top + 2, str_Found);

 

int_RectRight := int_RectRight + StringGrid1.Canvas.TextWidth(str_Found);

 

StringGrid1.Canvas.Font.Style := [fsBold];

StringGrid1.Canvas.Font.Color := clBlack;

StringGrid1.Canvas.TextOut(Rect.Left + int_RectRight + 2, Rect.Top + 2, str_Bold);

 

int_RectRight := int_RectRight + StringGrid1.Canvas.TextWidth(str_Bold);

 

 

str_Find := Copy(str_Find,int_StrFound + Length(str_Bold),Length(str_Find));

 

int_StrFound := pos(str_Bold,str_Find);

 

str_Found := Copy(str_Find,0,int_StrFound-1);

end;

 

StringGrid1.Canvas.Font.Style := [];

StringGrid1.Canvas.TextOut(Rect.Left + int_RectRight + 2, Rect.Top + 2, str_Find);

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.