在TstringGrid 表格中如何实现Hint 功能,请各位大虾指导?(200分)

  • 主题发起人 主题发起人 jlcsx
  • 开始时间 开始时间
J

jlcsx

Unregistered / Unconfirmed
GUEST, unregistred user!
用TstringGrid表格显示查询结果集,但有字段长度大长,我用stringgrid1.OnMouseMove事件
给表格的Hint赋值,但运行的结果是但鼠标从表格外移动到表格内,可激活Hint提示,
在表格内移动则没有Hint 提示,请问:
1:如何实现在表格内移动也能有Hint提示?
2:如何判断但表格的列宽能足够显示时,就不用Hint提示,只有但列宽不够时才显示Hint?

以下的事件是给StringGrid1.Hint赋值
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
GC: TGridCoord;
// v_s:string;
begin
GC := StringGrid1.MouseCoord(0, Y); // GC.Y 即鼠标所选择的行号。
StringGrid1.hint:=StringGrid1.cells[gc.x,gc.y]);
end;
 
我是这么做的:
procedure TFrmMain.SGSubjectMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
Arow,Acol:longint;
MyRect: TGridRect;
MyPoint:TPoint;
begin
SGSubject.MouseToCell(X,Y,Acol,Arow);
MyRect:=SGSubject.Selection ;
MyPoint.x :=X;
MyPoint.y :=Y;
MyPoint:=SGSubject.ClientToScreen(MyPoint);
if (Arow>=0) then
begin
MyRect.Left :=0;
MyRect.Top :=Arow;
MyRect.Right :=1;
MyRect.Bottom :=Arow;
SGSubject.Selection :=MyRect;
SGSubject.Hint :=SGSubject.Cells[0,Arow];
Application.ActivateHint(MyPoint);
end;
end;
也许你的程序中只需要在设置hint后执行Application.ActivateHint(getcursorpos);
要判断是否能够完全显示字串也许可以用GetTextExtentPoint32,
也可以用:设置form的字体与stringgrid的字体大小一样,然后用canvas.textwidth来获取
该字串所需的显示宽度,然后与stringgrid的列宽进行比较。
 
接受答案了.
 
后退
顶部