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制作带图标的弹出式选单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摆脱客户端?网页发起直播势在必行!
- 下一篇: C#语言实例源码系列-鼠标左右键颠倒