Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:08:45 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);beginACanvas.Brush.Color := clwhite;if odSelected in State thenbeginACanvas.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);endelsebeginACanvas.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);beginSetBkMode(ACanvas.Handle,TRANSPARENT);if odSelected in State thenbeginACanvas.Font.Color := clRed;ACanvas.Pen.Color := clBlue;ACanvas.Brush.Color := Color;ACanvas.Rectangle(Rect(TMenuItem(Sender).Tag-2,32,ARect.Right-5,47));endelsebeginACanvas.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;
赞