1

次のコンポーネントを含むフォームがありTPageControlます。TTabSheetTEdit

pagecontrol タブの上にマウスを置いたときに "Hello"というヒントが表示され、TEdit の上にマウスを置いたときにヒントが表示されないようにしたいと考えています。

PageControlhint= "Hello"、およびがありshowhint = trueます。これは期待どおりに機能します。

、、およびTEditは空です。showhint = 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
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 に答える