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

(Resolvido)Colorir DBGRID


schaukoski

Pergunta

ola galera...

bom estou usando o seguinte codigo

procedure TFormCagesys.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  If odd(DM.SDSagesys.RecNo) then begin
    DBGrid1.Canvas.Font.Color:= clBlack;
    DBGrid1.Canvas.Brush.Color:= cl3dlight;
  end else begin
    DBGrid1.Canvas.Font.Color:= clBlack;
    DBGrid1.Canvas.Brush.Color:= clWhite;
  end;
  if (gdFocused in state) then
    DBGrid1.Canvas.Font.Color:= clred;

  DBGrid1.Canvas.FillRect(Rect);
  Dbgrid1.Fields[1].Alignment := taCenter;
  Dbgrid1.DefaultDrawDataCell(Rect, dbgrid1.columns[datacol].field, State);
end;

ele funciona assim...

deixo o dbgrid zebrado com 3dlight, e white... depois se tiver focado eu coloco o campo em vermelho.. BELEZA!! tudo ok..

mas eu tenho duas colunas no meu dbgrid.. e quando ele foca ele so deixa em vermelho o 1° campo...

o zebramento fica certo nos dois campos.. mas quando eu foco não fika vermelho as duas colunas..

estou com a opcao do dbgrid1 como rowselect true..

se eu desmarcar essa opção, ele deixa em vermelho o campo que eu seleciono..

bom se alguém souber ai.. abraços

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

4 respostass a esta questão

Posts Recomendados

  • 0

Acredito que você deva testar em State o estado gdSelected ao invés de gdFocused:

if gdSelected in State then

Sobre a linha:

Dbgrid1.Fields[1].Alignment := taCenter;

Evite fazer este tipo de atribuição neste tipo de evento. Observe que o evento ocorre para cada linha desenhada e esta atribuição pode ser feita apenas uma vez (não a cada pintura) em design-time ou após aberto o dataset (caso as colunas não tenham sido adicionadas no DBGrid em design-time).

Observe que, para o evento que você está tratando (OnDrawColumnCell), voce deveria estar chamando o método padrão deste evento - DefaultDrawColumnCell, e não DefaultDrawDataCell (para OnDrawDataCell) ou então utilize este último evento. Alias, mão me recordo agora, mas um deles está obsoleto (acho que o primeiro).

Também, você deve passar como parâmetro, os mesmos que são recebidos no evento tratado:

procedure TFormCagesys.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  If odd(DM.SDSagesys.RecNo) then
    DBGrid1.Canvas.Brush.Color:= cl3dlight
  else
    DBGrid1.Canvas.Brush.Color:= clWhite;

  if (gdSelected in state) then
    DBGrid1.Canvas.Font.Color:= clred
  else
    DBGrid1.Canvas.Font.Color:= clBlack;

  DBGrid1.Canvas.FillRect(Rect);
 //  Dbgrid1.Fields[1].Alignment := taCenter;
  Dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Complementando o que o Micheus já expos ...

mas eu tenho duas colunas no meu dbgrid.. e quando ele foca ele so deixa em vermelho o 1° campo...

o zebramento fica certo nos dois campos.. mas quando eu foco não fica vermelho as duas colunas..

Voce so vai deixar todas as colunas da linha ( Texto ) em vermelho se na propriedade Options do Dbgrid a opção dgEditing estiver false e a opção dgRowSelect estiver true. ou seja, se deixar em modo de edição não vai conseguir obter o resultado desejado.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bem observado Jhonas.

Agora em casa, conferindo em meus exemplos, posso ainda acrescentar, ao que já sugeri, que se você optar pela forma como eu reapresentei o seu código, e mantendo a propriedade DefaultDrawing = True, não há necessidade da linha (teste):

DBGrid1.Canvas.FillRect(Rect);

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