2011-03-24 66 views
1

我正在寫一個我從速度按鈕派生的組件。我所需要做的就是重寫paint方法,因爲我想改變外觀。 現在我已經達到了點擊按鈕時我想給不同背景顏色的點。但是,我找不到在我的組件中捕獲鼠標左鍵單擊消息的方法。自定義組件點擊消息

是我到目前爲止已經使用:

procedure KeyboardButton.WndProc(var Message: TMessage); 
begin 
    if Message.LParam = VK_LBUTTON then 
    begin 
    //Some code 
    end 
    else 
    inherited; 
end; 

這不,當我點擊按鈕Message.LParam工作不是1

而且我想...

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; 

嗯,我知道CM_MOUSELEAVE不是代表鼠標點擊的消息。但也許有像CM_MOUSECLICK的消息?雖然我找不到它。總之,任何人都可以告訴我什麼是CM_XXXX,因爲我無法從msdn中找到任何東西?看起來像Delphi特定的消息。

在此先感謝!

回答

1

您沒有正確測試鼠標事件。試試這個:

if Message.Msg = WM_LBUTTONDOWN then 
    // Some code 
else 
    inherited; 

BTW,TMessage.LParamTMessage.WParam是與特定消息類型(如WM_LBUTTONDOWN)傳遞的參數,並具有根據什麼TMessage.Msg實際上是不同的含義。應該有從不遇到類似TMessage的通用消息,並且只檢查WParamLParam

3

您可以重寫MouseDown和MouseUp方法。請記住檢查Button參數的值!

4

VCL已經爲您追蹤了WM_LBUTTONDOWN/UP消息。 csLButtonDown標誌將在組件的ControlState屬性中啓用,同時在組件上按住鼠標左鍵(如果DragMode屬性未設置爲dmAutomatic,那就是)。您的Paint()代碼可以檢查該標誌並根據需要調整其背景圖。

+0

+1我還繼續忘記這一點。我認爲這是更正確的答案。謝謝! – Luthfi 2012-01-07 04:03:59