델파이:포함된 항목에 TPageControl 힌트가 표시되지 않도록 방지
문제
다음 구성 요소가 포함된 양식이 있습니다.ㅏ 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));
대신에.
제휴하지 않습니다 StackOverflow