2017-04-10 40 views
0

使用C++ Builder的2009年製作ShowHint工作與幾個不同的Rects,每個都有自己的提示

我有一個從TCustomControl繼承,關於這一點我畫幾個平方(TRect)與內容等自定義控制

我現在想顯示提示,我將鼠標懸停在每平方,但我不知道如何實現這個最好的。

我試圖簡單地用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不畫任何東西)並分配他們的提示屬性。 (2)使用JVCL的TJvBalloonHint。 –

+0

爲什麼delphi標記在那裏? –

回答

2

實現此功能的正確方法是使組件處理CM_HINTSHOW消息。該消息的LParam值將指向一個THintInfo記錄,它的字段可以根據需要隨意修改(特別是HintStrCursorRect)。

訪問記錄,您可以

  • 型鑄造的LParam直接THintInfo*

  • 鍵入整個TMessageTCMHintShow,然後訪問它的HintInfo字段。

定義自己的CursorRect矩形,你可以在「[將您的控制]成幾個提示區域」,每一個不同的HintStr值。 CursorPos字段表示鼠標在控件內的當前位置。當電流CursorRect外的移動鼠標,控制將收到一個新CM_HINTSHOW消息,您可以根據需要更新CursorRectHintStr領域。

+0

謝謝,這是一個簡單而直接的實現。 – Peter

+0

我實際上有點困惑這與'CustomHint'有關。兩種不同的提示可以一起工作,還是一個接管另一個,如果分配? – Peter

+1

'CustomHint'使用完全不同的機制來顯示提示。它並沒有被綁定到基於TApplication的提示系統中。如果'CustomHint'分配,它接管提示管理,和你的組件不能影響該系統的行爲都時,除了提供顯示(通過其正常'Hint'屬性)的字符串。 –

相關問題