在程式的使用過程中,使用頻率最高的可視化組件可以說就是按鈕了。如果在我們設計程式時為按鈕增加一些特殊的顯示效果,那麼一定會為你的應用程式增添不少情趣,下面筆者為大家介紹三種特殊映像按鈕顯示特效,其運行效果如所示。
一、實現映像按鈕(中的開始按鈕)在程式設計過程中,使用映像建立按鈕不僅可以使按鈕的顏色和形狀變化更加靈活,而且不需編寫過多的代碼,就能達到事半功倍的效果。下面給在大家介紹一下如何使用映像組件設計按鈕。
設計映像按鈕的步驟如下:
1、建立一視窗,在其中插入一個用於建立按鈕的映像組件TImage並命名為Image1;接著加入一個TLabel組件命名為Label1。
2、將TImage組件的Picture屬性指定為按鈕初始顯示的影像檔。將其中 AutoSize屬性設定為true,使其與映像大小自動匹配。將其Transperate屬性設定為true,使TImage本身為透明背景;
3、為TImage組件的OnMouseDown和OnMouseUp事件編寫如下事件控制代碼:
//該事件控制代碼處理滑鼠按下時的按鈕狀態--------------------------------------
void __fastcall TForm1::Image2MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Picture->LoadFromFile(".//start2.bmp");//裝入滑鼠按下時顯示的映像,檔案名稱為start2.bmp
}
//該事件控制代碼處理滑鼠放開時的按鈕狀態--------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,TShiftState Shift, int X, int Y)
{
Image1->Picture->LoadFromFile(".//start1.bmp");//裝入滑鼠按下時顯示的映像,檔案名稱為start1.bmp
}
4、為TImage組件的OnClick事件編寫需要處理的代碼,也就是把Timage組件視同一個按鈕組件使用。該例中,我們只是令程式顯示一個標題 "你按下了映像按鈕"。其代碼如下:
void __fastcall TForm1::Image1Click(TObject *Sender)
{
Label1->Caption="您選擇了映像按鈕";
}
二、實現任意形狀的按鈕(中的任意形狀按鈕)如果要設計的按鈕是不規則形狀的按鈕,我們只要用影像處理軟體畫出二個不規則形狀的按鈕。一個為凸出的按鈕一個為平面或凹下去按鈕的,其餘部分全部設計的相同即可。接著按上例為其添加OnMouseDown、OnMouseUp和OnClick事件即可。
三、實現動畫按鈕動畫按鈕的實現仍然是基於對TImage組件的合理使用上。其基本實現原理是:在表單中增加一個TTimer組件,用以控製圖像的迴圈變換,然後調用事先設計好的連續位元影像迴圈替換即可。按鈕單擊後處理事件的過程仍然由OnClick的事件控制代碼來實現。其實現步驟如下:
1、在表單中增加一個TTimer組件,並將其Enabled屬性設定為true,將其Interval屬性設定為100;接著在表單中再增加一個用於建立動畫按鈕的映像組件TImage並命名為Image1;添加一個TLabel組件命名為Label1。將TImage組件的Picture屬性指定為按鈕初始顯示的影像檔。將其中 AutoSize屬性設定為true,使其與映像大小自動匹配。將其Transperate屬性設定為true,使TImage本身為透明背景;
2、在主表單的類定義的Private部分定義一個映像計數器,用於控製圖像的交替顯示而不至於重複或停止。如:int LoadFlag ;
3、將TTimer組件的OnTimer事件控制代碼定義如下:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
ShowBtnImage(LoadFlag);
}
說明:該事件控制代碼中調用了一個使用者自訂函數,該函數根據LoadFlag值決定調用哪幅映像進行顯示。
函數ShowBtnImage內容如下://---------------------------------------------------------------------------
void TForm1::ShowBtnImage(int n)
{
if(LoadFlag>0&&LoadFlag<6) image1-="">Picture->LoadFromFile(".//BtnImage3-"+IntToStr(n)+".bmp");//(2)
LoadFlag++;//(3)
}
else
LoadFlag=1;//(4)
}
//----------------------------------------------------------------------------
常式解釋:
(1)句用於判斷LoadFlag是否處於1~6之間,這個範圍與需要裝載的映像數量有關,因為現在常式中使用的是6幅映像串成的動畫,所以LoadFlag限定在1~6之間,這樣做的好處是可以使OnTimer事件每次裝載的映像必須連續而且決不重複。
(2)句調用Picture對象的LoadFromFile方法從指定的影像檔中裝入映像。
(3)句將映像顯示標誌增加1,以保證下次調用的映像為下一幅連續映像。
(4)句是在LoadFlag標誌超出影像檔的數量時,使其自動回復到1,即下一次裝載的影像檔必定是第一幅映像。最後還得在該程式標頭檔的Private部分定義該自訂函數如下:
void ShowBtnImage(int n);
4、為TImage組件的OnClick事件編寫事件控制代碼以處理具體的程式事件。樣本如下:
void __fastcall TForm1::Image1Click(TObject *Sender)
{
Label1->Caption="您選擇了該動畫按鈕";
}
5、因為動畫的運行是連續不斷的,當使用者在按鈕上單擊滑鼠時,應該有必要讓按鈕看起來像是響應了使用者的動作,所以還要對這個TImage組件的OnMouseDown和OnMouseUp事件作如下處理:
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image1->Picture->LoadFromFile(".//BtnImage3-1.bmp");Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
LoadFlag=1;Timer1->Enabled=true;
}