版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章窗體和基本組件在程序設(shè)計(jì)中,程序界面是非常重要的,界面是否美觀、友好給用戶的是第一印象。程序界面元素主要有窗體和基本組件。窗體是應(yīng)用程序的操作界面,程序的操作元素都必須添加到窗體上,沒有窗體程序的框架就無法建起。而基本組件則是用戶與應(yīng)用程序交互的工具,有了這些基本的常見的組件用戶才能夠方便操作程序,程序才能夠響應(yīng)用戶的請(qǐ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ù)窗體的大小位置等操作??梢栽诖绑w標(biāo)題欄中顯示窗體的標(biāo)題文字。邊框可以用于調(diào)整窗體的大小。工作區(qū)是窗體存放組件的位置。下面以建立VCLFormsApplication為例講述窗體,WindowsFormsAppication中的窗體類似于VCLFormsApplication中的窗體。1.窗體的屬性窗體的屬性用來描述窗體的高低、長(zhǎng)寬、顏色、邊框的,主要屬性有如下一些。(1)Name屬性和Caption屬性Name屬性,對(duì)象的名稱屬性,它用來唯一標(biāo)識(shí)對(duì)象,一個(gè)程序中不同對(duì)象的名稱是不能夠相同的。系統(tǒng)是根據(jù)對(duì)象的名稱來識(shí)別不同對(duì)象的。對(duì)象的名稱最好要做到見名知義,如Form1表示窗體,而Edit1表示文本框。Caption屬性,窗體的標(biāo)題文字,是字符類型。默認(rèn)情況下,窗體的Caption屬性是與Name屬性是相同的??梢孕薷拇绑w的標(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時(shí)窗體有效,此時(shí)窗體可以響應(yīng)各種事件,值為False時(shí)窗體無效,窗體不響應(yīng)事件。(4)Visible屬性窗體是否顯示,值為True時(shí)窗體顯示,值為False時(shí)窗體不顯示。(5)Color屬性窗體的顏色,顏色可以使用rgb函數(shù)來表示,也可以使用類似的clbackground等枚舉值。(6)Font屬性窗體的字體屬性,包括字的大小、顏色、下劃線、刪除線、粗體和斜體等。單擊屬性font后面的省略號(hào)按鈕,出現(xiàn)系統(tǒng)設(shè)置字體對(duì)話框。(7)Align屬性Align屬性用來決定窗體在屏幕中的對(duì)齊方式,該屬性是枚舉類型,其具體取值及其含義參見表3-1。2.窗體的事件窗體的事件很多,常用的事件有如下一些。(1)OnCreate事件:建立窗體時(shí)首先觸發(fā)該事件,一般把程序的初始化代碼寫在OnCreate事件過程中。(2)OnShow事件:顯示窗體時(shí),觸發(fā)該事件。(3)OnPaint事件:重畫窗體事件,窗體改變大小,窗體被遮蓋時(shí)觸發(fā)該事件。(4)OnActivate事件:激發(fā)窗體的時(shí)候(窗體得到焦點(diǎn))觸發(fā)該事件。(5)OnClose事件和OnCloseQuery事件:關(guān)閉窗體時(shí)觸發(fā)這兩個(gè)該事件。當(dāng)窗體要關(guān)閉時(shí),首先觸發(fā)OnCloseQuery事件,該事件處理過程中有一個(gè)Boolean類型的參數(shù)CanClose,默認(rèn)值為True,表示窗體可以關(guān)閉,當(dāng)CanClose的值為False時(shí)窗體不能關(guān)閉,不會(huì)觸發(fā)OnClose事件。如果在OnCloseQuery事件過程中設(shè)置CanClose的值為False則窗體可以關(guān)閉,接下來將觸發(fā)OnClose事件。在Onclose事件處理過程中,有一個(gè)參數(shù)Action,用來決定關(guān)閉窗體的實(shí)際操作。Action的取值和意義參照表3-6所示。3.窗體的方法窗體的方法很多。常用的方法主要有如下幾個(gè)。(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ùn)行時(shí),窗體位于屏幕中央,請(qǐng)編寫程序。分析,本程序應(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事件過程,有時(shí)候關(guān)閉程序的時(shí)候彈出對(duì)話框提示是否關(guān)閉窗口。請(qǐng)編寫程序。分析:本程序可以使用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//點(diǎn)擊“是”按鈕thencanclose:=true//關(guān)閉窗口,將觸發(fā)OnClose事件elsecanclose:=false//不關(guān)閉窗口,不會(huì)觸發(fā)OnClose事件end;說明:點(diǎn)擊Button1按鈕或者直接點(diǎn)擊窗體右上角的關(guān)閉按鈕程序?qū)⒂|發(fā)Form1的OnCloseQuery事件,程序提示“是否關(guān)閉窗口?”,選擇“yes”可以關(guān)閉窗口,選擇“no”不關(guān)閉窗口。說明:點(diǎn)擊Button1按鈕或者直接點(diǎn)擊窗體右上角的關(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;說明:點(diǎn)擊Button1按鈕或者直接點(diǎn)擊窗體右上角的關(guān)閉按鈕,此時(shí)觸發(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é)將講述最常見的幾個(gè)VCL可視化組件。其中標(biāo)簽、單行文本框、多行編輯框是文本類組件,Panel、Splitter、GroupBox等組件用于分組,Button、BitBtn、SpeedButton、CheckBox、RadioButton和RadioGroup則屬于按鈕類組件。根據(jù)用戶建立的是WindowsForms應(yīng)用程序還是VCLForms應(yīng)用程序,系統(tǒng)會(huì)自動(dòng)切換到相應(yīng)的組件面板。3.2.1Label組件Label標(biāo)簽是最常見的文本顯示組件,與文本框不同的是,文本框可以編輯,標(biāo)簽運(yùn)行之后就不能夠直接編輯了。因此它主要用于靜態(tài)的文本顯示。Label組件位于Standard組件面板中。Label標(biāo)簽是最常見的文本顯示組件,與文本框不同的是,文本框可以編輯,標(biāo)簽運(yùn)行之后就不能夠直接編輯了。因此它主要用于靜態(tài)的文本顯示。Label組件位于Standard組件面板中。
1.Label的屬性(1)Caption屬性:標(biāo)簽上顯示的文字,如果Caption屬性中含有字符“&”,那么該字符之后的第一個(gè)字符為加速鍵。(2)FocusControl屬性:按下加速鍵時(shí),獲得焦點(diǎn)的組件。(3)AutoSize屬性:Boolean型,決定標(biāo)簽是否隨文字的變化而改變標(biāo)簽大小。(4)Alignment屬性:標(biāo)簽的對(duì)齊方式,有3個(gè)枚舉值,分別是左對(duì)齊、居中對(duì)齊、右對(duì)齊。(5)Layout屬性:標(biāo)簽的對(duì)齊方式,有3個(gè)枚舉值,分別是上對(duì)齊、居中對(duì)齊、右對(duì)齊。(6)WordWrap屬性:Boolean型,是否換行顯示。(7)Transparent屬性:Boolean型,背景是否透明。2.Label的應(yīng)用【例3-3】編寫一個(gè)密碼登錄框程序。程序設(shè)計(jì)步驟:(1)程序可以使用標(biāo)簽、編輯框、命令按鈕等等,界面設(shè)計(jì)如圖3-1所示。(3)編寫程序如下:確定按鈕的Button1的OnClick事件過程:procedureTForm1.Button1Click(Sender:TObject);beginif(uppercase(edit1.Text)='ABCDEF')and(edit2.Text='123')thenshowmessage('歡迎使用本系統(tǒng)')elsebeginshowmessage('口令或者用戶名錯(cuò)');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)編輯框得到焦點(diǎn)的時(shí)候,是否自動(dòng)選定文本。值為True時(shí)當(dāng)編輯框得到焦點(diǎn)自動(dòng)選動(dòng)文本框中的文字,值為False時(shí)編輯框得到焦點(diǎn)不選定文本框中的文本。(3)Enabled屬性:Boolean類型,編輯框是否有效,值為True時(shí)編輯框有效,值為False時(shí)編輯框無效。(4)ReadOnly屬性:Boolean類型,決定編輯框中的內(nèi)容是否可以編輯。(5)SelStart屬性:Integer類型,選定文本的首字符的位置,或者光標(biāo)所在位置。編輯框的第一個(gè)字符的序號(hào)是0。(6)SelLength屬性:Integer類型,被選定文本的長(zhǎng)度。(7)SelText屬性:String類型,被選定的文本內(nèi)容。如果設(shè)置了SelStart屬性和SelLength屬性,則自動(dòng)會(huì)選定一段文字,文字的內(nèi)容為SelText。(8)CharCase屬性:枚舉類型,ecNormal,表示不改變輸入字符的大小寫,ecLowerCase表示將輸入的字符中的英文轉(zhuǎn)化為小寫字符,ecUpperCase表示將輸入的字符中的英文轉(zhuǎn)化為大寫字符。(9)HideSelection屬性:Boolean類型,選定的文字是否以加強(qiáng)的背景顏色顯示。(10)PasswordChar屬性:默認(rèn)值是#0,此時(shí),原樣顯示編輯框中的字符,如果將其設(shè)置為其它字符,如“*”,則編輯框中的所有字符都顯示為“*”(雖然顯示為“*”,但是Text屬性仍然不會(huì)改變),一般用于設(shè)置口令。2.Edit組件的方法(1)SetFocus:置焦點(diǎn)。(2)SelectAll:選定所有文本。3.Edit組件的主要事件(1)OnChange事件:編輯框的內(nèi)容發(fā)生改變。(2)OnEnter事件:編輯框得到焦點(diǎn)。(3)OnExit事件:編輯框失去焦點(diǎn)。(4)OnKeyPress事件:按鍵事件,參數(shù)Key表示所按下的字符,它返回的是一個(gè)字符。(5)OnKeyDown事件:鍵盤按下事件,Key為返回的按鍵(如’A’和’a’的Key都是65),還可以通過參數(shù)Shift檢測(cè)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('口令或者用戶名錯(cuò)');edit1.Text:='';edit2.Text:='';edit1.SetFocus;
end;end;end;說明:改進(jìn)后的程序在輸入用戶名和口令后無需按“確定”按鈕,直接在Edit2中按回車即可判斷用戶名和口令是否正確。4.Edit的應(yīng)用【例3-4】設(shè)計(jì)一個(gè)小學(xué)生加法練習(xí)器。練習(xí)器能隨機(jī)給出兩個(gè)兩位數(shù)的正整數(shù),要求寫出兩數(shù)之和,如果結(jié)果正確則提示“你真聰明”,如果答案錯(cuò)誤則提示“錯(cuò)誤,重做”。請(qǐng)編寫程序。程序設(shè)計(jì)步驟:(1)添加組件,在窗體中添加Edit1、Edit2和Edit3,添加Label1和Label2,添加Button1和Button2。設(shè)置Label1的Caption為“+”,Label2的Caption為“=”,設(shè)置Button1的Caption為“出題”,Button2的Caption為“判斷”。設(shè)置3個(gè)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置空,并置焦點(diǎn)等待輸入結(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('錯(cuò)誤,請(qǐng)重做',mterror,[mbok],1);edit3.Text:='';edit3.SetFocus;//錯(cuò)誤后需要重做
endend;說明:如果本程序要求每次運(yùn)行都出題10次,出題10次后,程序自動(dòng)結(jié)束。這時(shí)可以借助一個(gè)屬性Tag,絕大多數(shù)組件都有Tag屬性,Tag屬性的初始值為0。一般可以把Tag看成一個(gè)整型的全局變量。修改后的程序如下: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置空,并置焦點(diǎn)等待輸入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('錯(cuò)誤,請(qǐng)重做',mterror,[mbok],1);edit3.Text:='';edit3.SetFocus;//錯(cuò)誤后需要重做
end;ifform1.Tag=10thenapplication.Terminate;end;說明:雖然讀者還沒有接觸到變量的作用域的相關(guān)知識(shí),但是此處巧妙地利用Tag屬性解決了類似變量作用域的問題。在程序的很多地方,讀者都可以使用該屬性,希望讀者能夠舉一反三。3.2.3Memo組件Edit組件僅可以顯示單行文本,如果要顯示多行文本則顯得無能為力,要處理多行文本需要使用Memo組件。1.Memo的屬性。(1)Lines屬性:用于對(duì)Memo組件中的內(nèi)容進(jìn)行處理。單擊Lines屬性后的按鈕,打開“StringListEditor”對(duì)話框,在其中輸入多行字符串。Lines實(shí)際上是一個(gè)對(duì)象,它是一個(gè)數(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行移動(dòng)到第6行(2)WantReturns屬性:Boolean屬性,值為True時(shí)按Enter鍵插入一個(gè)回車符,值為False時(shí)按Enter表示提交,如果想輸入回車符則需要按Ctrl+Enter鍵。(3)WantTabs屬性:值為True時(shí),按Tab鍵插入一個(gè)Tab字符,值為False時(shí)按Tab鍵將改變或的焦點(diǎn)的組件。(4)ScrollBars屬性:控制Memo組件的滾動(dòng)條,取值分別有ssNone(無滾動(dòng)條)、ssHorizontal(只有水平滾動(dòng)條)、ssVertical(只有垂直滾動(dòng)條)和ssBoth(同時(shí)有水平與垂直滾動(dòng)條)。(5)Modified屬性:確定Memo組件是否被修改了。2.Memo的應(yīng)用【例3-5】在Memo中輸入文字,按“提交”按鈕后,文字顯示在標(biāo)簽中。要求按回車鍵也可以將文本顯示在標(biāo)簽中。請(qǐng)編寫程序。分析:應(yīng)該將Memo1的WantReturns屬性設(shè)置為False,并且將“提交”按鈕的Default屬性設(shè)置為True。其他組件的屬性設(shè)置比較簡(jiǎn)單,程序代碼也比較簡(jiǎn)單。程序設(shè)計(jì)步驟:(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鍵運(yùn)行程序。如圖3-4所示。。圖3-4程序運(yùn)行界面說明:這里將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è)置不同文本的格式,如顏色、字體、字號(hào)、下劃線、粗體、斜體、對(duì)齊方式等等。RichEdit組件位于Win32組件面板中。1.主要屬性(1)SelStart屬性、SelLength屬性、SelText屬性、WantReturns屬性、WantTabs屬性、ScrollBars屬性、Modified屬性、HideSelection等屬性。這些屬性和Edit組件和Memo組件類似。(2)SelAttributes屬性:選定文字的字體。下面的語(yǔ)句將字體對(duì)話框Fontdialog1中選定的字體賦給RichEdit1中選定的文本。還有一些用法將在后面章節(jié)詳細(xì)講解。Richedit1.SelAttributes.Assign(Fontdialog1.Font);(3)DefAttributes屬性:RichEdit默認(rèn)字體。下面的語(yǔ)句將RichEdit1默認(rèn)的字體賦給字體對(duì)話框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對(duì)象的主要方法有:(1)SaveToFile方法:將RichEdit組件中的內(nèi)容保存。如下面語(yǔ)句可以將RichEdit1中的內(nèi)容保存到保存對(duì)話框Savedialog1所指定的文件名。Richedit1.Lines.SaveToFile(Savedialog1.FileName);(2)LoadFromFile方法:在RichEdit中打開一個(gè)文件。如下面的語(yǔ)句可以將打開對(duì)話框Opendialog1所指定的文件在RichEdit1中打開。Richedit1.Lines.LoadFromFile(Opendialog1.FileName);4.RichEdit組件的簡(jiǎn)單應(yīng)用?!纠?-6】編制一個(gè)簡(jiǎn)單的編輯器,要求該編輯器具有“復(fù)制”、“剪切”、“刪除”、“粘貼”、“取消”、“全選”等功能。分析:本程序?qū)⒁玫絉ichEdit組件,并且要用到RichEdit組件的一些方法和屬性。程序設(shè)計(jì)步驟:(1)添加組件RichEdit組件1個(gè)、Button組件6個(gè)到窗體,并調(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沒有提供刪除方法,但是語(yǔ)句“richedit1.SelText:='';”的作用是將選定的文本置空,也就是刪除選定的文本。這里的空字符千萬不要寫成空格字符。
3.2.5Panel組件Panel面板是一個(gè)以多種三維效果顯示的矩形區(qū)域。它可以將窗體分成規(guī)則的幾塊,為窗體中的組件提供可視化的分組。Panel組件位于Standard選項(xiàng)卡中。1.
Panel的主要屬性如下:(1)Caption屬性:面板上顯示的標(biāo)題文字。(2)Align屬性:Panel的對(duì)齊方式,枚舉類型,有如表3-9所示的一些取值。例如,如圖3-6所示的Panel1的Anchors屬性值為[akRight,akTop,akBottom],則窗體變大的時(shí)候,Panel1到窗體右邊的距離不變,到窗體上邊的距離不變,到窗體下邊的距離不變,顯然Panel變高了。要說明的是,Anchors屬性是受Align屬性的影響的,例如,將Panel1的Align屬性設(shè)置為alLeft,顯然此時(shí)如果Anchor的值含有集合元素akTop和akBotton就沒有意義了。這點(diǎn)讀者自己可以去體會(huì)。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個(gè)變量中panel2.Caption:='今天是'+inttostr(year)+'年'+inttostr(month)+'月'+inttostr(day)+'日。';end;說明:很多程序的界面使用Panel修飾后,都可以使得界面更加美觀。3.2.6Splitter組件如果想建立一個(gè)在運(yùn)行時(shí)可以自由改變區(qū)域大小的程序,這時(shí)候可以使用Spitter組件。Splitter組件雖然不是分組組件,但是它經(jīng)常和Panel組件一起配合使用,所以在本節(jié)中介紹該組件。Splitter組件還經(jīng)常和Memo組件、RichEdit組件等配合使用。Splitter組件位于Additional組件面板中。1.Splitter組件的主要屬性如下(1)Align屬性:屬性值是枚舉類型,值為alLeft或者alRight的時(shí)候,組件可以水平移動(dòng),控制左右兩塊區(qū)域改變大小,此時(shí)Splitter的Height屬性無意義。值為alTop和alBottom時(shí),組件可以垂直移動(dòng),控制垂直的兩塊區(qū)域改變大小,此時(shí)Splitter組件的Width屬性無意義。Align屬性值一般不設(shè)置為alNone和alClient。(2)Beveled屬性:Boolean型,值為True時(shí)Splitter組件呈凹形,默認(rèn)值為False時(shí),此時(shí)Splitter組件呈凸形。(3)Height屬性和Width屬性:高度和寬度屬性,當(dāng)Align屬性值為alLeft或者alRight的時(shí)候,Width屬性有效,可以設(shè)置分割條的寬度,此時(shí)Height屬性無效,分割條的高度和Parent的高度相同;當(dāng)Align屬性值為alTop和alBottom時(shí),組件Height屬性有效,組件可以設(shè)置高度,此時(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所示文字。程序運(yùn)行,界面如圖3-8所示,可以改變移動(dòng)Splitter來改變3個(gè)Memo的區(qū)域的大小。3.2.7GroupBox組件組框GroupBox是又一個(gè)用于分組的組件,它類似于面板Panel,但是其Caption顯示在邊框上,這點(diǎn)與面板Panel有些不同。GroupBox不僅可以用于美觀,還可以用于協(xié)調(diào)不同組的組件之間協(xié)調(diào)操作,因此GroupBox在單選框和復(fù)選框中用得很多,我們將在后面章節(jié)中講解這點(diǎn)。GroupBox組件位于Standard組件面板上。3.2.8Button組件Button組件是最常見的組件之一,位于Standard組件面板中。1.Button的主要屬性(1)Caption屬性:組件的標(biāo)題文字,可以使用符號(hào)“&”來設(shè)置按鈕的加速鍵,前面已經(jīng)使用到。(2)Default屬性:Boolean型,決定按鈕是否為默認(rèn)按鈕,如果值為True則按鈕是默認(rèn)按鈕,值為False時(shí)不是默認(rèn)按鈕,如果是默認(rèn)按鈕,單擊按鈕和按會(huì)車鍵是等價(jià)的?!纠?-5】中用到過這個(gè)屬性。(3)Cancel屬性:Boolean型,決定按鈕是否為取消按鈕。如果Cancel屬性值為True則該按鈕是取消按鈕,否則不是取消按鈕。如果是取消按鈕,則按Esc鍵和單擊該按鈕等價(jià)。2.Button的主要事件主要事件有OnClick等事件,下列情形之一會(huì)觸發(fā)OnClick事件:(1)單擊按鈕。(2)按鈕獲得焦點(diǎn)的時(shí)候按回車鍵或者空格鍵。(3)執(zhí)行語(yǔ)句Button對(duì)象.Click。3.2.9BitBtn組件BitBtn組件也是最常見的組件之一,位于Additional組件面板中。該組件可以在按鈕中顯示一幅格式為bmp的圖片,使得按鈕更加美觀和形象。1.BitBtn組件的主要屬性除了有Caption、Default、Cancel等屬性之外,BitBtn還有如下一些主要屬性。(1)Glyph屬性:為按鈕指定一個(gè)圖標(biāo)文件(擴(kuò)展名為bmp),該圖標(biāo)顯示在按鈕表面,Tbitmap型。(2)Kind屬性:枚舉型,決定按鈕的類型。取值有bkCustom、bkOK、bkCancel、bkHelp、bkYes、bkNo、bkClose、bkAbort、bkRetry、bkIgnore、bkAll。默認(rèn)值為bkCustom,表示種類是自定義類型,位圖由Glyph決定。其它值分別對(duì)應(yīng)不同的位圖,并將ModalResult自動(dòng)設(shè)置為相應(yīng)的值。如bkOK對(duì)應(yīng)mrOK,bkYes對(duì)應(yīng)mrYes等等。2.BitBtn按鈕的使用【例3-9】在窗體上添加標(biāo)簽Label1,位圖按鈕BitBtn1~BitBtn11。分別設(shè)置它們的Kind屬性,設(shè)置BitBtn6的Caption為“保存”,Kind為bkCustom,設(shè)置Glyph屬性為一個(gè)圖標(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è)計(jì)若干組互斥的按鈕選項(xiàng),只需要將多個(gè)SpeedButton的GroupIndex屬性設(shè)置為相同且不為0,則這些按鈕成為一組,成為一組的按鈕每次僅可以按下一個(gè)。SpeedButton不接受輸入焦點(diǎn),沒有切換次序。1.SpeedButton的主要屬性與Button類似,特殊屬性如下(1)Down屬性:按鈕處于按下狀態(tài)Down值為True,否則Down值為False。(2)Flat屬性:Boolean型,當(dāng)值為False時(shí),外觀是立體按鈕;值為True時(shí)是平面按鈕,外觀和標(biāo)簽一樣,只有鼠標(biāo)移上去的時(shí)候才顯示為立體。(3)GroupIndex屬性:若值大于0,則相同值的若干個(gè)SpeedButton按鈕協(xié)同工作,任何時(shí)刻這些按鈕至多只能有一個(gè)被按下。值為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事件過程寫在一起。方法是:同時(shí)選定SpeedButton1~SpeedButton3,然后在“ObjectInspector”的“Events”選項(xiàng)卡中,選定“OnClick”事件,雙擊其右邊的空格,右邊空格顯示“SpeedButton1Click”(表示單擊SpeedButton1~SpeedButton3都會(huì)執(zhí)行TForm1.SpeedButton1Click過程),并進(jìn)入代碼編輯器。編寫如下代碼:procedureTForm1.SpeedButton1Click(Sender:TObject);//單擊SpeedButton1~SpeedButton3都會(huì)執(zhí)行TForm1.SpeedButton1Click過程//此處的代碼也可以寫成3個(gè)過程。beginif(senderastspeedbutton).caption='黑色'//點(diǎn)擊了“黑色”thenlabel1.Font.Color:=rgb(0,0,0);if(senderastspeedbutton).caption='紅色'//點(diǎn)擊了“紅色”thenlabel1.Font.Color:=rgb(255,0,0);if(senderastspeedbutton).caption='藍(lán)色'//點(diǎ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);//字體對(duì)話框初始字體與標(biāo)簽的字體一樣iffontdialog1.Executethenlabel1.Font.Assign(fontdialog1.Font)//點(diǎn)擊字體對(duì)話框的確定按鈕后,標(biāo)簽取字體對(duì)話框的字體end;SpeedButton4~SpeedButton6的程序代碼也可以寫成一個(gè)過程。方法和SpeedButton1~SpeedButton3類似。(5)運(yùn)行結(jié)果,見圖3-11所示。說明:本處將顏色按鈕分成一組,將字大小按鈕分成一組,而字體不需要分組。這樣分組后就可以同時(shí)選擇顏色和大小了。圖3-11SpeedButton程序舉例3.2.11CheckBox組件CheckBox組件是復(fù)選按鈕組件,它是一個(gè)帶標(biāo)簽的方框(),表示被選中,表示未被選中。選中的時(shí)候Checked屬性值為True,未被選中的時(shí)候Checked屬性值為False,默認(rèn)值為False。多個(gè)復(fù)選按鈕之間互不影響。CheckBox組件在Standard組件面板中。CheckBox組件的事件有OnClick事件,下列情況下發(fā)生OnClick事件:(1)單擊CheckBox組件(Checked屬性的值也會(huì)自動(dòng)改變)。(2)用代碼改變Checked屬性的值。CheckBox組件的特點(diǎn)是每次單擊都會(huì)改變Checked屬性的值,并觸發(fā)OnClick事件。3.2.12RadioButton組件RadioButton組件是單選按鈕組件,它可以用于顯示一組互斥的選項(xiàng)。同一組單選按鈕中最多只能有一個(gè)單選按鈕被選中,一旦選定某個(gè)單選按鈕,則此前被選定的那個(gè)單選按鈕變?yōu)槲催x定狀態(tài)。如果想多選,可以配合GroupBox組件來實(shí)現(xiàn),可以把GroupBox中的多個(gè)Radiobutton按鈕看成一組,有幾個(gè)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組件的特點(diǎn)是只有單擊未被選中的按鈕才會(huì)觸發(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個(gè)組件的大小和位置。(2)在GroupBox1中添加RadioButton1、RadioButton2和RadioButton3,這樣這3個(gè)單選按鈕就分成一組了。設(shè)置這3個(gè)組件的Caption分別為“10號(hào)”、“20號(hào)”和“30號(hào)”。(3)在GroupBox2中添加RadioButton4、RadioButton5和RadioButton6,這樣這3個(gè)單選按鈕就分成一組了。設(shè)置這3個(gè)組件的Caption分別為“黑色”、“紅色”和“藍(lán)色”。(4)在GroupBox3中添加CheckBox1、CheckBox2和CheckBox3,設(shè)置這3個(gè)復(fù)選按鈕的Caption分別為“粗體”、“斜體”和“下劃線”。說明:GroupBox1和GroupBox2的作用是分組,使得RadioButton1、RadioButton2和RadioButton3成為一組,而RadioButton4、RadioButton5和RadioButton6也成為一組,這樣就可以提供多選了。GroupBox3的作用是美觀界面,復(fù)選按鈕并不需要分組協(xié)調(diào)工作。(5)編寫程序:procedureTForm1.FormCreate(Sender:TObject);begin//程序運(yùn)行最開始字號(hào)是10號(hào),顏色是黑色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;分析:?jiǎn)芜x按鈕的OnClick事件過程中不需要使用if語(yǔ)句,而復(fù)選按鈕的OnClick事件過程中需要使用if語(yǔ)句,這與二者的OnClick事件觸發(fā)的規(guī)律是有關(guān)系的。設(shè)置字形的時(shí)候用到了集合的并運(yùn)算和差運(yùn)算,這并不難理解。3.2.13ListBox組件ListBox組件以列表的形式顯示多項(xiàng)供用戶選擇。如果不能顯示全部項(xiàng),還可以添加滾動(dòng)條使用戶通過上下滾動(dòng)條來查閱所有項(xiàng)。1.ListBox組件的主要屬性(1)Items屬性:列表選項(xiàng)的集合,String類型數(shù)組,如ListBox1.Items[3]表示ListBox1的第4項(xiàng)。關(guān)于Items有如下一些用法:ListBox1.Items.Add(‘添加一行’);//在最后添加一項(xiàng)ListBox1.Items.Delete(5);//刪除第6項(xiàng)ListBox1.Items.Insert(3,‘插入一行’);//在第4行之前插入一行ListBox1.Items.Move(3,5);//將第4行移動(dòng)到第6行St1:=ListBox1.Items[3];//將第4行的字符賦值給字符變量st1Memo1.Lines:=Listbox1.Items;//將Listbox1中的所有項(xiàng)顯示在Memo1中n:=ListBox1.Items.count;//n為L(zhǎng)istBox1的項(xiàng)數(shù)ListBox1.Items.Clear;//清空Listbox1中的所有項(xiàng)(2)ItemsIndex屬性:選定項(xiàng)的索引值,值為i時(shí)表示選定了第i+1項(xiàng),值為-1表示未選定任何項(xiàng)。例如:ListBox1.Items[ListBox1.ItemsIndex];//當(dāng)前選中的項(xiàng)的字符串ListBox1.ItemIndex:=3;//選中第4項(xiàng)(3)Sorted屬性:Boolean型,值為True時(shí)表示選項(xiàng)排序,值為False時(shí)表示選項(xiàng)不排序。(4)Columns屬性:Imteger型,列表的列數(shù)。(5)MultiSelect屬性:Boolean型,是否允許選擇多項(xiàng)。(6)Selected屬性:用來設(shè)置或者返回某項(xiàng)是否被選中了。關(guān)于Selected屬性的用法請(qǐng)看:listbox1.Selected[2]:=true;//選中第3項(xiàng)iflistbox1.Selected[2]thenbegin…end;//如果第3項(xiàng)被選中就執(zhí)行begin和end間的語(yǔ)句2.ListBox組件的主要方法Clear方法:清除ListBox中的所有項(xiàng)數(shù)。下面兩種方法均可。ListBox1.Items.Clear;ListBox1.clear;3.ListBox組件的事件(1)OnClick事件:選擇某項(xiàng)時(shí)觸發(fā)該事件。(2)OnEnter事件:得到焦點(diǎn)時(shí)觸發(fā)該事件。(3)OnExit事件:失去焦點(diǎn)時(shí)觸發(fā)該事件。4.ListBox組件的應(yīng)用【例3-12】在列表框中選擇自己喜歡的城市。界面如圖3-13所示。步驟如下:(1)在窗體中添加標(biāo)簽Label1、Label2、命令按鈕4個(gè)分別是Button1~Button4(從上到下),添加兩個(gè)列表框ListBox1(左邊)和ListBox2(右邊)。(2)設(shè)置這些組件的屬性,屬性參見表3-13。說明:如果某個(gè)城市沒有被選中,則i加1測(cè)試下一個(gè)城市,如果某個(gè)城市被選中,則從左邊列表框中刪除該城市,細(xì)心的讀者會(huì)注意到刪除某個(gè)城市(項(xiàng))后i并沒有加1。原因是相同的i值,在完成刪除操作之前和之后是表示不同的項(xiàng)的。procedureTForm1.Button1Click(Sender:TObject);
vari:integer;begini:=0;//從第一項(xiàng)開始whilei<listbox1.Items.Countdo//直到最后一項(xiàng)iflistbox1.Selected[i]then//判斷每一項(xiàng)是否被選中,若被選中則執(zhí)行begin和end間的語(yǔ)句
beginlistbox2.Items.Add(listbox1.Items[i]);//將選中的項(xiàng)添加到listbox2listbox1.Items.Delete(i);//并從listbox1中刪除
endelsei:=i+1;//測(cè)試下一項(xiàng)end;繼續(xù)編寫下面的代碼:procedureTForm1.Button2Click(Sender:TObject);vari:integer;beginfori:=0tolistbox1.Items.Count-1dolistbox2.Items.Add(listbox1.Items[i]);//將listbox1中所有項(xiàng)添加到右邊listbox2listbox1.Items.Clear;//清除listbox1中所有項(xiàng)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組件的功能,用戶可以直接輸入文本或者在列表中選擇選項(xiàng)。它具有很多和ListBox相同的屬性,另外ComboBox還具有一些自己獨(dú)特的屬性。1.ComboBox組件的特殊屬性(1)DropDownCount屬性:下拉部分可以顯示的項(xiàng)數(shù),如果不能顯示全部項(xiàng)數(shù),可以通過滾動(dòng)條來顯示其它選項(xiàng)。默認(rèn)值是8。(2)SelText屬性:編輯區(qū)選擇的文本。(3)SelLength屬性:編輯區(qū)選定文本的長(zhǎng)度。(4)SelStart屬性:編輯區(qū)選定文字的起點(diǎn),編輯區(qū)第一個(gè)字符位置是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;//清除列表項(xiàng)中所有內(nèi)容(2)SelectAll方法:選定編輯框中所有內(nèi)容。(3)SetFocus方法:ComboBox得到焦點(diǎn)。還具備其它一些Edit和ListBox組件的方法,在此不再贅述。3.ComboBox組件的事件ComboBox組件具備Edit組件和ListBox組件的一些事件。如:(1)OnClick事件:鼠標(biāo)單擊事件,鼠標(biāo)單擊選擇某項(xiàng)。(2)OnChange事件:編輯框內(nèi)容被改變。(3)OnKeyPress事件:按鍵事件,參數(shù)與Edit的按鍵事件相同。(4)OnKeyUp事件和OnKeyDown事件:類似Edit的相應(yīng)事件。(5)OnDropDown事件:當(dāng)用戶單擊右邊箭頭按鈕即打開下拉列表,此時(shí)觸發(fā)該事件。4.ComboBox組件的應(yīng)用【例3-13】字體設(shè)置程序,窗體上有編輯框Edit1,要求通過Listbox1和Combobox1來設(shè)置其字體和大小,界面如圖3-14所示。請(qǐng)編寫程序完成。分析:我們希望編寫一個(gè)質(zhì)量較高的程序,如少出錯(cuò)、界面友好、美觀、操作方便等等。為了操作方便,本程序不僅可以選擇字號(hào),還允許用戶直接輸入字號(hào)。在防止出錯(cuò)方面,程序要求用戶在輸入字號(hào)的時(shí)候禁止非數(shù)字字符的輸入。另外還禁止設(shè)置40號(hào)以上的字號(hào)(太大了,影響美觀)。本程序用到OnKeyPress、OnClick等事件。步驟如下:(1)在窗體上添加組件Edit1、Label1、Label2、ComboBox1和Listbox1。簡(jiǎn)單設(shè)置屬性,并調(diào)整組件的大小和位置。(2)根據(jù)上面的分析,編寫如下代碼:procedureTForm1.FormCreate(Sender:TObject);beginlistbox1.Items:=screen.Fonts;//在ListBox1中顯示字體combobox1.Items.Add('8');//添加字號(hào)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號(hào)字combobox1.Text:=combobox1.Items[0];//ComboBox1編輯框中顯示8號(hào)字end;procedureTForm1.ComboBox1KeyPress(Sender:TObject;varKey:Char);begin//在編輯框中輸入字號(hào)ifnot((key>='0')and(key<='9')or(key=#8)or(key=#13))thenkey:=#0;//key:=#0表示什么也不錯(cuò),#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)//直接選擇字號(hào)end;procedureTForm1.ListBox1Click(Sender:TObject);beginedit1.Font.Name:=listbox1.Items[listbox1.ItemIndex];//選擇字體,listbox1.Items[listbox1.ItemIndex]為用戶在列表框中選擇的項(xiàng)end;(3)運(yùn)行程序,界面如圖3-15所示。圖3-15字體設(shè)置運(yùn)行界面說明:本程序TForm1.ComboBox1KeyPress中的代碼非常實(shí)用,在最大程度上防止了錯(cuò)誤的出現(xiàn)。因?yàn)檩斎敕菙?shù)字字符會(huì)引起錯(cuò)誤的出現(xiàn),空白也會(huì)出錯(cuò),本程序可以防止這些情況的發(fā)生。本程序的巧妙之處還有允許按BackSpace鍵,提供輸入錯(cuò)誤后的修改可能。3.2.15計(jì)時(shí)器Timer組件計(jì)時(shí)器組件(Timer)是一個(gè)非可視化的組件,它能定時(shí)觸發(fā)OnTimer事件。如果想定時(shí)執(zhí)行某些語(yǔ)句,可以考慮使用Timer組件。Timer組件在System組件面板上。1.Timer組件的屬性(1)Enabled屬性:當(dāng)值為True時(shí),打開定時(shí)器;當(dāng)Enabled屬性值為False時(shí),Timer組件關(guān)閉計(jì)時(shí)器。默認(rèn)值為True。(2)Interval屬性:控制OnTimer事件發(fā)生的時(shí)間間隔,單位是毫秒,類型是Integer類型。將Interval屬性值設(shè)置為0相當(dāng)于關(guān)閉計(jì)時(shí)器。Interval的默認(rèn)值是1000,即1秒鐘。2.Timer組件的事件OnTimer事件:當(dāng)Timer組件有效時(shí),它每隔Interval毫秒觸發(fā)OnTimer事件,執(zhí)行相應(yīng)的程序。3.Timer組件的程序舉例【例3-14】設(shè)置一個(gè)滾動(dòng)字幕,讓一些字符從下向上滾動(dòng)。分析:為了控制字符向上滾動(dòng),顯然要使用計(jì)時(shí)器來控制字符滾動(dòng)的快慢。并設(shè)置其Interval用于控制時(shí)間間隔,時(shí)間間隔越短,字幕滾動(dòng)越快。步驟如下:(1)添加組件,添加Timer1,添加Label1,并設(shè)置字號(hào)為12號(hào),設(shè)置字體為“宋體”,調(diào)整好Label1的大小和位置。設(shè)置Timer1的Interval為10。界面如圖3-16所示。圖3-16滾動(dòng)字幕程序界面(2)根據(jù)分析,編寫代碼如下:在TForm1.FormCreate中編寫代碼實(shí)現(xiàn)程序運(yù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事件過程中編寫代碼實(shí)現(xiàn)字幕滾動(dòng)功能。procedureTForm1.T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時(shí)占用土地租賃協(xié)議
- 快件賒銷協(xié)議書
- 2024建設(shè)工程補(bǔ)充合同范本
- 求職意向書樣本-書信范本
- 2024幼兒園保安聘用合同
- 勞務(wù)施工安全協(xié)議書范本2024年
- 浙江省初中名校七年級(jí)上學(xué)期語(yǔ)文期中試卷5套【附答案】
- 吉林省雜糧采購(gòu)合同
- 4.1 夯實(shí)法治基礎(chǔ) (大單元教學(xué)設(shè)計(jì)) 2024-2025學(xué)年統(tǒng)編版道德與法治九年級(jí)上冊(cè)
- 家庭雇傭保姆合同模板
- 煤礦皮帶智能化集控系統(tǒng)PPT教學(xué)講授課件
- 個(gè)人財(cái)務(wù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)--論文
- 分?jǐn)?shù)乘除法整理復(fù)習(xí)(課堂PPT)
- 杭州會(huì)展業(yè)發(fā)展與對(duì)策研究文獻(xiàn)綜述
- 小學(xué)六年級(jí)英語(yǔ)上冊(cè)《Unit 1 How can I get there》教案
- 完整版方法驗(yàn)證報(bào)告模板最終
- 電力管道資料表格(共30頁(yè))
- 大班科學(xué)活動(dòng)教案《豆豆家族》含PPT課件
- 【精品試卷】部編人教版(統(tǒng)編)一年級(jí)上冊(cè)語(yǔ)文第一單元測(cè)試卷含答案
- 金屬有機(jī)化學(xué)ppt課件
- 數(shù)學(xué)說題稿(共4頁(yè))
評(píng)論
0/150
提交評(píng)論