2013-10-08 94 views
2

如何在PopupMenuItem上擁有一個複選標記?How to OwnerDraw PopupMenuItem CheckMark

我嘗試這樣做:

var 
    iLeftPos: Integer; 
    iTopPos: Integer; 
    iText: string; 
    iState: integer; 
    iGlyphRect: TRect; 
begin 
    iTopPos := ARect.Top + (ARect.Bottom - ARect.Top - 
    ACanvas.TextHeight('W')) div 2; 

    { Draw checkmark } 
    iGlyphRect := Rect(0, iTopPos, 20, iTopPos + 20); 
    if Touch2.Checked then 
    begin 
    iState := iState or DFCS_MENUCHECK; 
    DrawFrameControl(ACanvas.handle, iGlyphRect, DFC_POPUPMENU, iState); 
    end; 
end; 

但繪本: enter image description here

+3

的'iState'變量可能在你的代碼的隨機值。但無論如何,您可以爲DFC_MENU類型而不是DFC_POPUPMENU繪製該複選框。不知道爲什麼,但是'DFC_POPUPMENU'類型的狀態將'DrawFrameControl'呈現爲Windows 7機器上的系統菜單按鈕(最小化,最大化,關閉和幫助圖標)的圖標。在你的屏幕截圖上只是最小化圖標。 – TLama

回答

0

這解決了這個問題。感謝TLama。

if Touch2.Checked then 
begin 
    iState := iState or DFCS_MENUCHECK; 
    DrawFrameControl(ACanvas.handle, iGlyphRect, DFC_MENU, iState); 
end; 

enter image description here

+4

'iState'這句話沒用。有一件事是'iState'變量值未初始化,第二種情況是'uState'只能是DFCS_MENU ...標誌的一個值,而不是任何組合。只需刪除該行並將'DFCS_MENUCHECK'直接傳遞給'uState'參數。 – TLama

+0

@TLama ..是的,我也找到了。謝謝。 – Bill

+0

不客氣! – TLama