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

2016-01-29 14:15 77 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环境下调试通过。
  

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

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

延伸阅读
标签: Delphi
  在数据库应用程序开发中,系统设计员、程序设计员需要考虑的一个重要问题是如何设计和输出报表,在Delphi中我们可以采用多种方案来解决这一问题。如运用OLE自动化技术将数据输出到MS-Word、MS-Excel中等,但其中最直接、最本地化的还是使用Delphi3.0/40中的QuickReport报表组件。它是挪威QuSoft公司专门为Delphi 编写的,使用QuickReport...
标签: Delphi
  在Windows 9x操作系统中,都有选单自动隐藏功能,不仅可以扩大应用软件的可视范围,而且又不耽误开始选单的操作,特别是同时打开多个应用程序时,能进行方便地切换,不让别人知道你后台运行的程序。在这里,我为大家介绍一下用Delphi实现该项功能的方法。 首先,建立一个新的Project。然后,在form1中添加一个Panel控...
标签: 设计
启动图标是每一个iOS中应用软件的关键组成部分。 它能传达给你应用程序的基础信息,并能够给用户带来第一印象感受。 它是一个非常重要的软件入口,能直接引导用户下载并使用应用程序。它的重要性在这个智能手机时代被大家所认知。 有过软件启动图标的设计经验的设计师,经常会遇到这样一个问题: 设计出的单枚软件启动图标看起来很炫,但是...
在Authorware中利用选单交互很容易制作一个标准的Windows风格的选单,而用Authorware来制作子选单却是一件相当麻烦的事;但是如果使用Control u32 for Authorware这个UCD,.上面这个问题将比较容易解决。这个UCD的文件名为tMsContr(www.tulaoshi.com)ols.u32(tMsControls.u32是Mediashoppe提供的一个免费的函数库,其功能非常强大),它...
腾讯月捐计划倡导爱心人士,通过每月小额捐款的形式,长期关注和支持公益项目。并和亿万爱心网友一起,每人每月1份爱,点滴付出,汇成爱海,形成强大公益合力,随时帮助需要帮助的人! QQ公益图标正式亮相,让QQ用户轻松实现献爱心的公益愿望。 月捐计划的icon设计是一次重大的挑战,因为赋予它的意义非凡,被点亮后,将排列在迷你...

经验教程

429

收藏

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