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

Grid Colorido


Vivendo&Aprendendo

Pergunta

Galera to usando essa rotina para fazer com que o meu grid fique cada linha de uma cor e ta funcionando certinho, o meu problema é que ele ta tirando a barra de rolagem.

procedure TFrmAlunos.DBGridInfDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  If odd(ADOInformacoes.RecNo) then
  begin
    DBGridInf.Canvas.Font.Color:= clBlack;
    DBGridInf.Canvas.Brush.Color:= clInfoBk;
  end
  else
  begin
    DBGridInf.Canvas.Font.Color:= clBlack;
    DBGridInf.Canvas.Brush.Color:= clSkyBlue;
  end;
  DBGridInf.Canvas.FillRect(Rect);
  DBGridInf.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;

E eu preciso dessa barra.

Como fazer para ela aparecer e o grid continuar zebrado?

falou

Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts Recomendados

  • 0
Ok s3c apareceu, mas sabe me dizer o porque que ela sumiu depois de eu usar aquela rotina?
Deve ser porque as Scrollbars são controladas pelo Windows e ele só redesenha quando um evento de paint é gerado; como você está pintando pelo Canvas, o Windows não sabe que elas foram mexidas.
Link para o comentário
Compartilhar em outros sites

  • 0

var SBI:tagSCROLLBARINFO;
begin
  SBI.cbSize := SizeOf(SBI);
  GetScrollBarInfo(DBGrid1.Handle, Integer(ObjId_HScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    // Barra horizontal visível
  GetScrollBarInfo(DBGrid1.Handle, Integer(ObjId_VScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    // Barra vertical visível
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Já me intrometendo,

uma vez que você altera as propriedades do canvas momentos antes do redesenho do grid, se você substituir o código:

 DBGridInf.Canvas.FillRect(Rect);
DBGridInf.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
por:
DBGridInf.DefaultDrawColumnCell(Rect, DataCol, Column, State);

não resolve o seu problema, já que o redesenho é executado com suas configurações de cores?

Link para o comentário
Compartilhar em outros sites

  • 0

Não deu certo também.

Se deixar assim aparece as duas sempre mesmo que não tiver registro no grid.

  DBGridInf.Canvas.FillRect(Rect);
  DBGridInf.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
  ShowScrollBar(DBGridInf.Handle, SB_Both, true);
Se eu tirar essas linhas e colocar essa não aparece nenhuma das duas barras mesmo tendo registro no grid:
DBGridInf.DefaultDrawColumnCell(Rect, DataCol, Column, State);

falou

Link para o comentário
Compartilhar em outros sites

  • 0
Não deu certo também.

Se deixar assim aparece as duas sempre mesmo que não tiver registro no grid.

  DBGridInf.Canvas.FillRect(Rect);
  DBGridInf.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
  ShowScrollBar(DBGridInf.Handle, SB_Both, true);

Mas aí não está o código do GetScrollBarInfo.
Link para o comentário
Compartilhar em outros sites

  • 0

Tente assim:

var SBI:tagSCROLLBARINFO;
begin
  . . . // Operações do Canvas
  SBI.cbSize := SizeOf(SBI);
  GetScrollBarInfo(DBGrid1.Handle, Integer(ObjId_HScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    ShowScrollBar(DBGridInf.Handle, SB_Horz, true);
  GetScrollBarInfo(DBGrid1.Handle, Integer(ObjId_VScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    ShowScrollBar(DBGridInf.Handle, SB_Vert, true);
end;

Link para o comentário
Compartilhar em outros sites

  • 0

cara to usando o seguinte código no evento OnDrawColumnCell do grid:

var SBI:tagSCROLLBARINFO;
begin
  If odd(ADOInformacoes.RecNo) then
  begin
    DBGridInf.Canvas.Font.Color:= clBlack;
    DBGridInf.Canvas.Brush.Color:= clInfoBk;
  end
  else
  begin
    DBGridInf.Canvas.Font.Color:= clBlack;
    DBGridInf.Canvas.Brush.Color:= clSkyBlue;
  end;
  DBGridInf.Canvas.FillRect(Rect);
  DBGridInf.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
  ShowScrollBar(DBGridInf.Handle, SB_Both, true);
   // Operações do Canvas
  SBI.cbSize := SizeOf(SBI);
  GetScrollBarInfo(DBGridInf.Handle, Integer(ObjId_HScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    ShowScrollBar(DBGridInf.Handle, SB_Horz, true);//quando coloco false aqui fica doidão
  GetScrollBarInfo(DBGridInf.Handle, Integer(ObjId_VScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    ShowScrollBar(DBGridInf.Handle, SB_Vert, true);

E não funciona fica as duas barras da mesma forma tendo registro ou não e quando coloco false no primeiro if cria um loop muito doido.

falou

Link para o comentário
Compartilhar em outros sites

  • 0

cara quando eu tiro a primeira não aparece nenhuma das barras.

meu código está assim agora:

  If odd(ADOInformacoes.RecNo) then
  begin
    DBGridInf.Canvas.Font.Color:= clBlack;
    DBGridInf.Canvas.Brush.Color:= clInfoBk;
  end
  else
  begin
    DBGridInf.Canvas.Font.Color:= clBlack;
    DBGridInf.Canvas.Brush.Color:= clSkyBlue;
  end;
  DBGridInf.Canvas.FillRect(Rect);
  DBGridInf.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
   // Operações do Canvas
  SBI.cbSize := SizeOf(SBI);
  GetScrollBarInfo(DBGridInf.Handle, Integer(ObjId_HScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    ShowScrollBar(DBGridInf.Handle, SB_Horz, true);
  GetScrollBarInfo(DBGridInf.Handle, Integer(ObjId_VScroll), SBI);
  if (SBI.rgstate[0] and $8000) = 0 then
    ShowScrollBar(DBGridInf.Handle, SB_Vert, true);

Link para o comentário
Compartilhar em outros sites

  • 0

aí galera está resolvido o meu problema...

Consegui da seguinte forma:

procedure TFrm_Principal.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  IF NOT odd(IBTable1.RecNo) THEN
    IF NOT (GdSelected IN State) THEN      
    Begin
       Dbgrid1.Canvas.Brush.Color := $00AABB;
       Dbgrid1.Canvas.FillRect(rect);
       Dbgrid1.DefaultDrawDataCell(Rect,column.Field,State);
      end;
end;

Funciona direitinho. Coloca o grid de forma zebrada e adiciona as barras somente quando necessário.

falou

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...