2017-04-10 2 views
0

만들기 ShowHint를 작업, 내가있는 내가 등을 내용으로 여러 사각형 (<code>TRect</code>를) 페인트, <code>TCustomControl</code>에서 상속되는 사용자 지정 컨트롤이 C++ 빌더 2009</p> <p>을 사용하여 자신의 힌트

이제 모든 사각형 위로 마우스를 가져 가면 힌트가 표시되기를 원하지만이 방법을 구현하는 방법을 잘 모르겠습니다.

는 단순히 TCustomControlShowHint를 사용하고 난 사각형 위에 마우스로 Hint을 변경하려고 시도하지만, 문제는 처음 사라지면 내가 컨트롤을 떠나 돌아 오지 않는 컨트롤이 더 이상 힌트를 표시하지 않는다는 것입니다 그것에. 하나의 사각형에서 다른 사각형으로 마우스를 가져 가면서 상태를 '재설정'할 수 있기를 기대했지만 작동하지 않습니다.

내 접근 방식이 처음부터 잘못되었다고 가정 할 때, 원하는 효과를 얻으려면 무엇을해야하는지 알려주세요.

if (State == rsHover && Item->FState != rsHover) // Not in the rsHover state yet, but going to 
    { 
    if (Item->Hint.Length()) 
     { 
     if (ShowHint) 
      { 
      // Attempt to reset Hint's internal working, to no avail 
      Hint = L"" ; 
      ShowHint = false ; 
      } 

     Hint = Item->Hint ; 

     ShowHint = true ; 
     } 
    else 
     { 
     ShowHint = false ; 
     } 
    } 
else if (State != rsHover) 
    { 
    ShowHint = false ; 
    } 
+0

이 질문에 직접적으로 대답 할 수는 없지만보다 복잡한 힌트 시나리오에서는 다음과 같은 행운을 빕니다. (1) 원하는 좌표에서 보이지 않는 TGraphicsControls (즉, 아무 것도 그리지 않는 TGraphicsControls) 만들기 Hint 속성을 지정합니다. (2) JVCL의 TJvBalloonHint를 사용하십시오. –

+0

왜 델파이 태그가 있습니까? –

답변

2

이 기능을 구현하는 올바른 방법은 구성 요소가 CM_HINTSHOW 메시지를 처리하도록하는 것입니다. 메시지의 LParam 값은 THintInfo 레코드에 대한 포인터이며 필요에 따라 필드를 자유롭게 수정할 수 있습니다 (특히 HintStrCursorRect).

는, 기록에 액세스 할 수있는 하나

  • 타입 캐스트 THintInfo*LParam 직접.

  • TMessage에서 TCMHintShow까지 모두 캐스팅 한 다음 HintInfo 필드에 액세스하십시오. 자신의 CursorRect 사각형을 정의함으로써

, 당신은 다른 HintStr 값으로, 각 "몇 가지 힌트 영역으로 [컨트롤을 분할]"할 수 있습니다. CursorPos 필드는 컨트롤 내의 마우스의 현재 위치를 나타냅니다. 마우스가 현재 CursorRect 외부로 이동하면 컨트롤에 새 CM_HINTSHOW 메시지가 수신되고 필요에 따라 CursorRectHintStr 필드를 업데이트 할 수 있습니다.

+0

감사합니다. 쉽고 간단한 구현이었습니다. – Peter

+0

저는 이것이 실제로'CustomHint'와 어떻게 관련되어 있는지 조금 혼란 스럽습니다. 함께 일할 수있는 서로 다른 힌트가 있습니까? 할당 된 경우 다른 힌트를 인수합니까? – Peter

+1

'CustomHint'는 힌트를 표시하기 위해 완전히 다른 메커니즘을 사용합니다. 'TApplication' 기반의 힌트 시스템에는 전혀 묶여 있지 않습니다. 'CustomHint'가 할당되면 힌트 관리를 맡고 컴포넌트는 정상적인'Hint' 속성을 통해 표시되는 문자열을 제공하는 것 이외에는 해당 시스템의 동작에 전혀 영향을 미치지 않습니다. –