Delphi改变主菜单的颜色

Rud*_*udi 2 delphi menu

我正在创建自己的OnAdvancedDrawItem来更改MainMenu的颜色.它运作良好,但我在底部有一条恼人的白线.

主菜单下的一行

在菜单上运行鼠标时它会消失,但在选择另一个应用程序时会返回.我怎么能摆脱它?

这是我背景着色的基本代码.

unit MenMain;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Menus, ImgList, StdCtrls;

type
  TForm1 = class(TForm)
  MainMenu1: TMainMenu;
  File2: TMenuItem;
  Edit1: TMenuItem;
  Window1: TMenuItem;
  procedure Window1AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
private

public

end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Window1AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;  ARect: TRect; State: TOwnerDrawState);
begin
  with TMenuItem(Sender) do
  begin
    with ACanvas do
    begin
      Brush.Color := clMoneyGreen;
      Inc(ARect.Bottom,1);
      FillRect(ARect);
      Font.Color := clBlue;
      DrawText(ACanvas.Handle, PChar(Caption),Length(Caption),ARect,          DT_SINGLELINE or DT_VCENTER);
    end;
  end;
end;

end.
Run Code Online (Sandbox Code Playgroud)

Ser*_*yuz 6

ARect该参数OnAdvancedDrawItem的事件处理程序是rcItemDRAWITEMSTRUCT是传递给此WM_DRAWITEM消息.该文件有这样说的矩形:

一个矩形,用于定义要绘制的控件的边界.此矩形位于hDC成员指定的设备上下文中.系统会自动剪辑所有者窗口在设备上下文中为组合框,列表框和按钮绘制的任何内容,但不会剪切菜单项.绘制菜单项时,所有者窗口不得在rcItem 成员定义的矩形边界之外绘制.

因此,虽然设备上下文没有剪切到矩形,但是你不负责在它之外绘图.Inc(ARect.Bottom,1);在填充矩形之前执行时会发生这种情况.