版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章窗體和基本組件在程序設(shè)計中,程序界面是非常重要的,界面是否美觀、友好給用戶的是第一印象。程序界面元素主要有窗體和基本組件。窗體是應(yīng)用程序的操作界面,程序的操作元素都必須添加到窗體上,沒有窗體程序的框架就無法建起。而基本組件則是用戶與應(yīng)用程序交互的工具,有了這些基本的常見的組件用戶才能夠方便操作程序,程序才能夠響應(yīng)用戶的請求。Delphi2005中的組件可以分為VCLForms組件和WindowsForm組件,雖然這些組件有相同的地方,但是它們?nèi)匀挥幸恍┎煌帯@缭赩CL中Label組件具有Caption屬性,而在WindowsForm中則是Text屬性。本章主要介紹VCLForms組件,WindowsForm組件讀者可以舉一反三。3.1窗體窗體是應(yīng)用程序的操作界面,用于存放組件,沒有窗體應(yīng)用程序就無法搭建。窗體由標(biāo)題欄、工作區(qū)、邊界構(gòu)成。標(biāo)題欄不僅有控制菜單、還有最小化、最大化(恢復(fù))、關(guān)閉等按鈕,窗體的標(biāo)題欄可以用于改變窗體的大小、位置,還可以最大化、最小化、恢復(fù)窗體的大小位置等操作。可以在窗體標(biāo)題欄中顯示窗體的標(biāo)題文字。邊框可以用于調(diào)整窗體的大小。工作區(qū)是窗體存放組件的位置。下面以建立VCLFormsApplication為例講述窗體,WindowsFormsAppication中的窗體類似于VCLFormsApplication中的窗體。1.窗體的屬性窗體的屬性用來描述窗體的高低、長寬、顏色、邊框的,主要屬性有如下一些。(1)Name屬性和Caption屬性Name屬性,對象的名稱屬性,它用來唯一標(biāo)識對象,一個程序中不同對象的名稱是不能夠相同的。系統(tǒng)是根據(jù)對象的名稱來識別不同對象的。對象的名稱最好要做到見名知義,如Form1表示窗體,而Edit1表示文本框。Caption屬性,窗體的標(biāo)題文字,是字符類型。默認(rèn)情況下,窗體的Caption屬性是與Name屬性是相同的。可以修改窗體的標(biāo)題文字,例如,設(shè)置窗體的標(biāo)題文字為“游戲程序”。(2)Height、Width、ClientHeigth、ClientWidth、Top和Left屬性Heigth、Width分別表示窗體的高度和寬度。ClientHeigth、ClientWidth分別表示窗體工作區(qū)的高度和寬度(工作區(qū)是不包括標(biāo)題欄和邊框的)。Top和Left分別表示窗體左上角在屏幕中的垂直和水平位置。(3)Enabled屬性窗體是否有效,值為True時窗體有效,此時窗體可以響應(yīng)各種事件,值為False時窗體無效,窗體不響應(yīng)事件。(4)Visible屬性窗體是否顯示,值為True時窗體顯示,值為False時窗體不顯示。(5)Color屬性窗體的顏色,顏色可以使用rgb函數(shù)來表示,也可以使用類似的clbackground等枚舉值。(6)Font屬性窗體的字體屬性,包括字的大小、顏色、下劃線、刪除線、粗體和斜體等。單擊屬性font后面的省略號按鈕,出現(xiàn)系統(tǒng)設(shè)置字體對話框。(7)Align屬性Align屬性用來決定窗體在屏幕中的對齊方式,該屬性是枚舉類型,其具體取值及其含義參見表3-1。2.窗體的事件窗體的事件很多,常用的事件有如下一些。(1)OnCreate事件:建立窗體時首先觸發(fā)該事件,一般把程序的初始化代碼寫在OnCreate事件過程中。(2)OnShow事件:顯示窗體時,觸發(fā)該事件。(3)OnPaint事件:重畫窗體事件,窗體改變大小,窗體被遮蓋時觸發(fā)該事件。(4)OnActivate事件:激發(fā)窗體的時候(窗體得到焦點)觸發(fā)該事件。(5)OnClose事件和OnCloseQuery事件:關(guān)閉窗體時觸發(fā)這兩個該事件。當(dāng)窗體要關(guān)閉時,首先觸發(fā)OnCloseQuery事件,該事件處理過程中有一個Boolean類型的參數(shù)CanClose,默認(rèn)值為True,表示窗體可以關(guān)閉,當(dāng)CanClose的值為False時窗體不能關(guān)閉,不會觸發(fā)OnClose事件。如果在OnCloseQuery事件過程中設(shè)置CanClose的值為False則窗體可以關(guān)閉,接下來將觸發(fā)OnClose事件。在Onclose事件處理過程中,有一個參數(shù)Action,用來決定關(guān)閉窗體的實際操作。Action的取值和意義參照表3-6所示。3.窗體的方法窗體的方法很多。常用的方法主要有如下幾個。(1)Release方法:從內(nèi)存釋放窗體。(2)Show方法:顯示窗體。(3)Hide方法:隱藏窗體。(4)Close方法:用于關(guān)閉窗體,例如:Form1.Close表示關(guān)閉窗體,并觸發(fā)OnClose事件和OnCloseQuery事件。4.窗體的應(yīng)用舉例【例3-1】要求程序運行時,窗體位于屏幕中央,請編寫程序。分析,本程序應(yīng)該在窗體的OnFormCreate事件過程中寫代碼,代碼如下:procedureTForm1.FormCreate(Sender:TObject);beginForm1.Left:=(1024-form1.Width)div2;form1.Top:=(768-form1.Height)div2//假設(shè)屏幕分辨率為1024*768end;【例3-2】要編寫Form的OnClose和OnCloseQuery事件過程,有時候關(guān)閉程序的時候彈出對話框提示是否關(guān)閉窗口。請編寫程序。分析:本程序可以使用OnCloseQuery事件來完成,先添加按鈕Button1,編寫B(tài)utton1的OnClick事件過程,如下:procedureTForm1.Button1Click(Sender:TObject);beginform1.Close;//該方法將首先觸發(fā)OnCloseQuery事件end;再編寫Form1的OnCloseQuery事件過程,代碼如下:procedureTForm1.FormCloseQuery(Sender:TObject;varCanClose:Boolean);
vari:word;begini:=messagedlg('是否關(guān)閉窗口?',mtconfirmation,[mbyes,mbno],1);ifi=mryes//點擊“是”按鈕thencanclose:=true//關(guān)閉窗口,將觸發(fā)OnClose事件elsecanclose:=false//不關(guān)閉窗口,不會觸發(fā)OnClose事件end;說明:點擊Button1按鈕或者直接點擊窗體右上角的關(guān)閉按鈕程序?qū)⒂|發(fā)Form1的OnCloseQuery事件,程序提示“是否關(guān)閉窗口?”,選擇“yes”可以關(guān)閉窗口,選擇“no”不關(guān)閉窗口。說明:點擊Button1按鈕或者直接點擊窗體右上角的關(guān)閉按鈕程序?qū)⒂|發(fā)Form1的OnCloseQuery事件,程序提示“是否關(guān)閉窗口?”,選擇“yes”可以關(guān)閉窗口,選擇“no”不關(guān)閉窗口。上面的程序還可以不使用Form1的OnCloseQuery事件,而使用Form1的OnClose事件,可以將上面的Form1的OnCloseQuery事件過程改成Form1的OnClose事件過程,代碼如下:procedureTForm1.FormClose(Sender:TObject;varAction:TCloseAction);
vari:word;begini:=messagedlg('是否關(guān)閉窗口?',mtconfirmation,[mbyes,mbno],1);ifi=mryesthenAction:=cafree//關(guān)閉窗口elseAction:=canone//不關(guān)閉窗口end;說明:點擊Button1按鈕或者直接點擊窗體右上角的關(guān)閉按鈕,此時觸發(fā)Form1的OnCloseQuery事件,由于Form1的OnCloseQuery事件過程中參數(shù)CanClose的默認(rèn)值是True,因此程序觸發(fā)Form1的OnClose事件。程序提示“是否關(guān)閉窗口?”,選擇“yes”可以關(guān)閉窗口,選擇“no”不關(guān)閉窗口。
3.2VCLForms組件窗體是應(yīng)用程序的操作界面,用于存放組件,因此必須在窗體里面加入其他組件,只有這樣用戶才可以和程序交互。本節(jié)將講述最常見的幾個VCL可視化組件。其中標(biāo)簽、單行文本框、多行編輯框是文本類組件,Panel、Splitter、GroupBox等組件用于分組,Button、BitBtn、SpeedButton、CheckBox、RadioButton和RadioGroup則屬于按鈕類組件。根據(jù)用戶建立的是WindowsForms應(yīng)用程序還是VCLForms應(yīng)用程序,系統(tǒng)會自動切換到相應(yīng)的組件面板。3.2.1Label組件Label標(biāo)簽是最常見的文本顯示組件,與文本框不同的是,文本框可以編輯,標(biāo)簽運行之后就不能夠直接編輯了。因此它主要用于靜態(tài)的文本顯示。Label組件位于Standard組件面板中。Label標(biāo)簽是最常見的文本顯示組件,與文本框不同的是,文本框可以編輯,標(biāo)簽運行之后就不能夠直接編輯了。因此它主要用于靜態(tài)的文本顯示。Label組件位于Standard組件面板中。
1.Label的屬性(1)Caption屬性:標(biāo)簽上顯示的文字,如果Caption屬性中含有字符“&”,那么該字符之后的第一個字符為加速鍵。(2)FocusControl屬性:按下加速鍵時,獲得焦點的組件。(3)AutoSize屬性:Boolean型,決定標(biāo)簽是否隨文字的變化而改變標(biāo)簽大小。(4)Alignment屬性:標(biāo)簽的對齊方式,有3個枚舉值,分別是左對齊、居中對齊、右對齊。(5)Layout屬性:標(biāo)簽的對齊方式,有3個枚舉值,分別是上對齊、居中對齊、右對齊。(6)WordWrap屬性:Boolean型,是否換行顯示。(7)Transparent屬性:Boolean型,背景是否透明。2.Label的應(yīng)用【例3-3】編寫一個密碼登錄框程序。程序設(shè)計步驟:(1)程序可以使用標(biāo)簽、編輯框、命令按鈕等等,界面設(shè)計如圖3-1所示。(3)編寫程序如下:確定按鈕的Button1的OnClick事件過程:procedureTForm1.Button1Click(Sender:TObject);beginif(uppercase(edit1.Text)='ABCDEF')and(edit2.Text='123')thenshowmessage('歡迎使用本系統(tǒng)')elsebeginshowmessage('口令或者用戶名錯');edit1.Text:='';edit2.Text:='';edit1.SetFocus;end;end;取消按鈕的Button2的OnClick事件過程:procedureTForm1.Button2Click(Sender:TObject);beginedit1.Text:='';edit2.Text:='';edit1.SetFocusend;說明:uppercase()函數(shù)可以將輸入的小寫英文字母變成大寫英文字母。3.2.2Edit組件Edit編輯框是最常見的文本輸入、顯示組件,它不僅可以輸入、顯示而且還可以編輯修改。Edit組件位于Standard組件面板中。1.Edit組件的屬性(1)Text屬性:String類型,文本框中的文本內(nèi)容。(2)AutoSelect屬性:Boolean類型,當(dāng)編輯框得到焦點的時候,是否自動選定文本。值為True時當(dāng)編輯框得到焦點自動選動文本框中的文字,值為False時編輯框得到焦點不選定文本框中的文本。(3)Enabled屬性:Boolean類型,編輯框是否有效,值為True時編輯框有效,值為False時編輯框無效。(4)ReadOnly屬性:Boolean類型,決定編輯框中的內(nèi)容是否可以編輯。(5)SelStart屬性:Integer類型,選定文本的首字符的位置,或者光標(biāo)所在位置。編輯框的第一個字符的序號是0。(6)SelLength屬性:Integer類型,被選定文本的長度。(7)SelText屬性:String類型,被選定的文本內(nèi)容。如果設(shè)置了SelStart屬性和SelLength屬性,則自動會選定一段文字,文字的內(nèi)容為SelText。(8)CharCase屬性:枚舉類型,ecNormal,表示不改變輸入字符的大小寫,ecLowerCase表示將輸入的字符中的英文轉(zhuǎn)化為小寫字符,ecUpperCase表示將輸入的字符中的英文轉(zhuǎn)化為大寫字符。(9)HideSelection屬性:Boolean類型,選定的文字是否以加強的背景顏色顯示。(10)PasswordChar屬性:默認(rèn)值是#0,此時,原樣顯示編輯框中的字符,如果將其設(shè)置為其它字符,如“*”,則編輯框中的所有字符都顯示為“*”(雖然顯示為“*”,但是Text屬性仍然不會改變),一般用于設(shè)置口令。2.Edit組件的方法(1)SetFocus:置焦點。(2)SelectAll:選定所有文本。3.Edit組件的主要事件(1)OnChange事件:編輯框的內(nèi)容發(fā)生改變。(2)OnEnter事件:編輯框得到焦點。(3)OnExit事件:編輯框失去焦點。(4)OnKeyPress事件:按鍵事件,參數(shù)Key表示所按下的字符,它返回的是一個字符。(5)OnKeyDown事件:鍵盤按下事件,Key為返回的按鍵(如’A’和’a’的Key都是65),還可以通過參數(shù)Shift檢測Shift、Ctrl、Alt等鍵是否被按下。(6)OnKeyUp事件:鍵盤松開事件。參數(shù)與OnKeyDown類似??梢詫ⅰ纠?-3】的程序改進(jìn)一下,編寫Edit2的OnKeyPress事件過程:procedureTForm1.Edit2KeyPress(Sender:TObject;varKey:Char);beginifkey=#13then//如果按回車鍵beginif(uppercase(edit1.Text)='ABC')and(edit2.Text='123')thenshowmessage('歡迎使用本系統(tǒng)')elsebeginshowmessage('口令或者用戶名錯');edit1.Text:='';edit2.Text:='';edit1.SetFocus;
end;end;end;說明:改進(jìn)后的程序在輸入用戶名和口令后無需按“確定”按鈕,直接在Edit2中按回車即可判斷用戶名和口令是否正確。4.Edit的應(yīng)用【例3-4】設(shè)計一個小學(xué)生加法練習(xí)器。練習(xí)器能隨機給出兩個兩位數(shù)的正整數(shù),要求寫出兩數(shù)之和,如果結(jié)果正確則提示“你真聰明”,如果答案錯誤則提示“錯誤,重做”。請編寫程序。程序設(shè)計步驟:(1)添加組件,在窗體中添加Edit1、Edit2和Edit3,添加Label1和Label2,添加Button1和Button2。設(shè)置Label1的Caption為“+”,Label2的Caption為“=”,設(shè)置Button1的Caption為“出題”,Button2的Caption為“判斷”。設(shè)置3個Edit的Text為空,并調(diào)整組件的位置和大小。界面如圖3-2所示。(2)編寫程序,如下:procedureTForm1.Button1Click(Sender:TObject);varx,y:integer;beginrandomize;x:=10+random(90);y:=10+random(90);//x,y是兩位數(shù)edit1.Text:=inttostr(x);edit2.Text:=inttostr(y);edit3.Text:='';edit3.SetFocus;//Edit3置空,并置焦點等待輸入結(jié)果end;
procedureTForm1.Button2Click(Sender:TObject);varz,i:word;beginz:=strtoint(edit3.Text);ifz=strtoint(edit1.Text)+strtoint(edit2.Text)theni:=messagedlg('你真聰明',mtinformation,[mbok],1)elsebegini:=messagedlg('錯誤,請重做',mterror,[mbok],1);edit3.Text:='';edit3.SetFocus;//錯誤后需要重做
endend;說明:如果本程序要求每次運行都出題10次,出題10次后,程序自動結(jié)束。這時可以借助一個屬性Tag,絕大多數(shù)組件都有Tag屬性,Tag屬性的初始值為0。一般可以把Tag看成一個整型的全局變量。修改后的程序如下:procedureTForm1.Button1Click(Sender:TObject);varx,y:integer;beginrandomize;x:=10+random(90);y:=10+random(90);//x,y是兩位數(shù)edit1.Text:=inttostr(x);edit2.Text:=inttostr(y);edit3.Text:='';edit3.SetFocus;//Edit3置空,并置焦點等待輸入form1.Tag:=form1.Tag+1;//初始值為0,每出一道題Tag加1end;procedureTForm1.Button2Click(Sender:TObject);varz,i:word;beginz:=strtoint(edit3.Text);ifz=strtoint(edit1.Text)+strtoint(edit2.Text)theni:=messagedlg('你真聰明',mtinformation,[mbok],1)elsebegini:=messagedlg('錯誤,請重做',mterror,[mbok],1);edit3.Text:='';edit3.SetFocus;//錯誤后需要重做
end;ifform1.Tag=10thenapplication.Terminate;end;說明:雖然讀者還沒有接觸到變量的作用域的相關(guān)知識,但是此處巧妙地利用Tag屬性解決了類似變量作用域的問題。在程序的很多地方,讀者都可以使用該屬性,希望讀者能夠舉一反三。3.2.3Memo組件Edit組件僅可以顯示單行文本,如果要顯示多行文本則顯得無能為力,要處理多行文本需要使用Memo組件。1.Memo的屬性。(1)Lines屬性:用于對Memo組件中的內(nèi)容進(jìn)行處理。單擊Lines屬性后的按鈕,打開“StringListEditor”對話框,在其中輸入多行字符串。Lines實際上是一個對象,它是一個數(shù)組,下標(biāo)從0開始。例如:s:=Memo1.Lines[3];表示將Memo1中第4行文本內(nèi)容賦值給變量s。Lines還有如下一些用法:Memo1.Lines.Add('ANewLine');//在最后添加一行Memo1.Lines.Delete(4);//刪除第5行Memo1.Lines.Insert(1,'InsertANewLine');//在第2行插入一行Memo1.Lines.Move(3,5);//將第4行移動到第6行(2)WantReturns屬性:Boolean屬性,值為True時按Enter鍵插入一個回車符,值為False時按Enter表示提交,如果想輸入回車符則需要按Ctrl+Enter鍵。(3)WantTabs屬性:值為True時,按Tab鍵插入一個Tab字符,值為False時按Tab鍵將改變或的焦點的組件。(4)ScrollBars屬性:控制Memo組件的滾動條,取值分別有ssNone(無滾動條)、ssHorizontal(只有水平滾動條)、ssVertical(只有垂直滾動條)和ssBoth(同時有水平與垂直滾動條)。(5)Modified屬性:確定Memo組件是否被修改了。2.Memo的應(yīng)用【例3-5】在Memo中輸入文字,按“提交”按鈕后,文字顯示在標(biāo)簽中。要求按回車鍵也可以將文本顯示在標(biāo)簽中。請編寫程序。分析:應(yīng)該將Memo1的WantReturns屬性設(shè)置為False,并且將“提交”按鈕的Default屬性設(shè)置為True。其他組件的屬性設(shè)置比較簡單,程序代碼也比較簡單。程序設(shè)計步驟:(1)添加組件Button1、button2、Memo1和Lable1到窗體。并設(shè)置組件的屬性,界面如圖3-3所示。圖3-3【例3-5】的用戶界面(3)編寫程序如下:procedureTForm1.Button1Click(Sender:TObject);beginlabel1.Caption:=memo1.Text;end;procedureTForm1.Button2Click(Sender:TObject);beginmemo1.Text:='';label1.Caption:='';end;(4)按F9鍵運行程序。如圖3-4所示。。圖3-4程序運行界面說明:這里將Memo1的WantReturns設(shè)置為False,并且設(shè)置Button1的Default為True,這樣設(shè)置后,在Memo1中輸入內(nèi)容后直接按回車鍵,相當(dāng)于單擊Button1(“提交”)按鈕。按“ESC”鍵相當(dāng)于按“取消”按鈕。3.2.4RichEdit組件RichEdit組件是基于WindowsRTF(RichTextFormat)格式的文本框,RichEdit是包含各種編輯格式的多行文本編輯器,它可以設(shè)置不同文本的格式,如顏色、字體、字號、下劃線、粗體、斜體、對齊方式等等。RichEdit組件位于Win32組件面板中。1.主要屬性(1)SelStart屬性、SelLength屬性、SelText屬性、WantReturns屬性、WantTabs屬性、ScrollBars屬性、Modified屬性、HideSelection等屬性。這些屬性和Edit組件和Memo組件類似。(2)SelAttributes屬性:選定文字的字體。下面的語句將字體對話框Fontdialog1中選定的字體賦給RichEdit1中選定的文本。還有一些用法將在后面章節(jié)詳細(xì)講解。Richedit1.SelAttributes.Assign(Fontdialog1.Font);(3)DefAttributes屬性:RichEdit默認(rèn)字體。下面的語句將RichEdit1默認(rèn)的字體賦給字體對話框FontDialog1。Fontdialog1.Font.Assign(Richedit1.DefAttributes);2.主要事件(1)OnChange事件:RichEdit組件中的內(nèi)容發(fā)生變化,觸發(fā)該事件。(2)OnSelectionChange事件:選定文本觸發(fā)該事件。3.主要方法(1)CopyToClipboard方法:復(fù)制到剪切板。(2)CutToClipboard方法:剪切到剪切板。(3)PasteFromClipboard方法:從剪切版粘貼,用剪切板上的內(nèi)容覆蓋選定的內(nèi)容。Lines對象的主要方法有:(1)SaveToFile方法:將RichEdit組件中的內(nèi)容保存。如下面語句可以將RichEdit1中的內(nèi)容保存到保存對話框Savedialog1所指定的文件名。Richedit1.Lines.SaveToFile(Savedialog1.FileName);(2)LoadFromFile方法:在RichEdit中打開一個文件。如下面的語句可以將打開對話框Opendialog1所指定的文件在RichEdit1中打開。Richedit1.Lines.LoadFromFile(Opendialog1.FileName);4.RichEdit組件的簡單應(yīng)用?!纠?-6】編制一個簡單的編輯器,要求該編輯器具有“復(fù)制”、“剪切”、“刪除”、“粘貼”、“取消”、“全選”等功能。分析:本程序?qū)⒁玫絉ichEdit組件,并且要用到RichEdit組件的一些方法和屬性。程序設(shè)計步驟:(1)添加組件RichEdit組件1個、Button組件6個到窗體,并調(diào)整大小和位置,界面如圖3-5所示。(2)屬性設(shè)置省略。(3)編寫代碼如下:procedureTForm1.Button1Click(Sender:TObject);beginrichedit1.CopyToClipboard;//復(fù)制end;procedureTForm1.Button2Click(Sender:TObject);beginrichedit1.CutToClipboard;//剪切end;procedureTForm1.Button3Click(Sender:TObject);beginrichedit1.SelText:='';//刪除end;procedureTForm1.Button4Click(Sender:TObject);beginrichedit1.PasteFromClipboard;//粘貼end;procedureTForm1.Button5Click(Sender:TObject);beginrichedit1.Undo;//取消end;procedureTForm1.Button6Click(Sender:TObject);beginrichedit1.HideSelection:=false;//選定文本反底顯示richedit1.SelectAll;//選定所有文本end;procedureTForm1.RichEdit1SelectionChange(Sender:TObject);beginifRichEdit1.SelLength=0thenbegin//如果未做選定,則復(fù)制、刪除、剪切按鈕無效button1.Enabled:=false;button2.Enabled:=false;button3.Enabled:=false;
endelsebegin//如果選定了文本,則復(fù)制、刪除、剪切按鈕有效button1.Enabled:=true;button2.Enabled:=true;button3.Enabled:=true;
endend;procedureTForm1.FormCreate(Sender:TObject);beginifRichEdit1.SelLength=0thenbegin//如果選定的文字為空,則復(fù)制、刪除、剪切按鈕無效button1.Enabled:=false;button2.Enabled:=false;button3.Enabled:=false;
endelsebegin//如果選定的文字不為空,則復(fù)制、刪除、剪切按鈕有效button1.Enabled:=true;button2.Enabled:=true;button3.Enabled:=true;endend;說明:雖然RichEdit沒有提供刪除方法,但是語句“richedit1.SelText:='';”的作用是將選定的文本置空,也就是刪除選定的文本。這里的空字符千萬不要寫成空格字符。
3.2.5Panel組件Panel面板是一個以多種三維效果顯示的矩形區(qū)域。它可以將窗體分成規(guī)則的幾塊,為窗體中的組件提供可視化的分組。Panel組件位于Standard選項卡中。1.
Panel的主要屬性如下:(1)Caption屬性:面板上顯示的標(biāo)題文字。(2)Align屬性:Panel的對齊方式,枚舉類型,有如表3-9所示的一些取值。例如,如圖3-6所示的Panel1的Anchors屬性值為[akRight,akTop,akBottom],則窗體變大的時候,Panel1到窗體右邊的距離不變,到窗體上邊的距離不變,到窗體下邊的距離不變,顯然Panel變高了。要說明的是,Anchors屬性是受Align屬性的影響的,例如,將Panel1的Align屬性設(shè)置為alLeft,顯然此時如果Anchor的值含有集合元素akTop和akBotton就沒有意義了。這點讀者自己可以去體會。2.Panel組件的使用【例3-7】Panel組件的使用。界面如圖3-7所示。步驟如下:(1)在窗體上添加命令按鈕Button1,Caption設(shè)置為“日期”,在窗體上添加Panel1,設(shè)置Panel1的Align屬性為默認(rèn)值alNone,設(shè)置Panel1的BevelOuter設(shè)置為bvRaised,調(diào)整Panel1的位置和大小。(2)在Panel1中添加Panel2,設(shè)置Panel2的Align屬性為alNone,設(shè)置Panel2的BevelOuter設(shè)置為bvLowered。調(diào)整Panel2的位置和大小。(3)編寫程序,如下:procedureTForm1.FormCreate(Sender:TObject);beginPanel2.Font.Size:=12;panel2.Font.Name:='宋體';Panel2.Caption:='聰明的程序員使用Delphi。';end;procedureTForm1.Button1Click(Sender:TObject);
varyear,month,day:word;begindecodedate(date,year,month,day);//將date的年、月、日分別保存到其后的3個變量中panel2.Caption:='今天是'+inttostr(year)+'年'+inttostr(month)+'月'+inttostr(day)+'日。';end;說明:很多程序的界面使用Panel修飾后,都可以使得界面更加美觀。3.2.6Splitter組件如果想建立一個在運行時可以自由改變區(qū)域大小的程序,這時候可以使用Spitter組件。Splitter組件雖然不是分組組件,但是它經(jīng)常和Panel組件一起配合使用,所以在本節(jié)中介紹該組件。Splitter組件還經(jīng)常和Memo組件、RichEdit組件等配合使用。Splitter組件位于Additional組件面板中。1.Splitter組件的主要屬性如下(1)Align屬性:屬性值是枚舉類型,值為alLeft或者alRight的時候,組件可以水平移動,控制左右兩塊區(qū)域改變大小,此時Splitter的Height屬性無意義。值為alTop和alBottom時,組件可以垂直移動,控制垂直的兩塊區(qū)域改變大小,此時Splitter組件的Width屬性無意義。Align屬性值一般不設(shè)置為alNone和alClient。(2)Beveled屬性:Boolean型,值為True時Splitter組件呈凹形,默認(rèn)值為False時,此時Splitter組件呈凸形。(3)Height屬性和Width屬性:高度和寬度屬性,當(dāng)Align屬性值為alLeft或者alRight的時候,Width屬性有效,可以設(shè)置分割條的寬度,此時Height屬性無效,分割條的高度和Parent的高度相同;當(dāng)Align屬性值為alTop和alBottom時,組件Height屬性有效,組件可以設(shè)置高度,此時Width屬性無效,組件的寬度和Parent的寬度相同。2.Splitter組件和Panel組件的使用【例3-8】Splitter組件和Panel組件的使用。步驟如下:(1)新建VCLFormsApplication—DlphiforWin32,在窗體中添加Memo1,設(shè)置它的Align屬性為alLeft,這樣Memo1位于窗體的左邊。(2)在窗體中添加Splitter1,設(shè)置其Align屬性為alLeft,這樣Splitter就緊貼左邊Memo1組件,設(shè)置Splitter1的Width為2。(3)在右邊空白處添加Panel1,設(shè)置Panel1的Align屬性為alClient,Panel1就占據(jù)了右邊剩下的所有區(qū)域。(4)在Panel1中添加Memo2,設(shè)置它的Align屬性為alBottom,這樣Memo2就占據(jù)窗體的右下角(Panel1的下面)。(5)在Panel1種添加Splitter2,設(shè)置Splitter2的Align屬性為alBottom,這樣Splitter2就緊貼在Memo2的上面,并設(shè)置Splitter2的Height屬性為2。(6)在Panel1中添加Memo3,設(shè)置Memo3的Align屬性為alClient。這樣Memo3就占據(jù)了Panel1剩余的空間。(7)設(shè)置Memo1、Memo2和Memo3的Lines屬性值,顯示如圖3-8所示文字。程序運行,界面如圖3-8所示,可以改變移動Splitter來改變3個Memo的區(qū)域的大小。3.2.7GroupBox組件組框GroupBox是又一個用于分組的組件,它類似于面板Panel,但是其Caption顯示在邊框上,這點與面板Panel有些不同。GroupBox不僅可以用于美觀,還可以用于協(xié)調(diào)不同組的組件之間協(xié)調(diào)操作,因此GroupBox在單選框和復(fù)選框中用得很多,我們將在后面章節(jié)中講解這點。GroupBox組件位于Standard組件面板上。3.2.8Button組件Button組件是最常見的組件之一,位于Standard組件面板中。1.Button的主要屬性(1)Caption屬性:組件的標(biāo)題文字,可以使用符號“&”來設(shè)置按鈕的加速鍵,前面已經(jīng)使用到。(2)Default屬性:Boolean型,決定按鈕是否為默認(rèn)按鈕,如果值為True則按鈕是默認(rèn)按鈕,值為False時不是默認(rèn)按鈕,如果是默認(rèn)按鈕,單擊按鈕和按會車鍵是等價的?!纠?-5】中用到過這個屬性。(3)Cancel屬性:Boolean型,決定按鈕是否為取消按鈕。如果Cancel屬性值為True則該按鈕是取消按鈕,否則不是取消按鈕。如果是取消按鈕,則按Esc鍵和單擊該按鈕等價。2.Button的主要事件主要事件有OnClick等事件,下列情形之一會觸發(fā)OnClick事件:(1)單擊按鈕。(2)按鈕獲得焦點的時候按回車鍵或者空格鍵。(3)執(zhí)行語句Button對象.Click。3.2.9BitBtn組件BitBtn組件也是最常見的組件之一,位于Additional組件面板中。該組件可以在按鈕中顯示一幅格式為bmp的圖片,使得按鈕更加美觀和形象。1.BitBtn組件的主要屬性除了有Caption、Default、Cancel等屬性之外,BitBtn還有如下一些主要屬性。(1)Glyph屬性:為按鈕指定一個圖標(biāo)文件(擴展名為bmp),該圖標(biāo)顯示在按鈕表面,Tbitmap型。(2)Kind屬性:枚舉型,決定按鈕的類型。取值有bkCustom、bkOK、bkCancel、bkHelp、bkYes、bkNo、bkClose、bkAbort、bkRetry、bkIgnore、bkAll。默認(rèn)值為bkCustom,表示種類是自定義類型,位圖由Glyph決定。其它值分別對應(yīng)不同的位圖,并將ModalResult自動設(shè)置為相應(yīng)的值。如bkOK對應(yīng)mrOK,bkYes對應(yīng)mrYes等等。2.BitBtn按鈕的使用【例3-9】在窗體上添加標(biāo)簽Label1,位圖按鈕BitBtn1~BitBtn11。分別設(shè)置它們的Kind屬性,設(shè)置BitBtn6的Caption為“保存”,Kind為bkCustom,設(shè)置Glyph屬性為一個圖標(biāo)。界面如圖3-9所示。
圖3-9各種Kind類型的BitBtn按鈕編寫程序:procedureTForm1.BitBtn1Click(Sender:TObject);beginlabel1.Caption:='你按了Abort按鈕';end;或者:procedureTForm1.BitBtn1Click(Sender:TObject);beginifModalResult=mrAbort//返回mrAbort表示按了Abort類型的按鈕thenlabel1.Caption:='你按了Abort按鈕';end;說明:其它按鈕的代碼類似,要注意的是BitBtn4按鈕(Close按鈕),不需要編寫代碼,單擊它即可關(guān)閉程序。3.2.10SpeedButton組件SpeedButton加速按鈕組件也是最常見的組件之一,位于Additional組件面板中。使用它可以設(shè)計若干組互斥的按鈕選項,只需要將多個SpeedButton的GroupIndex屬性設(shè)置為相同且不為0,則這些按鈕成為一組,成為一組的按鈕每次僅可以按下一個。SpeedButton不接受輸入焦點,沒有切換次序。1.SpeedButton的主要屬性與Button類似,特殊屬性如下(1)Down屬性:按鈕處于按下狀態(tài)Down值為True,否則Down值為False。(2)Flat屬性:Boolean型,當(dāng)值為False時,外觀是立體按鈕;值為True時是平面按鈕,外觀和標(biāo)簽一樣,只有鼠標(biāo)移上去的時候才顯示為立體。(3)GroupIndex屬性:若值大于0,則相同值的若干個SpeedButton按鈕協(xié)同工作,任何時刻這些按鈕至多只能有一個被按下。值為0表示該按鈕不與其它按鈕協(xié)同工作。(4)Glyph屬性:按鈕上顯示的圖片,與BitBtn類似。2.SpeedButton加速按鈕的應(yīng)用【例3-10】利用SpeedButton按鈕設(shè)置字體應(yīng)用程序。界面如圖3-10所示。圖3-10SpeedButton按鈕舉例步驟如下:(1)在窗體中添加組件Label1、SpeedButton1~SpeedButton7、FontDialog1等組件。調(diào)整這些組件的大小和位置。(2)設(shè)置這些組件的屬性,參見表3-12。表3-12SpeedButton按鈕的屬性設(shè)置表(3)本題可以將SpeedButton1~SpeedButton3的OnClick事件過程寫在一起。方法是:同時選定SpeedButton1~SpeedButton3,然后在“ObjectInspector”的“Events”選項卡中,選定“OnClick”事件,雙擊其右邊的空格,右邊空格顯示“SpeedButton1Click”(表示單擊SpeedButton1~SpeedButton3都會執(zhí)行TForm1.SpeedButton1Click過程),并進(jìn)入代碼編輯器。編寫如下代碼:procedureTForm1.SpeedButton1Click(Sender:TObject);//單擊SpeedButton1~SpeedButton3都會執(zhí)行TForm1.SpeedButton1Click過程//此處的代碼也可以寫成3個過程。beginif(senderastspeedbutton).caption='黑色'//點擊了“黑色”thenlabel1.Font.Color:=rgb(0,0,0);if(senderastspeedbutton).caption='紅色'//點擊了“紅色”thenlabel1.Font.Color:=rgb(255,0,0);if(senderastspeedbutton).caption='藍(lán)色'//點擊了“藍(lán)色”thenlabel1.Font.Color:=rgb(0,0,255);end;(4)繼續(xù)編寫SpeedButton4~SpeedButton7的代碼,如下:procedureTForm1.SpeedButton4Click(Sender:TObject);beginlabel1.Font.Size:=10;end;procedureTForm1.SpeedButton5Click(Sender:TObject);beginlabel1.Font.Size:=15;end;procedureTForm1.SpeedButton6Click(Sender:TObject);beginlabel1.Font.Size:=20;end;procedureTForm1.SpeedButton7Click(Sender:TObject);beginfontdialog1.Font.Assign(label1.Font);//字體對話框初始字體與標(biāo)簽的字體一樣iffontdialog1.Executethenlabel1.Font.Assign(fontdialog1.Font)//點擊字體對話框的確定按鈕后,標(biāo)簽取字體對話框的字體end;SpeedButton4~SpeedButton6的程序代碼也可以寫成一個過程。方法和SpeedButton1~SpeedButton3類似。(5)運行結(jié)果,見圖3-11所示。說明:本處將顏色按鈕分成一組,將字大小按鈕分成一組,而字體不需要分組。這樣分組后就可以同時選擇顏色和大小了。圖3-11SpeedButton程序舉例3.2.11CheckBox組件CheckBox組件是復(fù)選按鈕組件,它是一個帶標(biāo)簽的方框(),表示被選中,表示未被選中。選中的時候Checked屬性值為True,未被選中的時候Checked屬性值為False,默認(rèn)值為False。多個復(fù)選按鈕之間互不影響。CheckBox組件在Standard組件面板中。CheckBox組件的事件有OnClick事件,下列情況下發(fā)生OnClick事件:(1)單擊CheckBox組件(Checked屬性的值也會自動改變)。(2)用代碼改變Checked屬性的值。CheckBox組件的特點是每次單擊都會改變Checked屬性的值,并觸發(fā)OnClick事件。3.2.12RadioButton組件RadioButton組件是單選按鈕組件,它可以用于顯示一組互斥的選項。同一組單選按鈕中最多只能有一個單選按鈕被選中,一旦選定某個單選按鈕,則此前被選定的那個單選按鈕變?yōu)槲催x定狀態(tài)。如果想多選,可以配合GroupBox組件來實現(xiàn),可以把GroupBox中的多個Radiobutton按鈕看成一組,有幾個GroupBox就將Radiobutton分成幾組。RadioButton按鈕在Standard組件面板中。RadioButton的Checked屬性用于表示單選按鈕是否被選中。表示被選中,Checked屬性值為True,表示未被選中,Checked屬性值為False,默認(rèn)值為False。RaidoButton的事件主要有OnClick事件,下列情況下觸發(fā)OnClick事件:(1)單擊RadioButton組件使得其Checked屬性值從False變?yōu)門rue。(2)通過代碼使得其Checked屬性值從False變?yōu)門rue。RadioButton組件的特點是只有單擊未被選中的按鈕才會觸發(fā)OnClick事件,并將RadioButton的Checked屬性值從False改變?yōu)門rue?!纠?-11】利用CheckBox和RadioButton組件編寫字體設(shè)置程序。界面如圖3-12所示。步驟如下:(1)在窗體中添加Label1、GroupBox1、GroupBox2、GroupBox3。設(shè)置Caption屬性分別為“字體設(shè)置”、“大小”、“顏色”和“字形”,調(diào)整好這4個組件的大小和位置。(2)在GroupBox1中添加RadioButton1、RadioButton2和RadioButton3,這樣這3個單選按鈕就分成一組了。設(shè)置這3個組件的Caption分別為“10號”、“20號”和“30號”。(3)在GroupBox2中添加RadioButton4、RadioButton5和RadioButton6,這樣這3個單選按鈕就分成一組了。設(shè)置這3個組件的Caption分別為“黑色”、“紅色”和“藍(lán)色”。(4)在GroupBox3中添加CheckBox1、CheckBox2和CheckBox3,設(shè)置這3個復(fù)選按鈕的Caption分別為“粗體”、“斜體”和“下劃線”。說明:GroupBox1和GroupBox2的作用是分組,使得RadioButton1、RadioButton2和RadioButton3成為一組,而RadioButton4、RadioButton5和RadioButton6也成為一組,這樣就可以提供多選了。GroupBox3的作用是美觀界面,復(fù)選按鈕并不需要分組協(xié)調(diào)工作。(5)編寫程序:procedureTForm1.FormCreate(Sender:TObject);begin//程序運行最開始字號是10號,顏色是黑色radiobutton1.Checked:=true;radiobutton4.Checked:=true;end;procedureTForm1.RadioButton1Click(Sender:TObject);beginlabel1.Font.Size:=10;end;procedureTForm1.RadioButton2Click(Sender:TObject);beginlabel1.Font.Size:=15;end;procedureTForm1.RadioButton3Click(Sender:TObject);beginlabel1.Font.Size:=20;end;procedureTForm1.RadioButton4Click(Sender:TObject);beginlabel1.Font.Color:=rgb(0,0,0)end;procedureTForm1.RadioButton5Click(Sender:TObject);beginlabel1.Font.Color:=rgb(255,0,0)end;procedureTForm1.RadioButton6Click(Sender:TObject);beginlabel1.Font.Color:=rgb(0,0,255)end;procedureTForm1.CheckBox1Click(Sender:TObject);beginifCheckBox1.Checkedthenlabel1.Font.Style:=label1.Font.Style+[fsbold]elselabel1.Font.Style:=label1.Font.Style-[fsbold]end;procedureTForm1.CheckBox2Click(Sender:TObject);beginifCheckBox2.Checkedthenlabel1.Font.Style:=label1.Font.Style+[fsitalic]elselabel1.Font.Style:=label1.Font.Style-[fsitalic]end;procedureTForm1.CheckBox3Click(Sender:TObject);beginifCheckBox3.Checkedthenlabel1.Font.Style:=label1.Font.Style+[fsunderline]elselabel1.Font.Style:=label1.Font.Style-[fsunderline]end;分析:單選按鈕的OnClick事件過程中不需要使用if語句,而復(fù)選按鈕的OnClick事件過程中需要使用if語句,這與二者的OnClick事件觸發(fā)的規(guī)律是有關(guān)系的。設(shè)置字形的時候用到了集合的并運算和差運算,這并不難理解。3.2.13ListBox組件ListBox組件以列表的形式顯示多項供用戶選擇。如果不能顯示全部項,還可以添加滾動條使用戶通過上下滾動條來查閱所有項。1.ListBox組件的主要屬性(1)Items屬性:列表選項的集合,String類型數(shù)組,如ListBox1.Items[3]表示ListBox1的第4項。關(guān)于Items有如下一些用法:ListBox1.Items.Add(‘添加一行’);//在最后添加一項ListBox1.Items.Delete(5);//刪除第6項ListBox1.Items.Insert(3,‘插入一行’);//在第4行之前插入一行ListBox1.Items.Move(3,5);//將第4行移動到第6行St1:=ListBox1.Items[3];//將第4行的字符賦值給字符變量st1Memo1.Lines:=Listbox1.Items;//將Listbox1中的所有項顯示在Memo1中n:=ListBox1.Items.count;//n為ListBox1的項數(shù)ListBox1.Items.Clear;//清空Listbox1中的所有項(2)ItemsIndex屬性:選定項的索引值,值為i時表示選定了第i+1項,值為-1表示未選定任何項。例如:ListBox1.Items[ListBox1.ItemsIndex];//當(dāng)前選中的項的字符串ListBox1.ItemIndex:=3;//選中第4項(3)Sorted屬性:Boolean型,值為True時表示選項排序,值為False時表示選項不排序。(4)Columns屬性:Imteger型,列表的列數(shù)。(5)MultiSelect屬性:Boolean型,是否允許選擇多項。(6)Selected屬性:用來設(shè)置或者返回某項是否被選中了。關(guān)于Selected屬性的用法請看:listbox1.Selected[2]:=true;//選中第3項iflistbox1.Selected[2]thenbegin…end;//如果第3項被選中就執(zhí)行begin和end間的語句2.ListBox組件的主要方法Clear方法:清除ListBox中的所有項數(shù)。下面兩種方法均可。ListBox1.Items.Clear;ListBox1.clear;3.ListBox組件的事件(1)OnClick事件:選擇某項時觸發(fā)該事件。(2)OnEnter事件:得到焦點時觸發(fā)該事件。(3)OnExit事件:失去焦點時觸發(fā)該事件。4.ListBox組件的應(yīng)用【例3-12】在列表框中選擇自己喜歡的城市。界面如圖3-13所示。步驟如下:(1)在窗體中添加標(biāo)簽Label1、Label2、命令按鈕4個分別是Button1~Button4(從上到下),添加兩個列表框ListBox1(左邊)和ListBox2(右邊)。(2)設(shè)置這些組件的屬性,屬性參見表3-13。說明:如果某個城市沒有被選中,則i加1測試下一個城市,如果某個城市被選中,則從左邊列表框中刪除該城市,細(xì)心的讀者會注意到刪除某個城市(項)后i并沒有加1。原因是相同的i值,在完成刪除操作之前和之后是表示不同的項的。procedureTForm1.Button1Click(Sender:TObject);
vari:integer;begini:=0;//從第一項開始whilei<listbox1.Items.Countdo//直到最后一項iflistbox1.Selected[i]then//判斷每一項是否被選中,若被選中則執(zhí)行begin和end間的語句
beginlistbox2.Items.Add(listbox1.Items[i]);//將選中的項添加到listbox2listbox1.Items.Delete(i);//并從listbox1中刪除
endelsei:=i+1;//測試下一項end;繼續(xù)編寫下面的代碼:procedureTForm1.Button2Click(Sender:TObject);vari:integer;beginfori:=0tolistbox1.Items.Count-1dolistbox2.Items.Add(listbox1.Items[i]);//將listbox1中所有項添加到右邊listbox2listbox1.Items.Clear;//清除listbox1中所有項end;procedureTForm1.Button3Click(Sender:TObject);
vari:integer;begini:=0;
whilei<listbox2.Items.Countdoiflistbox2.Selected[i]then
beginlistbox1.Items.Add(listbox2.Items[i]);listbox2.Items.Delete(i);
endelsei:=i+1;end;procedureTForm1.Button4Click(Sender:TObject);vari:integer;beginfori:=0tolistbox2.Items.Count-1dolistbox1.Items.Add(listbox2.Items[i]);listbox2.Items.Clear;end;3.2.14ComboBox組件ComboBox組件是組合框組件,兼有Edit組件和ListBox組件的功能,用戶可以直接輸入文本或者在列表中選擇選項。它具有很多和ListBox相同的屬性,另外ComboBox還具有一些自己獨特的屬性。1.ComboBox組件的特殊屬性(1)DropDownCount屬性:下拉部分可以顯示的項數(shù),如果不能顯示全部項數(shù),可以通過滾動條來顯示其它選項。默認(rèn)值是8。(2)SelText屬性:編輯區(qū)選擇的文本。(3)SelLength屬性:編輯區(qū)選定文本的長度。(4)SelStart屬性:編輯區(qū)選定文字的起點,編輯區(qū)第一個字符位置是0。(5)Style屬性:ComboBox的風(fēng)格。常見的取值有:csDropDown:可編輯且有下拉列表。csDropDownList:編輯框不可編輯,有下拉列表框。CsSingle:編輯框可以編輯,下拉列表框直接顯示出來(不用下拉)。(6)Text屬性:ComboBox中的文本。2.ComboBox組件的方法ComboBox組件具有ListBox組件的方法和Edit組件的方法,如(1)Clear方法:與ListBox有一些差別,如:ComboBox1.Clear;//清除ComboBox1中的編輯框和列表框中所有內(nèi)容ComboBox1.Items.Clear;//清除列表項中所有內(nèi)容(2)SelectAll方法:選定編輯框中所有內(nèi)容。(3)SetFocus方法:ComboBox得到焦點。還具備其它一些Edit和ListBox組件的方法,在此不再贅述。3.ComboBox組件的事件ComboBox組件具備Edit組件和ListBox組件的一些事件。如:(1)OnClick事件:鼠標(biāo)單擊事件,鼠標(biāo)單擊選擇某項。(2)OnChange事件:編輯框內(nèi)容被改變。(3)OnKeyPress事件:按鍵事件,參數(shù)與Edit的按鍵事件相同。(4)OnKeyUp事件和OnKeyDown事件:類似Edit的相應(yīng)事件。(5)OnDropDown事件:當(dāng)用戶單擊右邊箭頭按鈕即打開下拉列表,此時觸發(fā)該事件。4.ComboBox組件的應(yīng)用【例3-13】字體設(shè)置程序,窗體上有編輯框Edit1,要求通過Listbox1和Combobox1來設(shè)置其字體和大小,界面如圖3-14所示。請編寫程序完成。分析:我們希望編寫一個質(zhì)量較高的程序,如少出錯、界面友好、美觀、操作方便等等。為了操作方便,本程序不僅可以選擇字號,還允許用戶直接輸入字號。在防止出錯方面,程序要求用戶在輸入字號的時候禁止非數(shù)字字符的輸入。另外還禁止設(shè)置40號以上的字號(太大了,影響美觀)。本程序用到OnKeyPress、OnClick等事件。步驟如下:(1)在窗體上添加組件Edit1、Label1、Label2、ComboBox1和Listbox1。簡單設(shè)置屬性,并調(diào)整組件的大小和位置。(2)根據(jù)上面的分析,編寫如下代碼:procedureTForm1.FormCreate(Sender:TObject);beginlistbox1.Items:=screen.Fonts;//在ListBox1中顯示字體combobox1.Items.Add('8');//添加字號combobox1.Items.Add('12');combobox1.Items.Add('16');combobox1.Items.Add('20');combobox1.Items.Add('24');combobox1.Items.Add('28');combobox1.Items.Add('32');combobox1.Items.Add('36');combobox1.Items.Add('40');//最大字大小為40號字combobox1.Text:=combobox1.Items[0];//ComboBox1編輯框中顯示8號字end;procedureTForm1.ComboBox1KeyPress(Sender:TObject;varKey:Char);begin//在編輯框中輸入字號ifnot((key>='0')and(key<='9')or(key=#8)or(key=#13))thenkey:=#0;//key:=#0表示什么也不錯,#0是空字符//禁止'0'~'9'、BackSpace(#8)和回車(#13)之外的鍵輸入if(length(combobox1.Text)>0)and(key=#13)and(strtoint(combobox1.Text)<=40)thenedit1.Font.Size:=strtoint(combobox1.Text)//編輯框不為空,并且輸入的數(shù)字小于或者等于40,并且按下回車鍵end;procedureTForm1.ComboBox1Click(Sender:TObject);beginedit1.Font.Size:=strtoint(combobox1.Text)//直接選擇字號end;procedureTForm1.ListBox1Click(Sender:TObject);beginedit1.Font.Name:=listbox1.Items[listbox1.ItemIndex];//選擇字體,listbox1.Items[listbox1.ItemIndex]為用戶在列表框中選擇的項end;(3)運行程序,界面如圖3-15所示。圖3-15字體設(shè)置運行界面說明:本程序TForm1.ComboBox1KeyPress中的代碼非常實用,在最大程度上防止了錯誤的出現(xiàn)。因為輸入非數(shù)字字符會引起錯誤的出現(xiàn),空白也會出錯,本程序可以防止這些情況的發(fā)生。本程序的巧妙之處還有允許按BackSpace鍵,提供輸入錯誤后的修改可能。3.2.15計時器Timer組件計時器組件(Timer)是一個非可視化的組件,它能定時觸發(fā)OnTimer事件。如果想定時執(zhí)行某些語句,可以考慮使用Timer組件。Timer組件在System組件面板上。1.Timer組件的屬性(1)Enabled屬性:當(dāng)值為True時,打開定時器;當(dāng)Enabled屬性值為False時,Timer組件關(guān)閉計時器。默認(rèn)值為True。(2)Interval屬性:控制OnTimer事件發(fā)生的時間間隔,單位是毫秒,類型是Integer類型。將Interval屬性值設(shè)置為0相當(dāng)于關(guān)閉計時器。Interval的默認(rèn)值是1000,即1秒鐘。2.Timer組件的事件OnTimer事件:當(dāng)Timer組件有效時,它每隔Interval毫秒觸發(fā)OnTimer事件,執(zhí)行相應(yīng)的程序。3.Timer組件的程序舉例【例3-14】設(shè)置一個滾動字幕,讓一些字符從下向上滾動。分析:為了控制字符向上滾動,顯然要使用計時器來控制字符滾動的快慢。并設(shè)置其Interval用于控制時間間隔,時間間隔越短,字幕滾動越快。步驟如下:(1)添加組件,添加Timer1,添加Label1,并設(shè)置字號為12號,設(shè)置字體為“宋體”,調(diào)整好Label1的大小和位置。設(shè)置Timer1的Interval為10。界面如圖3-16所示。圖3-16滾動字幕程序界面(2)根據(jù)分析,編寫代碼如下:在TForm1.FormCreate中編寫代碼實現(xiàn)程序運行一開始就顯示李白的“靜夜思”的功能。procedureTForm1.FormCreate(Sender:TObject);beginlabel1.Caption:='靜夜思'+chr(13);label1.Caption:=label1.Caption+'床前明月光,'+chr(13);label1.Caption:=label1.Caption+'疑似地上霜;'+chr(13);label1.Caption:=label1.Caption+'舉頭望明月,'+chr(13);label1.Caption:=label1.Caption+'低頭思故鄉(xiāng)。'end;Chr(13)表示換一行,在Timer1Timer事件過程中編寫代碼實現(xiàn)字幕滾動功能。procedureTForm1.T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF(陜) 070-2021 螺紋深度規(guī)校準(zhǔn)規(guī)范
- JJF(陜) 021-2020 萬用量規(guī)校準(zhǔn)規(guī)范
- 幼兒園小班探索未來的活動計劃
- 《信用證種類》課件
- 社團(tuán)活動的數(shù)字化轉(zhuǎn)型探索計劃
- 護(hù)理部患者安全管理措施計劃
- 班級自主管理的實施案例研究計劃
- 少先隊大隊委員競選講義模板
- 《設(shè)備的開孔和附》課件
- 《酒店企業(yè)文化培訓(xùn)》課件
- 2024年黑龍江省龍東地區(qū)中考數(shù)學(xué)試題含答案
- 劉潤年度演講2024
- 小學(xué)生講海軍司令肖勁光的紅色故事肖勁光先進(jìn)事跡學(xué)習(xí)
- 養(yǎng)老院的經(jīng)營規(guī)劃方案
- 人教版英語初二上學(xué)期試題及答案指導(dǎo)(2024年)
- 期末+(試題)+-2024-2025學(xué)年譯林版(三起)(2024)英語三年級上冊
- 2023年農(nóng)機專業(yè)合作社調(diào)研報告(五篇)
- 2024年秋季新人教版七年級上冊地理全冊導(dǎo)學(xué)案(2024年新教材)
- TCMAM Z25-2024“卡洛甘露”藏浴(瀧沐)質(zhì)量標(biāo)準(zhǔn)
- 人工智能生成內(nèi)容的著作權(quán)侵權(quán)風(fēng)險與侵權(quán)責(zé)任分配
- 2024年高考英語試題(新高考Ⅱ卷) 含解析
評論
0/150
提交評論