关于DBGrid的内容在鼠标移动时的显示问题 ( 积分: 30 )

  • 主题发起人 主题发起人 muree
  • 开始时间 开始时间
M

muree

Unregistered / Unconfirmed
GUEST, unregistred user!
TDBGrid里每页显示有20条记录,当其中某一列的内容过长时无法完全显示,现在想做成把鼠标放到上边,以提示的方式显示完整内容(只在内容过长时显示),也就是Delphi编程环境里那种浅黄色的提示(TDBGrid.Hint ?),应该如何实现?我想是不是应该在TDBGrid的OnMouseMove事件中处理,用TDBGrid.MouseCoord(X,Y).X 和 TDBGrid.MouseCoord(X,Y).Y 来判断具体是在哪一格,然后移动记录指针<TQuery.MoveBy(?) 或 TQuery.Rec = ?>来得到它的值(TQuery 先执行 DisableControls)后显示出来再移回原来的记录(TQuery 再执行 EnableControls)?可是移动鼠标到超过TDBGrid页面记录数的一半后(超过第10条记录)再移动鼠标记录指针总会出问题(定位不准),请高人多多指教,小弟非常感谢!
 
DBGRID没试过,我知道TCHECKBOX可以用消息来使看不到的文字变宽来看见,好像是CM_什么,往这方面找找
 
方法一:
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
lGridCoord: TGridCoord;
iTemp, jTemp: Integer;
begin
lGridCoord := DBGrid1.MouseCoord(X,Y);
if(lGridCoord.X <= 0) or (lGridCoord.Y <= 0) then Exit;
ADOQuery1.DisableControls;
iTemp := lGridCoord.Y - ADOQuery1.RecNo;
ADOQuery1.MoveBy(iTemp);
//if (...) then //想上下或左右移动一行或一列(即移动一个单元格时)时才执行以下几条语句,该怎么写?
begin
DBGrid1.ShowHint := True;
DBGrid1.Hint := DBGrid1.Columns.Items[lGridCoord.X - 1].Field.DisplayText;
//Application.ActivateHint(Point(Rect.Left, Rect.Top)); //怎么取得鼠标所在行、列(即 lGridCoord )的 Rect 值?我想在鼠标所在那个单元格里 Hint 显示该单元格的值
end;
ADOQuery1.MoveBy(-iTemp);
ADOQuery1.EnableControls;
end;

方法二:
...
private
fGridCoord: TGridCoord;
{ Private declarations }
...

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
lGridCoord: TGridCoord;
begin
lGridCoord := DBGrid1.MouseCoord(X, Y);
if(lGridCoord.X <= 0) or (lGridCoord.Y <= 0) then Exit;
fGridCoord := lGridCoord;
DBGrid1.Refresh;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
lGridCoord: TGridCoord;
begin
lGridCoord := TDBGrid(Sender).MouseCoord(Rect.Left, Rect.Top);
if (fGridCoord.X = lGridCoord.X) and (fGridCoord.Y = lGridCoord.Y) then //and (...),想上下或左右移动一行或一列(即移动一个单元格时)时才执行以下几条语句,该怎么写?
begin
DBGrid1.ShowHint := True;
DBGrid1.Hint := Column.Field.DisplayText;
Application.ActivateHint(Point(Rect.Left + 6, Rect.Top + 12));
end;
end;

哪种方法好呢?
 
好象cxGrid可以简单的实现这功能~
 
后退
顶部