PDA

Ver la Versión Completa : HighLight en Filas de un DBGrid


enecumene
18-01-2008, 20:39:38
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:

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:

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:

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:

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:

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.