Este Truco es de Zarko Gajic de About.com, lo encontre y queria compartirlo con ustedes:
1. Primer paso es preparar el Hack del DBGrid en la sección de interface:
Código Delphi
[-]Type
THackDBGrid = class(TDBGrid) ;
2. el siguiente paso es agregar un private, la propiedad "MouseOverRow" de tipo Integer que indica la posición del cursor sobre las filas:
Código Delphi
[-]private
fMouseOverRow: integer;
procedure SetMouseOverRow(const Value: integer) ;
property MouseOverRow : integer read fMouseOverRow write SetMouseOverRow;
3. tercer paso es en el evento OnMouseMove del DBGrid:
Código Delphi
[-]procedure TForm1.DBGrid1MouseMove(
Sender: TObject;
Shift: TShiftState;
X, Y: Integer) ;
var
gc: TGridCoord;
begin
gc := DBGrid1.MouseCoord(x, y) ;
MouseOverRow := gc.Y;
end
4. Fijar la propiedad MouseOverRow que sirve para refrescar las filas al mover el mouse y que luego se le aplicara en el evento OnDrawColumnCell del DBGrid:
Código Delphi
[-]procedure TForm1.SetMouseOverRow(const Value: integer) ;
begin
if fMouseOverRow <> Value then
begin
fMouseOverRow := Value;
DBGrid1.Repaint;
end;
end;
5. aqui se aplica la propiedad MouseOverRow en el evento OnDrawColumnCell:
Código Delphi
[-]procedure TForm1.DBGrid1DrawColumnCell(
Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState) ;
begin
if NOT ((gdFocused in State) or (gdSelected in State))
AND (MouseOverRow = 1 + THackDBGrid(DBGrid1).DataLink.ActiveRecord) then
begin
with DBGrid1.Canvas do
begin
Brush.Color := clSilver;
Font.Color := clNavy;
end;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State) ;
end;
end;
y eso es todo y que lo disfruten!!
Saludos.