Windows界面的一大特色就是显示丰富多彩的图标,图标不仅美化了Windows的桌面,而且便于直观的操作,给用户带来了极大的方便。在设计程序界面时,Windows风格是很好的参考。

  Delphi一般提供两种设置图标的方法,一个是在Project Options 中指定应用程序的图标,另一个是在Object Inspector 的properties页中提供Icon特性。如果想设计出像Windows开始选单那样美丽的弹出选单,就要自己编写代码了。

  我们知道大多数Windows应用程序本身带有图标,只要将程序本身所带的图标取出,调整图标的大小加入到弹出选单中,一个美丽的选单就完成了。

  首先用ExtractAssociatedIcon从某一程序中获取图标,而图标的尺寸大小不一,不一定能直接添加到选单中,同时Delphi没有提供调整图标大小的功能,这就必须将图标文件转化成位图文件,然后调整位图文件的大小,最后用位图文件取代选单项目即可。其源代码如下:

  type

   TForm1 = class(TForm)

   MainMenu1: TMainMenu;

   File1: TMenuItem;

  /**** 选单条中的项目****/

   Open1: TMenuItem;

  /****选单文件中的项目 ****/

  procedure FormCreate(Sender: TObject);

  procedure FormShow(Sender: TObject);

   private

   {局部参数声明}

   public

   {全局参数声明}

   Icn, Txt, MnuItm: TBitmap;

   end;

  procedure TForm2.FormCreate(Sender: TObject);

  var R: TRect;

   HIcn: HIcon;

   Ic: TIcon;

   Index: Word;

   FileName: PChar;

  begin

   /**从某一程序中获取图标**/

   Ic:=TIcon.Create;

   Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*文件名称及其路径*/, Index);

   /** 创建位图**/

   Txt:=TBitmap.Create;

   with Txt do

   begin

   Width:=Canvas.TextWidth(' Test');

   Height:=Canvas.TextHeight(' Tes');

   Canvas.TextOut(0,0,' Test');

  end;

   /**将图标复制到上述创建的位图中,并调整它的尺寸 **/

   Icn:=TBitmap.Create;

   with Icn do

   begin

   Width:=32;

   Height:=32;

   Brush.Color:=clBtnFace;

   Canvas.Draw(0,0,Ic);

   end;

   /** 创建最后的位图文件**/

   MnuItm:=TBitmap.Create;

   with MnuItm do

   begin

   Width:=Txt.Width+18;

   Height:=18;

   with Canvas do

   begin

   Brush.Color:=clBtnFace;

   Pen.Color:=clBtnFace;

   Brush.Style:=bsSolid;

   Rectangle(0,0,Width,Height);

   CopyMode:=cmSrcAnd;

   StretchDraw(Rect(0,0,16,16),Icn);

   CopyMode:=cmSrcAnd;

   Draw(16,8-(Txt.Height div 2),Txt);

   end;

   end;

   end;

  procedure TForm2.FormShow(Sender: TObject);

  var

   ItemInfo: TMenuItemInfo;

   hBmp1 : THandle;

  begin

   HBmp1:=MnuItm.Handle;

   with ItemInfo do

   begin

   cbSize:= SizeOf( ItemInfo );

   fMask:= MIIM_TYPE;

   fType:= MFT_BITMAP;

   dwTypeData:= PChar(MakeLong( hBmp1, 0 ));

   end;

   /** 用位图取代选单项目Open1 **/

 SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),

  Open1.MenuIndex, true, ItemInfo );

   end;

  以上程序在Windows98、Delphi 4.0环境下调试通过。

Delphi制作带图标的弹出式选单相关推荐

  1. Android UI之ImageButton(带图标的按钮)

    除了Android系统自带的Button按钮一万,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首先要在布局文件中定义ImageButton,然后通过setImageDrawable ...

  2. android 按钮带图标 阴影_android中带图标的按钮(ImageButton)怎么用

    展开全部 除了Android系统自带的Button按钮以外,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首先要在布局62616964757a686964616fe58685e5ae ...

  3. 【传】玩转Android---UI篇---ImageButton(带图标的按钮)

    原文网址:http://hualang.iteye.com/blog/964049 除了Android系统自带的Button按钮一万,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首 ...

  4. Android Studio自带图标制作利器 Image Asset Studio

    曾几何时, Android开发没有那么方便, 制作一个图标也许都要请美工, 或者自己花时间去PS. 或者去一些在线图标制作网站, 例如: https://makeappicon.com/ http:/ ...

  5. javafx 带图片的按钮菜单_怎么制作ICON图标 图片转ICON图标方法

    怎么制作ICON图标 图片转ICON图标方法?接下来就与大家分享一下,有关利用软件制作ICON图标的方法,同时也介绍利用相关转换工具实现图片转ICON的方法. 方法/步骤 首先,我们需要借助如图所示的 ...

  6. html css 带图标按钮,Bootstrap带图标的按钮样式

    这是一款基于bootstrap的带图标的按钮样式.这组按钮在bootstrap按钮的基础上,通过附加的HTML元素来构建小图标,并通过CSS3来制作鼠标hover动画效果. 使用方法 在页面中引入bo ...

  7. 使用IconWorkshop制作带alpha通道的位图

    使用IconWorkshop制作带alpha通道的位图 引自:http://www.cnblogs.com/liqilei/archive/2011/01/26/1945787.html 最近在项目中 ...

  8. Cytoscape制作带bar图和pie图节点的网络图

    采用cytoscape制作带bar图和pie图节点的网络图 作者:中科院微生物所 陈亮博士 本教程旨在告诉大家如何使用cytoscape根据Node信息表格制作带有barplot信息节点的网络图.以安 ...

  9. WPF中制作带中国农历的万年历

    WPF中制作带中国农历的万年历 原文:WPF中制作带中国农历的万年历 本例应用.net 2.0中的ChineseLunisolarCalendar类,制作出带中国农历的万年历.  先看看效果图片(已缩 ...

最新文章

  1. 关于flutter列表的性能优化,你必须要了解的
  2. 程序员删数据库事件引发的个人思考
  3. VUE:解决 [Vue warn]: Error in render: “TypeError: item.slice is not a function“ (取部分数据)
  4. 通俗讲解【重定向】及其实践
  5. nodejs实践录:简单的log日志模块
  6. java jdbc jar包_通过 Spring 框架如何进行JDBC操作呢?
  7. java 编写无状态代码,一种真正实现RMI无状态化的方法续:JVM源码修改步骤
  8. swap函数_【Golang】图解函数调用栈
  9. SpaceSniffer 界面让我眼前一亮
  10. 电脑上免费的录屏软件有哪些?分享六款录屏小工具,超好用
  11. 百度之星作为座位调整java_百度之星程序设计大赛十周年算法合集20052014.PDF
  12. rtk采点后如何导入cad_SMT贴片机是如何编程的
  13. vue3.0教程——搭建Vue脚手架【简化版】
  14. 如此优秀的JS轮播图,写完老师都沉默了
  15. python 批量处理文本文档基础操作
  16. Win11设置共享文件的方法
  17. LeetCode Relative Ranks
  18. windows10电脑在哪配置DNS
  19. mysql求中位值函数_SQLServer下取中位数(中位值)的方法
  20. Unity3D 2018(个人版) Editor更换黑色皮肤

热门文章

  1. 科技人才开发效率的空间杜宾模型分析
  2. 那些SAP项目里的主流外围系统
  3. Windows凭据管理器
  4. facebook女程序员_Facebook的新“ Messenger Kids”应用程序对我的孩子安全吗?
  5. 深度学习视频压缩3——M-LVC: Multiple Frames Prediction for Learned Video Compression
  6. 【微博简易爬虫】Python获取指定微博用户的发布文本
  7. 1033,2052 是什么意思?
  8. windows的域和域林间的信任是如何工作的
  9. 发现讯时CMS4.5的几个问题
  10. INF=0x3f3f3f3f是 什么意思?