Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2014/7/19 0:08:45
delphiDelphi多彩的菜单实例

delphiDelphi多彩的菜单实例

Delphi多彩的菜单

实例说明

网上的许多应用程序都具有漂亮的菜单。默认情况下,使用Delphi提供的TMainMenu组件只能设置标准的Windows风格菜单,如何能够自定义菜单呢?本实例演示如何自定义菜单,效果如图1.5所示。



1.5Delphi多彩的菜单

技术要点

在Delphi中重新绘制TMainMenu组件,首先需要将OwnerDraw属性设置为True,然后双击TMainMenu组件打开菜单编辑器,添加菜单项。选中菜单项,在对象观察器中编写OnAdvancedDrawItem事件处理过程,OnAdvancedDrawItem事件在菜单项(OwnerDraw属性设置为True)需要绘制时触发。

实现过程

1.新建一个工程,将主窗口命名为Form1。

2.在Form1窗体上放置TImage、TmainMenu和TStatusBar等组件。设置TImage组件的Picture属性,为其加载一幅图像。双击TMainMenu组件,打开菜单编辑窗口,想TMainMenu组件中添加菜单项。

3.程序代码如下:

procedure TForm1.N3AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;

ARect: TRect; State: TOwnerDrawState);

begin

ACanvas.Brush.Color := clwhite;

if odSelected in State then

begin

ACanvas.Font.Color := clRed;

ACanvas.Pen.Color := clBlue;

ACanvas.Rectangle(Rect(1,(TMenuItem(Sender).Tag-1)*20,ARect.Right-1,(TMenuItem(Sender).Tag-1)*20+15));

NotifyMessage(TMenuItem(Sender).Caption);

end

else

begin

ACanvas.Font.Color := clBlack;

ACanvas.Pen.Color := clWhite;

ACanvas.Rectangle(Rect(1,(TMenuItem(Sender).Tag-1)*20,ARect.Right-1,(TMenuItem(Sender).Tag-1)*20+15));

end;

ACanvas.TextOut(4,(TMenuItem(Sender).Tag-1)*20+2,TMenuItem(Sender).Caption);

end;


procedure TForm1.N1AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;

ARect: TRect; State: TOwnerDrawState);

begin

SetBkMode(ACanvas.Handle,TRANSPARENT);

if odSelected in State then

begin

ACanvas.Font.Color := clRed;

ACanvas.Pen.Color := clBlue;

ACanvas.Brush.Color := Color;

ACanvas.Rectangle(Rect(TMenuItem(Sender).Tag-2,32,ARect.Right-5,47));

end

else

begin

ACanvas.Font.Color := clBlack;

ACanvas.Pen.Color := Color;

ACanvas.Brush.Color := Color;

ACanvas.Rectangle(Rect(TMenuItem(Sender).Tag-2,32,ARect.Right-5,47));

end;

ACanvas.TextOut(TMenuItem(Sender).Tag,34,TMenuItem(Sender).Caption);

end;




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759