Fórum Problema com DBGrid #381087
10/07/2010
0
Estou tendo um problema com DBGrid. Vou explicar:
Para criar um efeito zebra no DBGrid, tenho o código abaixo no evento DrawColumnCell dele.
O problema ocorre quando, em execução, se tenta redimensionar as colunas. O pior é que é o erro é "Access Violation" e não ocorre toda a vez que é feito o redimensionamento. É aleatório. Se tirar a rotina abaixo, o problema não ocorre.
Rotina executada no DrawColumnCell
if (GdSelected in State) then //se está selecionado
begin
DBGrid1.Canvas.Brush.Color := $00778086;
DBGrid1.Canvas.Font.Style := [fsBold];
DBGrid1.Canvas.Font.color := ClWhite;
end
else //se não está selecionado
begin
if not odd(DM.CDSContasBancarias.RecNo) then // se não for ímpar
DBGrid1.Canvas.Brush.Color := $00E1FFF9
else
DBGrid1.Canvas.Brush.Color := $00FFEBDF;
DBGrid1.Canvas.Font.Color := ClBlack;
end;
DBGrid1.Canvas.FillRect(Rect); // pinta a célula
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão
Alguém faz idéia de como solucionar isso?
Obrigado
Valdir
Valdir Dill
Curtir tópico
+ 0Posts
10/07/2010
Marco Salles
Estou tendo um problema com DBGrid. Vou explicar:
Para criar um efeito zebra no DBGrid, tenho o código abaixo no evento DrawColumnCell dele.
O problema ocorre quando, em execução, se tenta redimensionar as colunas. O pior é que é o erro é "Access Violation" e não ocorre toda a vez que é feito o redimensionamento. É aleatório. Se tirar a rotina abaixo, o problema não ocorre.
Rotina executada no DrawColumnCell
if (GdSelected in State) then //se está selecionado
begin
DBGrid1.Canvas.Brush.Color := $00778086;
DBGrid1.Canvas.Font.Style := [fsBold];
DBGrid1.Canvas.Font.color := ClWhite;
end
else //se não está selecionado
begin
if not odd(DM.CDSContasBancarias.RecNo) then // se não for ímpar
DBGrid1.Canvas.Brush.Color := $00E1FFF9
else
DBGrid1.Canvas.Brush.Color := $00FFEBDF;
DBGrid1.Canvas.Font.Color := ClBlack;
end;
DBGrid1.Canvas.FillRect(Rect); // pinta a célula
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão
Alguém faz idéia de como solucionar isso?
Obrigado
Valdir
DBGrid1.Canvas.FillRect(Rect); // pinta a célula DBGrid1.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão por DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Gostei + 0
12/07/2010
Valdir Dill
Estou tendo um problema com DBGrid. Vou explicar:
Para criar um efeito zebra no DBGrid, tenho o código abaixo no evento DrawColumnCell dele.
O problema ocorre quando, em execução, se tenta redimensionar as colunas. O pior é que é o erro é "Access Violation" e não ocorre toda a vez que é feito o redimensionamento. É aleatório. Se tirar a rotina abaixo, o problema não ocorre.
Rotina executada no DrawColumnCell
if (GdSelected in State) then //se está selecionado
begin
DBGrid1.Canvas.Brush.Color := $00778086;
DBGrid1.Canvas.Font.Style := [fsBold];
DBGrid1.Canvas.Font.color := ClWhite;
end
else //se não está selecionado
begin
if not odd(DM.CDSContasBancarias.RecNo) then // se não for ímpar
DBGrid1.Canvas.Brush.Color := $00E1FFF9
else
DBGrid1.Canvas.Brush.Color := $00FFEBDF;
DBGrid1.Canvas.Font.Color := ClBlack;
end;
DBGrid1.Canvas.FillRect(Rect); // pinta a célula
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão
Alguém faz idéia de como solucionar isso?
Obrigado
Valdir
DBGrid1.Canvas.FillRect(Rect); // pinta a célula DBGrid1.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão por DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Olá Marco,
Obrigado pela dica, mas não funcionou.
Mudei ambas as opções que você indicou e também cada uma sem alterar a outra, mas continua igual.
Gostei + 0
12/07/2010
Marco Salles
Gostei + 0
12/07/2010
Wilson Junior
procedure ZebrarDBGrid(DBGrid: TDBGrid; Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin DBGrid.Canvas.FillRect( Rect ); if gdSelected in State then begin DBGrid.Canvas.Font.Color := clWhite; DBGrid.Canvas.Brush.Color := clNavy; end else begin DBGrid.Canvas.Font.Color := clBlack; if Odd(DBGrid.DataSource.DataSet.RecNo) then DBGrid.Canvas.Brush.Color := GRID_COR_ZEBRADO1 else DBGrid.Canvas.Brush.Color := GRID_COR_ZEBRADO2 ; end ; DBGrid.DefaultDrawColumnCell( Rect, DataCol, Column, State ); end;
E o que você quer dizer quanto ao alterar o tamanho da coluna???
Espero ter colaborado.
Gostei + 0
12/07/2010
Valdir Dill
Quando em execução se coloca o mouse no título do dBGrid e mouse fica em forma de cruz. Se nesse momento o usuário clicar e arrastar o mouse, aquela coluna do Dbgrid será redimensionada.
Gostei + 0
12/07/2010
Marco Salles
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)