delphi cxgrid 画鼠标经过的轨迹或者说是鼠标经过下高亮行
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, dxSkinsCore, dxSkinsDefaultPainters, dxSkinscxPCPainter, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, DBTables, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, cxLookAndFeels, cxLookAndFeelPainters, dxSkinWhiteprint; type TForm1 = class(TForm) cxGrid1: TcxGrid; cxGrid1DBTableView1: TcxGridDBTableView; cxGrid1DBTableView1CustNo: TcxGridDBColumn; cxGrid1DBTableView1Company: TcxGridDBColumn; cxGrid1DBTableView1Addr1: TcxGridDBColumn; cxGrid1DBTableView1Addr2: TcxGridDBColumn; cxGrid1DBTableView1City: TcxGridDBColumn; cxGrid1DBTableView1State: TcxGridDBColumn; cxGrid1DBTableView1Zip: TcxGridDBColumn; cxGrid1DBTableView1Country: TcxGridDBColumn; cxGrid1DBTableView1Phone: TcxGridDBColumn; cxGrid1DBTableView1FAX: TcxGridDBColumn; cxGrid1DBTableView1TaxRate: TcxGridDBColumn; cxGrid1DBTableView1Contact: TcxGridDBColumn; cxGrid1DBTableView1LastInvoiceDate: TcxGridDBColumn; cxGrid1Level1: TcxGridLevel; Table1: TTable; DataSource1: TDataSource; cxStyleRepository1: TcxStyleRepository; cxHotTrackStyle: TcxStyle; procedure FormCreate(Sender: TObject); procedure cxGrid1DBTableView1MouseLeave(Sender: TObject); procedure cxGrid1DBTableView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure cxGrid1DBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); private { Private declarations } FHotTrackedRecord: TcxCustomGridRecord; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin FHotTrackedRecord := nil; end; procedure TForm1.cxGrid1DBTableView1MouseLeave(Sender: TObject); var ReInvalidate:Boolean; begin if Assigned(FOrgOnMouseLeave) then FOrgOnMouseLeave(Sender); ReInvalidate := FHotTrackedRecord <> nil; FHotTrackedRecord := nil; if ReInvalidate then TcxGridSite(Sender).GridView.Invalidate(); //这里其实也可以不所有都刷新 end; procedure TForm1.cxGrid1DBTableView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var AHitTest: TcxCustomGridHitTest; LastFHotTrackedRecord: TcxCustomGridRecord; begin if Assigned(FOrgOnMouseMove) then FOrgOnMouseMove(Sender, Shift, X, Y); if FHotTrackedRecord <> nil then begin LastFHotTrackedRecord := FHotTrackedRecord; FHotTrackedRecord := nil; LastFHotTrackedRecord.ViewInfo.Invalidate; //只刷新一个就好了,不用所有都刷新会闪烁 end; AHitTest := TcxGridSite(Sender).ViewInfo.GetHitTest(X, Y); if AHitTest is TcxGridRecordHitTest then begin FHotTrackedRecord := TcxGridRecordHitTest(AHitTest).GridRecord; FHotTrackedRecord.ViewInfo.Invalidate; //只刷新一个就好了,不用所有都刷新会闪烁 // TcxGridSite(Sender).GridView.Invalidate(); end; end; procedure TForm1.cxGrid1DBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); begin if (FHotTrackedRecord <> nil) and (AViewInfo.GridRecord = FHotTrackedRecord) then begin ACanvas.Brush.Color := cxHotTrackStyle.Color; ACanvas.Font.Color := cxHotTrackStyle.TextColor; end; end; end.