代码之家  ›  专栏  ›  技术社区  ›  Roddy

Delphi:阻止TPageControl提示在包含的项上显示

  •  1
  • Roddy  · 技术社区  · 14 年前

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

    当我将鼠标移到pagecontrol选项卡上时,我想显示一个提示“Hello”,然后 当我将鼠标移到TEdit上时显示提示。

    PageControl 有一个 hint= "Hello" ,和 showhint = true . 这和预期的一样。

    这个 showhint = false parentshowhint = false ,和 hint 是空的。

    但是,当我把鼠标放在TEdit上时,仍然会得到一个“你好”的提示。我怎样才能阻止这一切?

    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 回复  |  直到 14 年前
        1
  •  5
  •   Andreas Rejbrand    14 年前

    将TApplicationEvents控件添加到窗体中,并使用OnShowHint事件:

    procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
      var CanShow: Boolean; var HintInfo: THintInfo);
    begin
      CanShow := HintInfo.HintControl <> Edit1;
    end;
    

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

    相反。

    推荐文章