1

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

我希望当我将鼠标悬停在 pagecontrol 选项卡上时显示提示“Hello”,而当我将鼠标悬停在 TEdit 上时不显示提示。

PageControl,hint= "Hello"showhint = true. 这按预期工作。

TEditshowhint = false和是空的parentshowhint = 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
4

1 回答 1

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));

反而。

于 2010-07-09T16:15:47.973 回答