2010-07-09 30 views
1

我有一个包含以下组件的表单:A TPageControl包含单个TTabSheet,其中包含TEdit德尔福:防止在包含物品上显示TPageControl提示

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

PageControl有一个hint= "Hello"showhint = true。这按预期工作。

TEditshowhint = false,parentshowhint = falsehint是空的。

但是,我仍然得到一个“你好”的提示,我将鼠标悬停在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 

回答

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

改为。

+0

谢谢。我希望有一个'只需设置属性X = false'的解决方案,但是这样做会很好! – Roddy 2010-07-09 20:00:08

+0

也许这有效吗?:'CanShow:= HintInfo.HintControl.ShowHint' – mjn 2010-07-10 06:18:48

+0

@mjustin:不,这不起作用。 (自己动手试试!)如果'ShowHint = false',那么程序永远不会被这个控件调用为'HintControl'。 – 2010-07-10 09:45:45