Delphi Tips & Tricks softsale > Delphi Tips & Tricks      

następna rada >
< poprzednia rada

Jak zmienić kolor wiersza w dbgrid na zdarzeniu OnMouseMove?

Cżęsto zachodzi potrzeba jakiegoś specjalnego wyświetleniu wiersza w dbgridzie bez konieczności kliknięcia na nim a jedynie w sytuacji kiedy kursor myszki zostanie przesunięty na ten wiersz. Stosujemy tu klasyczny chwyt. Poprzez deklarację type Tmoj_grid = class(TDBGrid); możemy dostepować do własności dbgrida typu protected ( tu row).



uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, Grids, DBGrids, ExtCtrls, DBCtrls;


type Tmoj_grid = class(TDBGrid);
........

// to jest procedura obslugi zdarzenia OnMouseMove
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  gc: TGridCoord;
begin
  gc:= DBGrid1.MouseCoord(x, y);

  if (gc.X > 0) AND (gc.Y > 0) then
  begin
    DBGrid1.DataSource.DataSet.MoveBy (gc.Y - Tmoj_grid(DBGrid1).Row);
   // błąd kompilacji bo własność row jest protected  DBGrid1.DataSource.DataSet.MoveBy(gc.Y     -DBGrid1.Row);
  end;

end;

// a to procedura odrysowania dbgrida
// Jeśli własność row ( integer) jest równa własności ActiveRecord(+1) obiektu DataLink to wybrany wiersz zostanie odrysowany...



procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (Tmoj_grid(DBGrid1).DataLink.ActiveRecord + 1 = Tmoj_grid(DBGrid1).Row)
  or (gdFocused in State) or (gdSelected in State) then
  begin
    DBGrid1.Canvas.Brush.Color :=$00F9FCDC;
//  np zmiana fontu, koloru i rozmiaru czcionki
    DBGrid1.Canvas.Font.Style := DBGrid1.Canvas.Font.Style + [fsBold];
    DBGrid1.Canvas.Font.Color := clRed;
    DBGrid1.Canvas.Font.size:=10;
    Dbgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
end;


W podobny sposób można zmienić np wysokość wiersza w gridzie Tmoj_grid(DBGrid1).RowHeights[0] := 20; natomiast DBGrid1.RowHeights[0] := 20; spowoduje błąd kompilacji

Specjalne odrysowanie wiersza w dbgridzie ( od ruchu myszki) ilustruje przykład tip35.zip .


SOFTSALE - Oprogramowanie i Szkolenia
softsale@softsale.com.pl

03-565 Warszawa , ul. Borzymowska 43 lok. 301C
tel/fax:4084840,0607612428