Olá Pessoal,

Fiz um componente e adicionei a funcionalidade para destacar
a linha selecionada da DBGrid mesmo em edição, semelhante
a dgRowSelect, porém esta não permite edição.


Pesquisando da internet, fiz o componente abaixo, funciona bem,
mas tem um efeito colateral, quando as colunas são muitas e
navegar para as colunas da direita e pressionar seta para mudar
de registro, não pinta a célula da primeira coluna.

Alguma sugestão para resolver este efeito colateral ou uma solução melhor?

Testes efetuados com Delphi 2007 e Delphi 2010


unit MDBGrid;

interface

uses
  Windows, SysUtils, Classes, Controls, Grids, DBGrids, DBClient, Graphics, 
Forms;

type
  TMDBGrid = class(TDBGrid)
  private
  protected
    procedure DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: 
TColumn; State: TGridDrawState); override;
  public

  published

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Paulo', [TMDBGrid]);
end;

procedure TMDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer; 
Column: TColumn; State: TGridDrawState);
begin
  if not (gdSelected in State) and (Rect.Top = CellRect(DataCol, Row).Top) 
then
  begin
    Canvas.Brush.Color := $00FFEFDF;
    Canvas.FillRect(Rect);
    DefaultDrawDataCell(Rect, Column.Field, State);
  end;

  inherited;
end;

end.


----
Paulo Geloramo
www.assisinformatica.com

Responder a