델파이:포함된 항목에 TPageControl 힌트가 표시되지 않도록 방지

StackOverflow https://stackoverflow.com/questions/3214359

  •  13-09-2020
  •  | 
  •  

문제

다음 구성 요소가 포함된 양식이 있습니다.ㅏ TPageControl 하나를 포함하는 TTabSheet, 다음을 포함 TEdit.

페이지 제어 탭 위로 마우스를 가져갈 때 "Hello"라는 힌트가 표시되기를 원합니다. 아니요 TEdit 위로 마우스를 가져가면 힌트가 표시됩니다.

그만큼 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
도움이 되었습니까?

해결책

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

대신에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top