菜单项(TMenuItem)组件字体颜色问题!!! ( 积分: 100 )

  • 主题发起人 gencheng
  • 开始时间
G

gencheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个快捷菜单项组件(TMenuItem),它可以改变菜单项的字体颜色。不过有这样的问题:当菜单项的Caption为减号'-',即让菜单起到分割条作用时,该菜单项显示的不是分割条,是什么都没显示,如何将分割条显示出来?当然还要保留改变菜单项字体颜色功能。
代码如下:
nit MenuItemBlue;

Interface
Uses Windows, SysUtils, Classes, Contnrs, Messages, Graphics, ImgList, ActnList, Menus;
Type
TMenuItemBlue = Class(TMenuItem)
Private

Protected
Procedure DoDrawItem(Sender: TObject; ACanvas: TCanvas;ARect: TRect; Selected: Boolean);
Public
Constructor Create(AOwner: TComponent); Override;
End;

Implementation
Uses Controls, Forms, Consts, Themes;

{ TMenuItemBlue }

Constructor TMenuItemBlue.Create(AOwner: TComponent);
Begin
Inherited;
self.OnDrawItem := DoDrawItem;
End;

Procedure TMenuItemBlue.DoDrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
Begin
If Not (Trim(Caption)='-') Then
Begin
ACanvas.Font.Color := clHotLight; //字体亮蓝
ACanvas.TextOut(ARect.Left, ARect.Top, Caption); //字体颜色
End;
End;

End.
 
我仔细看了一下,应该显示为分割条的菜单项还不是什么都没显示,而是显示为“-”,没有按默认的将'-'菜单项自动显示为分割条。为什么??
 
晒了2天,没人知道。
 
你加了这个判断 If Not (Trim(Caption)='-') Then

当然没画出来了
 
好像说错了 等下过来再 聊聊
 
If Not (Trim(Caption)='-') Then
Begin
ACanvas.Font.Color := clHotLight; //字体亮蓝
ACanvas.TextOut(ARect.Left, ARect.Top, Caption); //字体颜色
End
else
begin
ACanvas.moveto(ARect.left,trunc((ARect.bottom-ARect.top)/2));
ACanvas.lineto(ARect.right,trunc((ARect.bottom-ARect.top)/2));
end;
 
改成这样就正常了!
begin
if not (Trim(Caption) = '-') then
begin
ACanvas.Font.Color := clHotLight; //字体亮蓝
ACanvas.TextOut(ARect.Left, ARect.Top, Caption); //字体颜色
end
else
begin
ACanvas.Font.Color := clBtnText; //字体黑色
ACanvas.moveto(ARect.Left, ARect.Top);
ACanvas.lineto(ARect.right, ARect.Top);
end;
end;
 
指定OnDrawItem 事件有一个坏处:快捷键,图标都得自己画,好麻烦啊!
各位高手有什么好的方法,好可以改变字体颜色,又保留原来的功能??
 
问题基本解决了,结帐.
 

Similar threads

I
回复
0
查看
625
import
I
I
回复
0
查看
557
import
I
I
回复
0
查看
625
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部