网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 程序设计-> Delphi/Pascal-> 显示丰富多彩的快捷菜单

显示丰富多彩的快捷菜单
作者:佚名 来源:InterNet 加入时间:2004-11-25
相关文章 相关书籍:

  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 );

[文章录入员:fightter]

相关文章 相关书籍:
本站推荐内容

近期主机类热搜关键词:
美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

Delphi/Pascal
C/C++/VC
C++Builder
Basic/VB类
Delphi/Pascal
Java编程
FORTRAN
其它
电脑教程阅读排行
·DELPHI下的多线程程序设计(...
·Delphi与Excel的亲密接...
·Delphi实现串口通信的常用的...
·Delphi中初始化.Ini文件...
·Delphi中用于读写(I/O)...
·谈谈Delphi中的类和对象
·Delphi编译错误中文手册
·Delphi中关于TApplic...
·OPENGL图形程序设计
·SQL的基本操作