Delphi制作带图标的弹出式选单
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制作带图标的弹出式选单相关推荐
- Android UI之ImageButton(带图标的按钮)
除了Android系统自带的Button按钮一万,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首先要在布局文件中定义ImageButton,然后通过setImageDrawable ...
- android 按钮带图标 阴影_android中带图标的按钮(ImageButton)怎么用
展开全部 除了Android系统自带的Button按钮以外,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首先要在布局62616964757a686964616fe58685e5ae ...
- 【传】玩转Android---UI篇---ImageButton(带图标的按钮)
原文网址:http://hualang.iteye.com/blog/964049 除了Android系统自带的Button按钮一万,还提供了带图标的按钮ImageButton 要制作带图标的按钮,首 ...
- Android Studio自带图标制作利器 Image Asset Studio
曾几何时, Android开发没有那么方便, 制作一个图标也许都要请美工, 或者自己花时间去PS. 或者去一些在线图标制作网站, 例如: https://makeappicon.com/ http:/ ...
- javafx 带图片的按钮菜单_怎么制作ICON图标 图片转ICON图标方法
怎么制作ICON图标 图片转ICON图标方法?接下来就与大家分享一下,有关利用软件制作ICON图标的方法,同时也介绍利用相关转换工具实现图片转ICON的方法. 方法/步骤 首先,我们需要借助如图所示的 ...
- html css 带图标按钮,Bootstrap带图标的按钮样式
这是一款基于bootstrap的带图标的按钮样式.这组按钮在bootstrap按钮的基础上,通过附加的HTML元素来构建小图标,并通过CSS3来制作鼠标hover动画效果. 使用方法 在页面中引入bo ...
- 使用IconWorkshop制作带alpha通道的位图
使用IconWorkshop制作带alpha通道的位图 引自:http://www.cnblogs.com/liqilei/archive/2011/01/26/1945787.html 最近在项目中 ...
- Cytoscape制作带bar图和pie图节点的网络图
采用cytoscape制作带bar图和pie图节点的网络图 作者:中科院微生物所 陈亮博士 本教程旨在告诉大家如何使用cytoscape根据Node信息表格制作带有barplot信息节点的网络图.以安 ...
- WPF中制作带中国农历的万年历
WPF中制作带中国农历的万年历 原文:WPF中制作带中国农历的万年历 本例应用.net 2.0中的ChineseLunisolarCalendar类,制作出带中国农历的万年历. 先看看效果图片(已缩 ...
最新文章
- 关于flutter列表的性能优化,你必须要了解的
- 程序员删数据库事件引发的个人思考
- VUE:解决 [Vue warn]: Error in render: “TypeError: item.slice is not a function“ (取部分数据)
- 通俗讲解【重定向】及其实践
- nodejs实践录:简单的log日志模块
- java jdbc jar包_通过 Spring 框架如何进行JDBC操作呢?
- java 编写无状态代码,一种真正实现RMI无状态化的方法续:JVM源码修改步骤
- swap函数_【Golang】图解函数调用栈
- SpaceSniffer 界面让我眼前一亮
- 电脑上免费的录屏软件有哪些?分享六款录屏小工具,超好用
- 百度之星作为座位调整java_百度之星程序设计大赛十周年算法合集20052014.PDF
- rtk采点后如何导入cad_SMT贴片机是如何编程的
- vue3.0教程——搭建Vue脚手架【简化版】
- 如此优秀的JS轮播图,写完老师都沉默了
- python 批量处理文本文档基础操作
- Win11设置共享文件的方法
- LeetCode Relative Ranks
- windows10电脑在哪配置DNS
- mysql求中位值函数_SQLServer下取中位数(中位值)的方法
- Unity3D 2018(个人版) Editor更换黑色皮肤
热门文章
- 科技人才开发效率的空间杜宾模型分析
- 那些SAP项目里的主流外围系统
- Windows凭据管理器
- facebook女程序员_Facebook的新“ Messenger Kids”应用程序对我的孩子安全吗?
- 深度学习视频压缩3——M-LVC: Multiple Frames Prediction for Learned Video Compression
- 【微博简易爬虫】Python获取指定微博用户的发布文本
- 1033,2052 是什么意思?
- windows的域和域林间的信任是如何工作的
- 发现讯时CMS4.5的几个问题
- INF=0x3f3f3f3f是 什么意思?