Delphi: Предотвратить отображение подсказки TPageControl на содержащихся элементах - PullRequest
1 голос
/ 09 июля 2010

У меня есть форма со следующими компонентами: A TPageControl, содержащий один TTabSheet, содержащий TEdit.

Я хочу, чтобы при наведении указателя мыши на вкладку управления страницами отображалась подсказка «Hello», а при наведении курсора на TEdit указывается no .

PageControl имеет hint= "Hello" и showhint = true. Это работает как ожидалось.

TEdit имеет showhint = false, parentshowhint = false и hint пусто.

Но, я все еще получаю подсказку "Привет", когда я наводю курсор мыши на 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

1 Ответ

5 голосов
/ 09 июля 2010

Добавьте элемент управления 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));

.

...