2010-07-09 49 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