【发布时间】:2015-06-20 15:22:38
【问题描述】:
我正在创建自己的 OnAdvancedDrawItem 来更改 MainMenu 的颜色。效果很好,但底部有一条恼人的白线。
It disappears when running the mouse over the menu but comes back when another application is selected.我怎样才能摆脱它?
这是我的背景颜色的基本代码。
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.
【问题讨论】:
-
这似乎证明了'ARect'的用途,指定你可以绘制的区域。你在外面画的东西以后可能会透支。底线可能是项目区域之外的NC区域。
-
请问你为什么不用
TMainActionMenuBar?你可以连接到TStandardColorMap,达到你想要的效果。