我有一个包含以下组件的表单:包含单个TPageControl的TTabSheet,包含TEdit的表单。
我希望在页面控制选项卡上鼠标显示提示"Hello“,而在TEdit上鼠标时不显示提示。
PageControl有一个hint= "Hello"和showhint = true。这如预期的那样起作用。
TEdit有showhint = false,parentshowhint = false,hint是空的。
但是,当我在TEdit上移动鼠标时,我仍然会得到一个"Hello“提示。我怎么才能阻止这一切?
这是.dfm,如果你感兴趣的话。
object Form65: TForm65
Left = 0
Top = 0
Caption = 'Form65'
ClientHeight = 258
ClientWidth = 290
OldCreateOrder = False
ShowHint = True
TextHeight = 13
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 290
Height = 258
Hint = 'Bar'
ActivePage = TabSheet1
Align = alClient
TabOrder = 0
object TabSheet1: TTabSheet
Caption = 'TabSheet1'
object Edit3: TEdit
Left = 72
Top = 67
Width = 121
Height = 21
ParentShowHint = False
ShowHint = False
TabOrder = 0
Text = 'tab1'
end
end
end
end发布于 2010-07-09 16:15:47
向窗体中添加一个TApplicationEvents控件,并使用OnShowHint事件:
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
CanShow := HintInfo.HintControl <> Edit1;
end;如果您没有TApplicationEvents对象(例如,如果您使用的是非常老版本的Delphi),那么您可以使用(例如,在FormCreate中)。
Application.OnShowHint := ApplicationEvents1ShowHint若要手动设置事件处理程序,请执行以下操作。
更新
如果TTabSheet中有多个控件,那么它们可能都有相同的问题。那你可能会对
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
CanShow := not SameStr(HintStr, PageControl1.Hint) or (HintInfo.HintControl = TabSheet1);
end;更新2
如果在TTabSheets中有几个TPageControl,并且希望所有工作表都显示提示,但不显示子控件,那么您可以这样做。
CanShow := not SameStr(HintStr, PageControl1.Hint) or
((HintInfo.HintControl is TTabSheet) and
(TTabSheet(HintInfo.HintControl).PageControl = PageControl1));而不是。
https://stackoverflow.com/questions/3214359
复制相似问题