大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 美化你的菜单

美化你的菜单

时间: 2021-07-31 作者:daque

windows下的很多步调都有格外美丽的菜单,比方windows“发端”菜单左方从上到下的长线形的windows banner 又大概是向word那么在每一个菜单条左边都有一个小图标,看到那些很cool的菜单,你能否感触本人的菜单显得缺乏蹩脚呢?不须要第三方控件,运用delphi就不妨实行上头的功效。即使要实行自设置菜单就须要在绘制菜单时变换菜单的巨细以符合在菜单上绘绘图形,而后再在上头绘制本人所须要的菜单功效。在delphi中,每一个菜单项对应一个tmenuitem控件,这类控件都有两个事变:ondrawitem和onmeasureitem,要实行自设置菜单,开始要引见一下这两个事变:onmeasureitem事变的设置如次:type tmenumeasureitemevent = procedure (sender: tobject; acanvas: tcanvas;var width, height: integer) of object;property onmeasureitem: tmenumeasureitemevent;该事变在菜单条监测自己的尺寸时爆发,个中参数acanvas设置绘制的画图东西,参数width、height拟订菜单项的默许尺寸,提防到这两个设置前的var了吗,证明你不妨在onmeasureitem事变处置因变量中变换这两个值,也即是变换菜单的巨细。ondrawitem事变的设置如次:type tmenudrawitemevent = procedure (sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean) of object;property ondrawitem: tmenudrawitemevent;该事变在菜单绘制时激励,个中参数acanvas设置菜单绘制东西,参数arect拟订菜单的绘制地区,参数selected设置暂时菜单项能否被选中。从上头的引见不妨看到,要实行自设置的菜单,只有在onmeasureitem事变中编写代码变换菜单项的尺寸,而后在ondrawitem事变中绘制本人须要的功效就不妨了。底下我痛过简直的典型来做证明,这个典型是使本人的菜单实行象windows发端菜单一律的表露banner条的功效。同声这个步调还能实行对被选中的菜单条举行突变色弥补(就象3721华文网址软硬件的工作栏菜单那么)。步调的思绪是如许的,开始创造一个长条型的位图,而后在每一个菜单条的onmeasureitem事变中按照要表露在菜单上的文本和图像以及步调的须要变换菜单项的宽窄和莫大,而后在ondrawitem事变中将位图中的相映局部正片到菜单项上。即使该菜单条被选中,开始要变换acanvas参数的画刷脸色,而后再顺序弥补菜单条上的相映局部,如许就实行了对选中的菜单条实行突变色弥补。结果将文本输入到菜单条上。底下来引见简直的步调,开始运用图像软硬件创造一个长条型的位图文献(你不妨按照你的须要设定图像的高宽比,在我的图像中是10:1)。在delphi中创造一个新的工程,在form第11中学介入一个timage控件,将控件的autosize属性树立为true。而后在form第11中学介入一个tmainmenu控件,将它的ownerdraw属性树立为true(这一点很要害,要不步调没辙实行)在该tmainmenu下介入6个tmenuitem东西(鼠标右健点击tmainmenu控件,而后点击弹出菜单的menu designer 项,就不妨在安排窗口中增添菜单条了),将它们的name属性辨别树立为 caption1、caption2、…、caption6。底下是简直的步调清单: unit ownermenu;interfaceuseswindows, messages, sysutils, classes, graphics, controls, forms, dialogs,menus, extctrls, stdctrls, imglist;typetform1 = class(tform)mainmenu1: tmainmenu;main1: tmenuitem;caption1: tmenuitem;caption2: tmenuitem;caption3: tmenuitem;caption4: tmenuitem;caption5: tmenuitem;caption6: tmenuitem;image1: timage;procedure caption1measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);procedure caption2measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);procedure caption3measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);procedure caption4measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);procedure caption5measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);procedure caption6measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);procedure caption1drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);procedure caption2drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);procedure caption3drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);procedure caption4drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);procedure caption5drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);procedure caption6drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);private{ private declarations }publicprocedure drawitem(sender: tmenuitem; acanvas: tcanvas;arect: trect;selected: boolean;strout:string);{ public declarations }end;varform1: tform1;i,ih,ind,iw,irate:integer;rtemp:trect;ig1,ig2:integer;implementation{$r *.dfm}procedure tform1.drawitem(sender: tmenuitem; acanvas: tcanvas;arect: trect;selected: boolean;strout:string);varj:integer;begini:=arect.bottom -arect.top; //赢得贴图的莫大和宽窄ind:=sender.menuindex;ih:=round(image1.height/6*ind); //赢得贴图场所//将image上相映场所的位图复制到菜单上 stretchblt(acanvas.handle,arect.left,arect.top,iw,i,image1.canvas.handle,0,ih,image1.width,round(image1.height/6),srccopy);if selected then begin //该菜单项被选中acanvas.font.color := clwhite;rtemp:=arect;rtemp.left := rtemp.left+iw;ig1:=round((rtemp.right - rtemp.left)/10);rtemp.right := rtemp.left +ig1;for j:= 0 to 9 do begin //经过轮回树立颜色突变功效acanvas.brush.color := rgb(0,0,j*25);acanvas.fillrect(rtemp);rtemp.left := rtemp.left +ig1;rtemp.right := rtemp.left +ig1;end;endelse begin //该菜单项没有被选中acanvas.brush.color := cl3dlight; //树立背局面为浅灰rtemp:=arect;rtemp.left := rtemp.left+iw;acanvas.fillrect(rtemp);acanvas.font.color := clblack;end;//树立canvas的画笔弥补形式为通明acanvas.brush.style:=bsclear;//在菜单上输入笔墨acanvas.textout(arect.left+iw+5,arect.top,strout);end;procedure tform1.caption1measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);begin//在onmeasureitem事变中变换菜单的宽窄和莫大,底下5个步调同//变换菜单的宽窄和莫大以包含文本height:=acanvas.textheight('caption1')+5;width:=acanvas.textwidth('caption1')+5;irate:=round(image1.height/(height*6));iw:=round(image1.width /irate);width:=width+iw; //按照计划变换菜单宽窄以包含附加的文本 end;procedure tform1.caption2measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);beginheight:=acanvas.textheight('caption1')+5;width:=acanvas.textwidth('caption1')+5;irate:=round(image1.height/(height*6));iw:=round(image1.width /irate);width:=width+iw;end;procedure tform1.caption3measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);beginheight:=acanvas.textheight('caption1')+5;width:=acanvas.textwidth('caption1')+5;irate:=round(image1.height/(height*6));iw:=round(image1.width /irate);width:=width+iw;end;procedure tform1.caption4measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);beginheight:=acanvas.textheight('caption1')+5;width:=acanvas.textwidth('caption1')+5;irate:=round(image1.height/(height*6));iw:=round(image1.width /irate);width:=width+iw;end;procedure tform1.caption5measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);beginheight:=acanvas.textheight('caption1')+5;width:=acanvas.textwidth('caption1')+5;irate:=round(image1.height/(height*6));iw:=round(image1.width /irate);width:=width+iw;end;procedure tform1.caption6measureitem(sender: tobject; acanvas: tcanvas;var width, height: integer);beginheight:=acanvas.textheight('caption1')+5;width:=acanvas.textwidth('caption1')+5;irate:=round(image1.height/(height*6));iw:=round(image1.width /irate);width:=width+iw;end;procedure tform1.caption1drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);begindrawitem(tmenuitem(sender),acanvas,arect,selected,'caption1');end;procedure tform1.caption2drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);begindrawitem(tmenuitem(sender),acanvas,arect,selected,'caption2');end;procedure tform1.caption3drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);begindrawitem(tmenuitem(sender),acanvas,arect,selected,'caption3');end;procedure tform1.caption4drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);begindrawitem(tmenuitem(sender),acanvas,arect,selected,'caption4');end;procedure tform1.caption5drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);begindrawitem(tmenuitem(sender),acanvas,arect,selected,'caption5');end;procedure tform1.caption6drawitem(sender: tobject; acanvas: tcanvas;arect: trect; selected: boolean);begindrawitem(tmenuitem(sender),acanvas,arect,selected,'caption6');end;end.

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.