Delphi制作带图标的弹出式选单

2016-01-29 14:15 73 1 收藏

Delphi制作带图标的弹出式选单,Delphi制作带图标的弹出式选单

【 tulaoshi.com - 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环境下调试通过。
  

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/) 

来源:https://www.tulaoshi.com/n/20160129/1492851.html

延伸阅读
标签: Delphi
  在Windows 9x操作系统中,都有选单自动隐藏功能,不仅可以扩大应用软件的可视范围,而且又不耽误开始选单的操作,特别是同时打开多个应用程序时,能进行方便地切换,不让别人知道你后台运行的程序。在这里,我为大家介绍一下用Delphi实现该项功能的方法。 首先,建立一个新的Project。然后,在form1中添加一个Panel控...
标签: 设计
启动图标是每一个iOS中应用软件的关键组成部分。 它能传达给你应用程序的基础信息,并能够给用户带来第一印象感受。 它是一个非常重要的软件入口,能直接引导用户下载并使用应用程序。它的重要性在这个智能手机时代被大家所认知。 有过软件启动图标的设计经验的设计师,经常会遇到这样一个问题: 设计出的单枚软件启动图标看起来很炫,但是...
腾讯月捐计划倡导爱心人士,通过每月小额捐款的形式,长期关注和支持公益项目。并和亿万爱心网友一起,每人每月1份爱,点滴付出,汇成爱海,形成强大公益合力,随时帮助需要帮助的人! QQ公益图标正式亮相,让QQ用户轻松实现献爱心的公益愿望。 月捐计划的icon设计是一次重大的挑战,因为赋予它的意义非凡,被点亮后,将排列在迷你...
标签: 设计
设计:素描和脑力激荡 很多初学者跳上计算机创建一个标志。然而,往往不是,很多时间都花在摆弄的特殊效果和过滤器 。虽然这可能是有用的,它通常意味着,周到的设计和艺术性的标志本身已退居二线 。 一个更好的方式开始,是一个新鲜表纸和一支铅笔 。想想你想传授给观众的标志的意义和感觉。它是一个高科技游戏公司或一个历史悠久的非...
标签: 电脑入门
有些用户不喜欢MAC自带的硬盘图标,觉得它不够个性,那么,要怎么才能修改MAC硬盘图标呢?今天图老师小编就教大家一个简单的方法。 解决方法: 首先选择苹果的硬盘图标,右键,显示简介。 或者先单击硬盘的图标,然后按command+i,弹出显示简介对话框。 你再找一图标文件苹果系统支持.icns的图标文件,有很多网站都可以免费下载,你甚...

经验教程

825

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部