Delphi:防止TPageControl提示显示在包含的项上
我有一个包含以下组件的表单:Delphi:防止TPageControl提示显示在包含的项上,delphi,vcl,hints,Delphi,Vcl,Hints,我有一个包含以下组件的表单:TPageControl包含一个tAbsSheet,包含一个TEdit 我希望鼠标悬停在pagecontrol选项卡上时显示提示“Hello”,鼠标悬停在TEdit上时不显示提示 PageControl有一个hint=“Hello”,和showhint=true。这正如预期的那样有效 TEdit具有showhint=false,parentshowhint=false,并且hint为空 但是,当我把鼠标放在TEdit上时,仍然会得到一个“你好”的提示。我怎样才能阻止这
TPageControl
包含一个tAbsSheet
,包含一个TEdit
我希望鼠标悬停在pagecontrol选项卡上时显示提示“Hello”,鼠标悬停在TEdit上时不显示提示
PageControl
有一个hint=“Hello”
,和showhint=true
。这正如预期的那样有效
TEdit
具有showhint=false
,parentshowhint=false
,并且hint
为空
但是,当我把鼠标放在TEdit上时,仍然会得到一个“你好”的提示。我怎样才能阻止这一切
这是.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
将TApplicationEvents控件添加到表单中,并使用OnShowHint事件:
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
CanShow := HintInfo.HintControl <> Edit1;
end;
手动设置事件处理程序
使现代化
如果在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
如果TPageControl中有多个TTabsheet,并且希望所有工作表都显示提示,但不显示子控件的提示,则可以这样做
CanShow := not SameStr(HintStr, PageControl1.Hint) or
((HintInfo.HintControl is TTabSheet) and
(TTabSheet(HintInfo.HintControl).PageControl = PageControl1));
相反。将TApplicationEvents控件添加到表单中,并使用OnShowHint事件:
procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
CanShow := HintInfo.HintControl <> Edit1;
end;
手动设置事件处理程序
使现代化
如果在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
如果TPageControl中有多个TTabsheet,并且希望所有工作表都显示提示,但不显示子控件的提示,则可以这样做
CanShow := not SameStr(HintStr, PageControl1.Hint) or
((HintInfo.HintControl is TTabSheet) and
(TTabSheet(HintInfo.HintControl).PageControl = PageControl1));
相反。谢谢。我希望有一个“just set property X=false”的解决方案,但这很好!也许这样行吗?:
CanShow:=HintInfo.HintControl.ShowHint
@mjustin:不,这样不行。(您自己试试!)如果ShowHint=false
,则该过程永远不会使用此控件作为HintControl
调用。好的,也许这样:可以显示:=HintInfo.HintControl.Tag=MY_MAGIC\u ShowHint\u值
@mjustin:当然,如果所有控件都有ShowHint=true
,并且所有要显示提示的控件都有此标记。谢谢。我希望有一个“just set property X=false”的解决方案,但这很好!也许这样行吗?:CanShow:=HintInfo.HintControl.ShowHint
@mjustin:不,这样不行。(你自己试试!)如果ShowHint=false
,那么这个过程永远不会用这个控件调用为HintControl
。好吧,也许这个:CanShow:=HintInfo.HintControl.Tag=MY_MAGIC\u ShowHint\u VALUE
@mjustin:当然,如果所有控件都有ShowHint=true
,并且所有显示提示的控件都有这个标记。