读书人

?怎么让鼠标在DBGrid内部不同列移动时

发布时间: 2012-02-25 10:01:49 作者: rapoo

???如何让鼠标在DBGrid内部不同列移动时,显示当前单元格Hint值???
表T1,列name、age、sex,ADOQuery1
假如鼠标移动到第二行的age列,在DBGrid1的Hint中显示28即可,如移动第一行,显示27即可,是移动,
要在DBGrid不同列中连续移动。
name age sex
11 27 男
22 28 女

Delphi(Pascal) code
type TMyGrid = Class(TCustomDBGrid);procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);var  row, col : integer;  rec : integer;begin  inherited;  TDBGrid(Sender).MouseToCell(X, Y, col, row);  if dgTitles in TDBGrid(Sender).Options then    Dec(row);  if dgIndicator in TDBGrid(Sender).Options then    Dec(col);  if TMyGrid(TDBGrid(Sender)).DataLink.Active and     (row >= 0) and (col >= 0) then begin    rec := TMyGrid(TDBGrid(Sender)).DataLink.ActiveRecord;    try      TMyGrid(TDBGrid(Sender)).DataLink.ActiveRecord := row;      TDBGrid(Sender).Hint := 'Content of field : '+                              TDBGrid(Sender).Columns[col].Field.AsString;      Application.ActivateHint(Mouse.CursorPos);    finally      TMyGrid(TDBGrid(Sender)).DataLink.ActiveRecord:= rec;    end;  end;end;  


已引入type,及相关单元。运行提示: Undeclared identifier: 'MouseToCell'

[解决办法]
如果是DBGridEh的话就在其DBGridEh1DataHintShow函数里写上
Params.HintStr := Column.Field.AsString就可以了;
或者
Params.HintStr := Sender.DataSource.DataSet.FieldByName('隐藏列名').AsString

读书人网 >.NET

热点推荐