Delphi:防止TPageControl提示显示包含的项目

时间:2010-07-09 15:56:44

标签: delphi vcl hints

我有一个包含以下组件的表单:TPageControl包含一个TTabSheet,其中包含TEdit

当我将鼠标悬停在pagecontrol选项卡上时,我想显示一条提示“Hello”,当我将鼠标悬停在TEdit上时,显示 no 提示。

PageControlhint= "Hello"showhint = true。这可以按预期工作。

TEditshowhint = falseparentshowhint = falsehint为空。

但是,当我将鼠标悬停在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

1 个答案:

答案 0 :(得分:5)

向表单添加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

如果TPageControl中有多个TTabSheets,并希望所有工作表显示提示,但不显示子控件,则可以执行

  CanShow := not SameStr(HintStr, PageControl1.Hint) or
    ((HintInfo.HintControl is TTabSheet) and
      (TTabSheet(HintInfo.HintControl).PageControl = PageControl1));

代替。