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.

 

posted @ 2024-05-20 09:09  Tag  阅读(8)  评论(0编辑  收藏  举报