use*_*918 7 delphi lazarus tstringgrid
我正在跑Lazarus 0.9.30.
我TStringGrid在表单上有一个标准,并希望在将鼠标指针移动到列标题上时显示不同的提示.我正在使用此代码执行此操作并且它有点工作但是您经常需要单击单元格以获取提示更改,当我实际希望它在鼠标指针移动时更改.我将所有提示存储在我使用列索引作为键搜索的集合中.有没有办法更顺畅地显示提示?
procedure TTmMainForm.SgScoutLinkMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
R, C: Integer;
begin
R := 0;
C := 0;
SgScoutLink.MouseToCell(X, Y, C, R);
with SgScoutLink do
begin
if (R = 0) then
if ((C >= 3) and (C <= 20)) then
begin
SgScoutLink.Hint := FManager.ScoutLinkColumnTitles.stGetColumnTitleHint(C-3);
SgScoutLink.ShowHint:= True;
end; {if}
end; {with}
end;
Run Code Online (Sandbox Code Playgroud)
Rem*_*eau 10
将事件处理程序分配给TApplication.OnShowHint或TApplicationEvents.OnShowHint事件,或者子类TStringGrid来拦截CM_HINTSHOW消息.其中任何一个都将为您提供对THintInfo用于控制提示窗口行为的记录的访问权限.您可以根据THintInfo.CursorRect需要自定义成员的坐标.只要鼠标移动到该矩形之外,就会使用最新的Hint属性文本(可以在THintInfo.HintStr显示之前使用该成员自定义)重新激活提示窗口.矩形越小,重新激活提示窗口的频率越高.此功能允许UI控件在其客户区域内具有多个子部分,当鼠标在同一UI控件上移动时,这些子部分显示不同的提示字符串.
TApplication.HintShortPause属性的值(或拦截CM_HINTSHOWPAUSE消息)控制提示窗口在重新激活之前是否消失.如果将暂停值设置为零,则提示窗口会立即更新其文本而不会消失.如果将暂停值设置为非零值,则只要鼠标保持在同一UI控件上,提示窗口就会消失,然后在指定的毫秒数后再次出现.
例如:
procedure TTmMainForm.FormCreate(Sender: TObject);
begin
Application.OnShowHint := AppShowHint;
end;
procedure TTmMainForm.FormDestroy(Sender: TObject);
begin
Application.OnShowHint := nil;
end;
procedure TTmMainForm.AppShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
var
R, C: Integer;
begin
if HintInfo.HintControl = SgScoutLink then
begin
R := 0;
C := 0;
SgScoutLink.MouseToCell(HintInfo.CursorPos.X, HintInfo.CursorPos.Y, C, R);
if (R = 0) and (C >= 3) and (C <= 20) then
begin
HintInfo.CursorRect := SgScoutLink.CellRect(C, R);
HintInfo.HintStr := FManager.ScoutLinkColumnTitles.stGetColumnTitleHint(C-3);
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
编辑:我刚注意到你正在使用拉撒路.我所描述的是如何在Delphi中处理这个问题.我不知道是否也适用于拉撒路.
| 归档时间: |
|
| 查看次数: |
3773 次 |
| 最近记录: |