260 likes | 358 Views
第三章 基本輸入與輸出. 3-1 表單( Form ) 3-2 標籤盒( Label ) 3-3 文書盒( Edit ) 3-4 功能鈕( Button ) 3-5 ShowMessage 程序 3-6 InputBox 函式.
E N D
第三章 基本輸入與輸出 • 3-1 表單(Form) • 3-2 標籤盒(Label) • 3-3 文書盒(Edit) • 3-4 功能鈕(Button) • 3-5 ShowMessage程序 • 3-6 InputBox函式
輸入與輸出是程式設計的第一步,Delphi的輸入與輸出方式有兩種,分別是使用元件及對話框。使用元件的方式是在表單(Form)放置輸出入元件,本章即要介紹四種最常用的輸出入元件──表單(Form)、標籤(Label)、文書盒(Edit)及功能鈕(Button)。使用對話框的輸入與輸出,將分別介紹ShowMessage()、MessageBox()及InputBox()等函式。輸入與輸出是程式設計的第一步,Delphi的輸入與輸出方式有兩種,分別是使用元件及對話框。使用元件的方式是在表單(Form)放置輸出入元件,本章即要介紹四種最常用的輸出入元件──表單(Form)、標籤(Label)、文書盒(Edit)及功能鈕(Button)。使用對話框的輸入與輸出,將分別介紹ShowMessage()、MessageBox()及InputBox()等函式。
3-1 表單(Form) Form的主要功能為放置各種不同的輸出入元件,以便作為繪圖及輸出入文字,是使用者與程式溝通的最主要物件。如下圖所示,當新增一個應用程式時,第一個存在的元件即是表單。 • Caption屬性 Caption是表單的標題,如上圖的表單,其預設值為Form1。 • Name屬性 現實的社會中,每個人、事、物均有名稱,Delphi的元件亦不例外,表單的Name預設值為Form1,而本書中設定其物件縮碼為frm。(附註:什麼是物件縮碼?一個程式中若同時存在二個以上相同元件,則第一個元件為Name1、第二個元件為Name2,例如Form1、Form2...等。但這種方式非常不利程式的閱讀,所以本書將每一元件取其物件縮碼,例如Form縮碼為frm、Label縮碼為lbl、Edit縮碼為edi、Button縮碼為btn。而物件的命名則是物件縮碼後加上一個有意義的識別字,例如前面常用到的btnStart、btnClose等,即是代表Button元件、Start與Close則代表此按鍵的功能。) 一些元件的初值亦可在Form載入時(FormCreate事件)給予設定,以下範例示範表單的用法。
範例3-1a • 請寫一個程式,當表單載入時,使用表單的Caption屬性顯示“Hello”;當按一下表單時顯示“How are you”;按二下表單時,結束程式的執行。 • 本例共需使用三種事件,分別是表單載入事件(FormCreate)、表單被按一下事件(FormClick)及表單被按二下(FormDblClick),而程式執行的依據即為以上事件成立與否,這也就是目前程式開發工具的主流──事件驅動的程式設計,關於事件驅動的程式設計請參閱本書第十二章。 程式說明: • 1. 如何於程式執行階段存取物件的屬性? Delphi與VB均是在物件變數與屬性之間加點(.)運算子。 • 2. 表單載入時,首先會執行FormCreate事件函式。 表單常用屬性
表單常用屬性 每個物件均有許多屬性,以下是表單常用的屬性列表,其中有很多屬性是所有物件共通的。
[註1]:有星號(*)者,表示這些屬性是某個屬性 的附屬屬性。 • [註2]:有加號(+)者,表示該屬性還有附屬屬性,在該屬性上按兩下,即可展開此屬性的附屬屬性,此時加號(+)將會變成減 號(-)。
表單常用事件 每個物件通常均包含許多事件,以下是表單的常用事件整理,其中很多事件是共通於所有物件。 • FormCreate事件 當表單載入時,Delphi會自動執行此事件,但此事件只有在載入Form時才會執行,因此在程式中只會執行一次。 • FormClick事件 當使用者在表單中,按一下滑鼠左鍵時(不要按到有元件的地方)就會觸動該表單的FormClick事件函式,並將該函式內的敘述執行一次。 • FormDblClick事件 當使用者在表單中,按二下滑鼠左鍵時(不要按到有元件的地方),就會觸動該表單的FormDblClick事件函式。 • FormActivate事件 當Form變成作用的表單(被選取的表單亦稱為使用視窗),會執行FormActivate事件函式。當Form載入後,此事件將會緊接在FormCreate事件函式後執行,往後只要有Form被選取,都會執行此事件函式一次。因此,此事件函式在程式中不只執行一次。 • FormPaint事件 當Form載入執行時也會執行此事件函式,且程式執行中若有其它物件覆蓋在表單上、或有改變表單的大小,都會觸動FormPaint事件函式。
3-2 標籤盒(Label) • Label的主要功能為輸出程式的執行結果,或於程式輸入控制項前輸出某些字元,以作為輸入的提示。
範例3-2a • 同上範例,於表單載入時,表單的標題顯示系統時間;當按一下表單時,使用Label顯示“How are you”,並讓電腦的喇叭發出“嗶一聲”;當滑鼠於Label上方移動時,Label出現“You are Welcome”。
Label常用屬性與方法 Label的大部分屬性都與Form相同,比較特別的部分說明如下: • Name屬性 所有物件的名稱均使用Name屬性(Label元件亦不例外),此屬性在本單元之後, 均不再重複介紹。 • Caption屬性 Caption屬性用於顯示Label要顯示的字串。 • Align屬性 物件靠齊表單的方式,有以下幾種靠齊方式,請自行把玩,並觀察元件位置的變化 alBottom :佈滿下面表單。 alClient :佈滿整個表單。 alLeft :佈滿左邊表單。 alNone :此屬性無作用(預設性)。 alRight :佈滿右邊表單。 alTop :佈滿上面表單。 • Alignment屬性 標題文字的對齊方式,有以下三種: taCenter :文字靠中。 taLeftJustify :文字靠右。 taRightJustify :文字靠左。 • AutoSize屬性 Label元件的大小是否隨著文字的大小而自動調整。
3-3 文書盒(Edit) 上一節的Label僅能顯示輸出結果,他的特色是僅提供輸出功能、不能進行任何輸入,如此可防止資料遭受到使用者修改。本節的Edit則可作為輸出、入的工具,且其重點是應用在輸入文字及數字,Edit較特殊的屬性如下所述: • Text屬性 使用者所輸入的文、數字,型態為字串(String),其預值為Edit1。 • MaxLength屬性 設定可輸入的最大字元數,其預設值為0(若設定為0,表示無輸入上限) • PasswordChar屬性 若要鍵入的字元不顯示於Edit,可使用此屬性。例如填入星號(*),則使用者所輸入的字元均以星號(*)顯示。若欲正常顯示,則應使用預設值#0。 • ReadOnly屬性 邏輯值,設定Text的內容唯讀與否,其預設值為False。 • Hint屬性 當滑鼠移至Edit上方時,所出現的提示字,其預設值為空白。 • ShowHint屬性 邏輯值,設定Hint屬性顯示與否,其預設值為False。
範例3-3a 請設計一個密碼輸入程式,由Edit元件輸入密碼,當使用者按一下表單時,由Label元件輸出密碼內容。
範例3-3a程式說明: Form、Label與下一節的Button均使用Caption屬性顯示其輸出結果,但請特別留意Edit卻使用Text作為輸出入的屬性。
3-4 功能鈕(Button) • 在前面幾節裡,都是使用按一下表單的方式來執行某項命令。然此種方式無法順利引導使用者執行單一項功能、也無法同時執行多個命令,本節將介紹一個正式的功能按鈕(Button)解決以上問題。Button元件最常使用的功能為Click事件,其標題亦為Caption屬性,請看以下範例說明。
範例3-4a • 請寫一個可以執行算術的加、減、乘及除法運算程式。 程式說明: • Delphi對資料型態的要求非常嚴謹,不像VB可以彈性設定。本例的Edit與Label的屬性:Text與Caption,其格式均為字串,故要進行算術運算以前均要先轉為整數(StrToInt)或浮點數(StrToFloat),待數值運算完畢後再轉為字串(IntToStr或FlootToStr)輸出。
範例3-4b • 同上範例,但為每個功能鈕製作快速鍵
3-5 ShowMessage程序 • Delphi的輸入或輸出資料,除了可以使用上面的元件外,亦可使用程序或函式,例如本節要介紹的ShowMessage程序及下一節的InputBox函式、MessageBox函式。 • ShowMessage的語法如下,它可以將指定的Msg字串輸出。 procedure ShowMessage(const Msg: string);
範例3-5a • 示範ShowMessage的用法。
3-6 InputBox函式 • 上一節的ShowMessage僅能輸出字串,本節的 InputBox 除了可輸出字串外、亦可輸入字串。其語法如下,其中ACaption是對話框的標題、APrompt是對話框的提示字串、ADefault是輸入的預設值,其格式均為String。 function InputBox(const ACaption, APrompt, ADefault: string): string;
範例3-6a • 示範InputBox函式的用法。
3-7 MessageBox函式 • 於程式的執行中常有一些無法預期的事件或訊息,Delphi提供此一對話函式供使用者使用,如此即可縮短程式撰寫時間,並提昇人機使用介面的親和性。MessageBox的語法如下,它是封裝Windows API MessageBox的函式。 • 傳回之數值 m := MessageBox (輸出字串,標題,n) • 以上語法說明如下: 1.輸出字串與標題均為字串型態。 2. m、n均為Integer型態。 3. n 之值可為下列之值或累加。若為累加,則輸出之格式亦是個別情況的組合。
範例3-7a • 本例示範MessageBox函式的用法。
習題 • 1. 自由落體的距離與時間關係如下: s=v0t+g.t2 請寫一個程式可以輸入初速vo及經時間t後,而得其落體距離。 • 2. 假設y = f(x) = x3-6x2+11x-6,請寫一程式,可以輸入x值,而得對應的y值。 • 3. 請寫一個程式 (1)可以輸入兩個點的座標。 (2)按一下“開始”按鍵,可得兩點距離。