?? delphi制作帶圖標(biāo)的彈出式選單 (2001年4月4日).txt
字號(hào):
Delphi制作帶圖標(biāo)的彈出式選單 (2001年4月4日)
網(wǎng)友更新 分類(lèi):圖形圖象 作者:唐杏 推薦:steven9dong 閱讀次數(shù):250
(http://www.codesky.net)
--------------------------------------------------------------------------------
Windows界面的一大特色就是顯示豐富多彩的圖標(biāo),圖標(biāo)不僅美化了Windows的桌面,而且便于直觀的操作,給用戶帶來(lái)了極大的方便。在設(shè)計(jì)程序界面時(shí),Windows風(fēng)格是很好的參考。
Delphi一般提供兩種設(shè)置圖標(biāo)的方法,一個(gè)是在Project Options 中指定應(yīng)用程序的圖標(biāo),另一個(gè)是在Object Inspector 的properties頁(yè)中提供Icon特性。如果想設(shè)計(jì)出像Windows開(kāi)始選單那樣美麗的彈出選單,就要自己編寫(xiě)代碼了。
我們知道大多數(shù)Windows應(yīng)用程序本身帶有圖標(biāo),只要將程序本身所帶的圖標(biāo)取出,調(diào)整圖標(biāo)的大小加入到彈出選單中,一個(gè)美麗的選單就完成了。
首先用ExtractAssociatedIcon從某一程序中獲取圖標(biāo),而圖標(biāo)的尺寸大小不一,不一定能直接添加到選單中,同時(shí)Delphi沒(méi)有提供調(diào)整圖標(biāo)大小的功能,這就必須將圖標(biāo)文件轉(zhuǎn)化成位圖文件,然后調(diào)整位圖文件的大小,最后用位圖文件取代選單項(xiàng)目即可。其源代碼如下:
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
/**** 選單條中的項(xiàng)目****/
Open1: TMenuItem;
/****選單文件中的項(xiàng)目 ****/
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{局部參數(shù)聲明}
public
{全局參數(shù)聲明}
Icn, Txt, MnuItm: TBitmap;
end;
procedure TForm2.FormCreate(Sender: TObject);
var R: TRect;
HIcn: HIcon;
Ic: TIcon;
Index: Word;
FileName: PChar;
begin
/**從某一程序中獲取圖標(biāo)**/
Ic:=TIcon.Create;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*文件名稱(chēng)及其路徑*/, Index);
/** 創(chuàng)建位圖**/
Txt:=TBitmap.Create;
with Txt do
begin
Width:=Canvas.TextWidth(' Test');
Height:=Canvas.TextHeight(' Tes');
Canvas.TextOut(0,0,' Test');
end;
/**將圖標(biāo)復(fù)制到上述創(chuàng)建的位圖中,并調(diào)整它的尺寸 **/
Icn:=TBitmap.Create;
with Icn do
begin
Width:=32;
Height:=32;
Brush.Color:=clBtnFace;
Canvas.Draw(0,0,Ic);
end;
/** 創(chuàng)建最后的位圖文件**/
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;
/** 用位圖取代選單項(xiàng)目Open1 **/
SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),
Open1.MenuIndex, true, ItemInfo );
end;
以上程序在Windows98、Delphi 4.0環(huán)境下調(diào)試通過(guò)。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -