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

24081315xu

24081315xu

2016-01-29 14:15

Delphi制作带图标的弹出式选单,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://m.tulaoshi.com/delphi/) 
展开更多 50%)
分享

猜你喜欢

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

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

创建弹出式“每日提示”窗口

ASP
创建弹出式“每日提示”窗口

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

自动关闭弹出式窗口

电脑网络
自动关闭弹出式窗口

如何在Delphi中制作“动态选单”

Delphi
如何在Delphi中制作“动态选单”

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用JavaScript 制作多彩的弹出式说明窗口

Web开发
用JavaScript 制作多彩的弹出式说明窗口

CSS的“弹出式”图像浏览器

Web开发
CSS的“弹出式”图像浏览器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Delphi下汉字输入法的编程及使用

Delphi下汉字输入法的编程及使用

Delphi多层应用程序的实现

Delphi多层应用程序的实现
下拉加载更多内容 ↓