按鈕(Button)是Windows應用程序界面中最常用、最簡單的組件之一。除了按鈕之外,Delphi還提供了一種位圖按鈕(BitBtn)。這種按鈕的不同之處在於按鈕上可以顯示位圖。下面我們通過一個簡單的例子來介紹這兩種按鈕。
在窗體Form1上放置兩個普通按鈕和兩個位圖按鈕以及一個編輯框Edit,然後再添加一個窗體Form2,在其上放置一個標簽和兩個位圖按鈕。程序界面如下圖所示:
按下表設置各按鈕的屬性:
Form1 Form2 屬性 Button1 Button2 BitBtn1 BitBtin2 BitBtn1 BitBtn2 Caption Button1 Button2 對話框 &Close Ok Cancel Kind bkCustom bkClose bkOk bkCancel Cancel False True False False False False Default True False False False False False ModalResult mrNone mrNone mrNone mrNone mrOk mrCancel以上均是按鈕常用的一些屬性,下面作簡單的介紹:
Cancel: 該屬性值為True時,則無論用戶何時按Esc鍵,都會執行該按鈕的OnClick事件。如果同一個窗體上具有多個這樣的按鈕,則會執行TabOrder值最小的按鈕的OnClick事件。 Default: 這個屬性和Cancel屬性相似。當用戶按下Enter鍵時,將執行該按鈕的OnClick事件。但有一個例外,如果當前擁有輸入焦點的控件為另一個按鈕時,按Enter鍵時則只執行當前按鈕的OnClick事件。 Kind: 這個屬性為位圖按鈕所特有,選擇Kind屬性的某個選項,用於決定該位圖按鈕的種類每一種位圖按鈕具有自己獨特的功能。位圖按鈕常用於各種對話框或模態窗口中,根據按鈕的ModalResult屬性值來決定對模態窗口的操作。 ModalResult: 模態值。當我們單擊位圖按鈕時,將把對話框的模態值設為相同的值。它將決定位圖按鈕的父窗體的關閉方式。如單擊mbOk按鈕,將關閉對話框,返回mrOk值。在完成界面設計後,開始編寫事件處理過程。程序清單如下:
由於在程序中我們使用了兩個窗體,而在Delphi中每個窗體對應一個單元,所以程序中便有兩個單元(Unit1和Unit2)。在Delphi中不同單元之間的調用要在調用單元的實現部分(implementation)的開始進行申明,這裡為:
implementation
uses unit2;
在添加Form2時,系統將自動在項目文件Project.dpr中添加生成Form2的語句:
Application.CreateForm(TForm2, Form2);
但是,程序運行時,只顯示出Form1,Form2是隱藏的。為了顯示出Form2,我們在窗體Form1的BitBtn1按鈕的OnClick事件中添加如下的語句:
form2.ShowModal;
單擊BitBtn1按鈕,將以模態窗體的形式顯示出來。所謂模態窗體(ModalForm)是指該窗體關閉之前,其他的窗體不能接受輸入焦點。
按下F9編譯運行程序,然後按Esc鍵,將彈出一個信息框,如右圖所示。由於Button2的Cancel屬性設為True,所以程序運行時,無論何時按下Esc鍵,將啟動Button2的OnClick事件:
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('Button2的Cancel屬性為True'); //顯示出一個信息框
end;
即按Esc鍵相當於單擊Button2。
單擊Edit1,將輸入焦點置於編輯框內,然後按下會車鍵。此時將發現觸發了Button1的OnClick事件:
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:='Button1的Default屬性為True';
end;
因為Button1的Default屬性設置為True,所以當輸入焦點在編輯框中時,按下會車鍵時,將觸發Button1的OnClick事件,如下圖所示。
單擊BitBtn1(標題為“對話框”)按鈕,將彈出Form2窗體。Form2為模態對話框,單擊mbOk按鈕或mbCancel按鈕,對話框都將自動關閉。如果你不想讓對話框關閉,可以將位圖按鈕的ModalResult屬性設置為BrNone。
單擊Form1的BitBtn2按鈕(標題為“Close”),Form1將自動關閉。Form1為非模態窗體,但是BitBtn2按鈕為mbClose按鈕,所以它具有關閉窗體的功能。