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

(resolvido)colorir String Grid


schaukoski

Pergunta

Ola para todos.

Galera, estou com um problema para formatar a font de letra da ultima linha do meu string grid.

alguém sabe como eu faço para colorir uma cellula especifica? por exemplo [2,2]....

mas não no evento ondrawcell, na minha rotina... por exemplo

/// este e o final da minha rotina que gera o string grid.
  Grid.RowCount := (n+2);
  Grid.Cells[2,n+1] := formatfloat('###,###,##0.00',total);
  Grid.Cells[3,n+1] := formatfloat('###,###,##0.00',totalante);
  Grid.Cells[0,n+1] := 'TOTAL ';

  // aki algo do tipo para colorir a ultima linha.
// vi alguma coisa de with selected do , ou with grid do begin, algo assim mas não consegui

se alguém souber, da uma força ai!, um abraço.

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

11 respostass a esta questão

Posts Recomendados

  • 0

alguém sabe como eu faço para colorir uma cellula especifica? por exemplo [2,2]....

procedure TForm1.Button1Click(Sender: TObject);
var rect : Trect;  State: TGridDrawState;
begin
   // mandar o foco para coluna 2 linha 2 
   StringGrid1.col := 2;
   StringGrid1.row := 2;

   StringGrid1.SetFocus;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if gdFocused in State then      
   if  (acol = 2) and (arow = 2) then
     with (Sender as TstringGrid).Canvas do
        begin
           Brush.Color:=clRed;
           FillRect(Rect);
        end;
end;

ao mandar o foco para a linha e coluna espeficicada, a celula ficara em vermelho, a partir disso é so usar a criatividade

Link para o comentário
Compartilhar em outros sites

  • 0

Opa.. s obrigado pelas respostas ai..

é o seguinte, micheus akela parada de ondrawcell q eu não tinha intendido antigamente, mas agora funcionou..

deixei defaultdrawing True mesmo... e adicionei o seguinte cod no evento ondrawcell

procedure TFormCFinanceiro.GridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if (aRow in [grid.RowCount-1]) and not (gdFocused in State) then
      Grid.Canvas.Font.Style := [fsbold];
    Grid.Canvas.FillRect(Rect);
    Grid.Canvas.TextRect(Rect, Rect.Left +2, Rect.Top +2, Grid.Cells[aCol, aRow]);
end;

funcionou que nem uma belezinha, coloquei em negrito a ultima linha.

mas eu continuo com a ultima linha do grid com a colline,...

eu deixei o grid inteiro sem rowlines, e apenas com collines, mas gostaria de retirar o col line da ultima liunha, ou adcionar uma rowline no final....

tem como fazer isto, deixando o defaultdrawing true mesmo?...

é isso. obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0
eu deixei o grid inteiro sem rowlines, e apenas com collines, mas gostaria de retirar o col line da ultima liunha, ou adcionar uma rowline no final....

tem como fazer isto, deixando o defaultdrawing true mesmo?...

experimente esta alteração:

procedure TFormCFinanceiro.GridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if (aRow = (grid.RowCount-1)) and not (gdFocused in State) then
      Grid.Canvas.Font.Style := [fsbold];
   Grid.Canvas.FillRect(Rect);
   Grid.Canvas.TextRect(Rect, Rect.Left +2, Rect.Top +2, Grid.Cells[aCol, aRow]);

   if aRow = (grid.RowCount-1) then
   begin
     Grid.Canvas.MoveTo(Rect.Left, Rect.Top);
     Grid.Canvas.MoveTo(Rect.Right +1, Rect.Top);
   end;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Micheus, obrigado pela resposta,

Poisé, este método eu já tinha tentado com os exemplos que voce citou no outro post, mas não deu mesmo.

Acho que para desenhar as linhas do grid, (desenhar, alterar), so pode ser feito com o Default Drawing em False, mas aí eu perco a condição mudar a última linha para negrito pois com Defaultdrawing em false, ele executa antes de preencher o grid.

Bom, é isto... se tiver alguma outra idéia, posta ai, que eu testo aqui.

**** Aproveitando o mesmo tópico, Sabes como deixar duas colunas com o texto centralizado? (seria o Alingment do DBgrid taCenter) ***

if (aCol in [2,3]) and not (gdFocused in State) then begin
    if length(grid.Cells[acol,arow]) = 4 then
      Grid.Canvas.TextRect(Rect, Rect.Left +18, Rect.Top +2, Grid.Cells[aCol, aRow]);
        if length(grid.Cells[acol,arow]) = 5 then
      Grid.Canvas.TextRect(Rect, Rect.Left +15, Rect.Top +2, Grid.Cells[aCol, aRow]);
        if length(grid.Cells[acol,arow]) = 6 then
      Grid.Canvas.TextRect(Rect, Rect.Left +12, Rect.Top +2, Grid.Cells[aCol, aRow]);
        if length(grid.Cells[acol,arow]) = 7 then
      Grid.Canvas.TextRect(Rect, Rect.Left +9, Rect.Top +2, Grid.Cells[aCol, aRow]);
   end;
   if (aCol in [4]) and not (gdFocused in State) then
    Grid.Canvas.TextRect(Rect, Rect.Left +5, Rect.Top +2, Grid.Cells[aCol, aRow]);

opa o decima resolvi desta maneira, se tiver uma mais simples, beleza!

Obrigado , Abraços!

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

  • 0

schaukoski, funciona sim!

Foi mancada minha. :ph34r:

Veja que eu coloquei duas vezes MoveTo. Mas tem que ser MoveTo e LineTo.

...
   if aRow = (grid.RowCount-1) then
   begin
     Grid.Canvas.MoveTo(Rect.Left, Rect.Top);
     Grid.Canvas.LineTo(Rect.Right +1, Rect.Top);
   end;
Aproveitando o mesmo tópico, Sabes como deixar duas colunas com o texto centralizado? (seria o Alingment do DBgrid taCenter)
se você está desenhando o texto, você tem que posicioná-lo:
var
  Dx :Integer;
begin
...
  // Dx = posição para deslocar da esquerda
  Dx := ((Rect.Right -Rect.Left) -Grid.Canvas.TextWidth(Grid.Cells[ACol, ARow])) div 2; 
  Grid.Canvas.TextRect(Rect, Rect.Left +Dx, Rect.Top +1, Grid.Cells[ACol, ARow]);
...
end;

Abraços

p.s. Olha a bagunça com os posts. <_<

Link para o comentário
Compartilhar em outros sites

  • 0

Verdade, Funcionou Beleza!!..

eu so não consegui tirar os Collines que tem .. ficou tipo assim :

0|  CAMPO  |  CAMPO  |  CAMPO  |  CAMPO  |
1|         |         | (n vo fazer todos tracinhos ¬¬)
2|         |
3|         |
4|         |
5|         |   
6|_________|_____________________________|
7|TOTAL    |         |         |   TANTO $$
então, na linha 7, que é o meu TOTAL, eu não consegui tirar os colines ai ficou meio esquizito o ideal seria :
0|  CAMPO  |  CAMPO  |  CAMPO  |  CAMPO  |
1|         |         | (n vo fazer todos tracinhos ¬¬)
2|         |
3|         |
4|         |
5|         |   
6|_________|_____________________________|
7|TOTAL                                         TANTO $$

Mais beleza, Valeu Micheus ABRAÇOS!

Editado por Micheus
Quando quiser deixar mais "bonitinho" os grids, use a opção "Visualizar Post", antes de enviá-lo. ;-)
Link para o comentário
Compartilhar em outros sites

  • 0

Então, antes do post, eu tentei fazer isso, mas daí com os dois desabilitados, a linha fica na cor Branco, ela não aparece porque quando os dois desabilitados, a cor da linha do grid , fica da cor do fundo.. ai ferrou.

Mas tudo bem... valeu pelas dicas =)

Obrigado pela ajuda, até !

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

  • 0
Então, antes do post, eu tentei fazer isso, mas daí com os dois desabilitados, a linha fica na cor Branco, ela não aparece porque quando os dois desabilitados, a cor da linha do grid , fica da cor do fundo.. ai ferrou.
troque a cor da "caneta":

Grid.Canvas.Pen.Color := clBlack; // por exemplo

Link para o comentário
Compartilhar em outros sites

  • 0

C$%@#&* Micheus, Funcionou PERFEITAMENTE!, do jeitinho que eu queria cara... Muito Obrigado...

Eu não sabia que tinha opção para alterar a cor da caneta !, muito show de bola.... Abraços!!

vou deixar os fontes aqui pra quem quiser ter uma idéia.

procedure TFormCFinanceiro.GridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if (aRow in [grid.RowCount-1]) and not (gdFocused in State) then /// se for a ultima linha ,
      Grid.Canvas.Font.Style := [fsbold]; //// deixa em negrito.
   Grid.Canvas.FillRect(Rect);
   Grid.Canvas.TextRect(Rect, Rect.Left +2, Rect.Top +2, Grid.Cells[aCol, aRow]);   // se for a coluna 2 ou 3 *centralizar*
   if (aCol in [2,3]) and not (gdFocused in State) then begin                                                         
    if length(grid.Cells[acol,arow]) = 4 then///  se tiver 4 digitos , eu coloko uma margem
      Grid.Canvas.TextRect(Rect, Rect.Left +18, Rect.Top +2, Grid.Cells[aCol, aRow]);////de 18 espacinhos
    if length(grid.Cells[acol,arow]) = 5 then
      Grid.Canvas.TextRect(Rect, Rect.Left +15, Rect.Top +2, Grid.Cells[aCol, aRow]);
    if length(grid.Cells[acol,arow]) = 6 then
      Grid.Canvas.TextRect(Rect, Rect.Left +12, Rect.Top +2, Grid.Cells[aCol, aRow]);
    if length(grid.Cells[acol,arow]) = 7 then
      Grid.Canvas.TextRect(Rect, Rect.Left +9, Rect.Top +2, Grid.Cells[aCol, aRow]);
   end;
   if (aCol in [4]) and not (gdFocused in State) then
    Grid.Canvas.TextRect(Rect, Rect.Left +5, Rect.Top +2, Grid.Cells[aCol, aRow]);

   if aRow = (grid.RowCount-1) then begin  /// se for a ultima linha
    Grid.Canvas.MoveTo(Rect.Left, Rect.Top); //// posiciono um ponto no lado esquerdo do quadrado, na ponta de cima
    Grid.Canvas.LineTo(Rect.Right, Rect.Top); //// risco do ponto, até a posicao direita do topo
   end else begin // senao
    Grid.Canvas.Pen.Color := clmedgray;  /// cor da linha , com options.vetline, horzline desativados, alinha fica transparente
    Grid.Canvas.MoveTo(Rect.Right, Rect.Top); /// move para o ponto
    Grid.Canvas.LineTo(Rect.Right, Rect.Bottom+2); // risca do ponto , ate este ponto
   end;

Um abraço para todos.

Editado por schaukoski
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...