日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/3/13 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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制作带图标的弹出式选单的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。