Delphi 如何拥有Draw PopupMenuItem复选标记

Delphi 如何拥有Draw PopupMenuItem复选标记,delphi,delphi-xe4,Delphi,Delphi Xe4,如何在弹出菜单项上绘制复选标记 我试过这个: 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 } iGl

如何在弹出菜单项上绘制复选标记

我试过这个:

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;
但它得出这样的结论:

这解决了问题。谢谢特拉玛

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

您的代码中的
iState
变量可能有随机值。但是无论如何,您可以为
DFC_菜单
类型而不是
DFC_弹出菜单
绘制该复选框。不知道为什么,但是
DFC_POPUPMENU
类型的状态将
DrawFrameControl
呈现为Windows 7计算机上系统菜单按钮的图标(最小化、最大化、关闭和帮助图标)。屏幕截图上只有最小化图标。带有
iState
的语句是无用的。一件事是
iState
变量值未初始化,第二件事是
uState
只能是
DFCS\u菜单的一个值…
标志,而不是任何组合。只需删除该行并直接将DFCS_MENUCHECK传递给
uState
参数。@TLama。。是的,我也找到了。多谢各位。