顯示與輸入介面_第1頁(yè)
顯示與輸入介面_第2頁(yè)
顯示與輸入介面_第3頁(yè)
顯示與輸入介面_第4頁(yè)
顯示與輸入介面_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第五章 C+ Builder 顯示與輸入介面視窗程式中,佔(zhàn)最大部分的大概就是按鈕跟一些輸入框了。在這一章裡面,我們?cè)敿?xì)的介紹各種標(biāo)籤、按鈕以及輸入的VCL元件,進(jìn)而介紹一些按鈕軸的使用方法,以及類(lèi)似筆記本的多行輸入窗。2大綱 5-1. 標(biāo)籤的使用(Label) 5-2. 使用編輯框(Edit) 5-3. 遮罩編輯框(MaskEdit) 5-4. 標(biāo)籤編輯框(LabeledEdit) 5-5. StringGrid 5-6. ValueListEdit 5-7. RichEdit元件的使用 5-8. RichEdit元件的使用 本章習(xí)題35-1. 標(biāo)籤的使用(Label) 標(biāo)籤,簡(jiǎn)單來(lái)說(shuō)就是視

2、窗程式上的文字方塊。標(biāo)籤的使用相當(dāng)容易,也很直觀,在之前的程式我們也已經(jīng)用過(guò)Label了!我們將利用範(fàn)例5-1來(lái)說(shuō)明Label的詳細(xì)用法。 Label這個(gè)VCL元件放在Standard Page上,選取後也是一樣將游標(biāo)移到Form上,並且在要放上Label的地方按一下滑鼠左鍵就可以了,其實(shí)任何VCL元件都是這樣子使用。 45-2. 使用編輯框(Edit) Edit也是視窗程式中很重要的一個(gè)元件,最常見(jiàn)的是將Label和Edit一起使用,因?yàn)檫@樣可以讓使用者很清楚的知道,這個(gè)編輯框要輸入的東西是什麼。 Edit這個(gè)元件也被放在Standard這一個(gè)頁(yè)次中,我們將利用範(fàn)例5-2和5-3把編輯框跟標(biāo)

3、籤緊緊的結(jié)合起來(lái),再配合上按鈕,來(lái)完成我們的範(fàn)例。 55-2. 使用編輯框(Edit) 利用編輯框?qū)嵶髅艽a輸入 在很多場(chǎng)合我們需要輸入密碼之類(lèi)的機(jī)密資料,我們通常不會(huì)直接讓輸入的資料出現(xiàn)在Edit上,這時(shí)候只要修改Edit一個(gè)屬性就夠了。 PasswordChar。原本這個(gè)屬性的設(shè)定值是#0,我們將之改成我們希望它出現(xiàn)的字元,例如*,這樣當(dāng)我們?cè)佥斎胱衷臅r(shí)候,一率都是使用*來(lái)顯示。我們將密碼輸入的實(shí)際範(fàn)例放在範(fàn)例5-3裡。 65-3. 遮罩編輯框(MaskEdit) 遮罩編輯框跟編輯框的功能很相近,只是遮罩編輯框可以先設(shè)定好輸入的格式,所以當(dāng)使用者在使用的時(shí)候,就可以限制使用者輸入的文字。

4、例如我們希望使用者輸入身分證字號(hào),格式就是一個(gè)英文字母加上九個(gè)數(shù)字,但是有些使用者就會(huì)故意亂輸入,這時(shí)後除非我們?cè)诔淌街袑?xiě)入檢查的程式碼,不然就只能任由使用者亂來(lái)了。 MaskEdit被放置在Additional這個(gè)頁(yè)次內(nèi),將MaskEdit放在Form上跟Edit的外觀幾乎沒(méi)有什麼不同,但是MaskEdit主要是擁有一個(gè)Edit沒(méi)有的屬性,就是EditMask這個(gè)屬性。 75-3. 遮罩編輯框(MaskEdit) Mask中可以使用的符號(hào)Mask位元代表意義!如果“!”字元出現(xiàn),選擇的字元表現(xiàn)在Edit上就像是開(kāi)頭空白。在這個(gè)符號(hào)後面的所有英文字母都會(huì)被強(qiáng)制轉(zhuǎn)換為大寫(xiě)字母。直到“”符號(hào)出現(xiàn)才

5、恢復(fù)?!狈?hào)出現(xiàn)才恢復(fù)。不檢查英文字母到底是大寫(xiě)或是小寫(xiě)顯示特別字元,只需在要顯示的字元前加上這個(gè)符號(hào)即可。L只可以輸入英文字母,而且一定被要求輸入,不分大小寫(xiě)。l只可以輸入英文字母,但是不一定要輸入。不分大小寫(xiě)。A可以輸入英文字母和數(shù)字,而且一定要輸入,英文字母不分大小寫(xiě)。85-3. 遮罩編輯框(MaskEdit) Mask中可以使用的符號(hào)Mask位元代表意義a可以輸入英文字母和數(shù)字,但是不一定要輸入,英文字母不分大小寫(xiě)。C可以輸入任何字元,不過(guò)一定要輸入。c可以輸入任何字元,但是不一定要輸入。0只可以輸入數(shù)字,而且一定要輸入。9只可以輸入數(shù)字,但是不一定要輸入。#可以輸入數(shù)字或是正負(fù)符號(hào)。

6、:用來(lái)分隔時(shí)間中的時(shí)、分、秒。/用來(lái)分隔時(shí)間中的年、月、日。;用來(lái)分隔mask的欄位。_空白字元,輸入時(shí)將會(huì)跳過(guò)這個(gè)字元。但是會(huì)在MaskEdit上出現(xiàn)這個(gè)位元需要輸入(有底線)。95-3. 遮罩編輯框(MaskEdit) 範(fàn)例5-4的執(zhí)行結(jié)果105-4. 標(biāo)籤編輯框(LabeledEdit) 在前面我們介紹過(guò)Label跟Edit,也在範(fàn)例中展現(xiàn)出Label跟Edit合作無(wú)間的功能。 在BCB 6裡面,多了一個(gè)相當(dāng)好用的元件,他叫做LabeledEdit,他將Label跟Edit合起來(lái),我們不需要再拉兩個(gè)VCL元件下來(lái),只要拉一個(gè)LabeledEdit就等於拉了一個(gè)Label和Edit。115

7、-5. StringGrid StringGrid最主要的功能就是提供一個(gè)Grid可以讓我們儲(chǔ)存一堆相關(guān)的文字。 例如我們將在範(fàn)例5-6實(shí)做的九九乘法表就是一個(gè)好例子。 其餘,像是很多需要填寫(xiě)的表格,或是工廠機(jī)臺(tái)傳出來(lái)的報(bào)表等等,都很適合用StringGrid來(lái)表現(xiàn)! 125-5. StringGrid 範(fàn)例5-6:利用StringGrid實(shí)作九九乘法表 StringGrid需要改變的屬性屬性設(shè)定說(shuō)明ColCount就是設(shè)定Column的數(shù)目,在這邊雖然九九乘法表只需要九個(gè)Column,但是因?yàn)槲覀冃枰谝粋€(gè)Column,所以必須要設(shè)定成10DefaultColWidth設(shè)定每個(gè)Column的

8、寬度,使該StringGrid不需要使用Scroll BarRowCount就是設(shè)定Row的數(shù)目,在這邊雖然九九乘法表只需要九個(gè)Row,但是因?yàn)槲覀冃枰谝粋€(gè)Row,所以必須要設(shè)定成10DefaultRowHeight設(shè)定每個(gè)Row的高度,使該StringGrid不需要使用Scroll Bar135-5. StringGrid 範(fàn)例5-6:利用StringGrid實(shí)作九九乘法表 主要程式碼void _fastcall TForm1:BitBtn1Click(TObject *Sender) int i, j; /設(shè)定Row Header 以及Column Header的數(shù)字 for (i =

9、0 ; i Cells0i = 九九乘法; else /設(shè)定Column Header的值.就是最上面那一排的資料 StringGrid1-Cellsi0 = IntToStr(i); /設(shè)定Row Header的值.就是最左邊那一排的資料 StringGrid1-Cells0i = IntToStr(i); /計(jì)算九九乘法表內(nèi)的資料 for (i = 1 ; i = 9 ; i+) for (j = 1 ; j Cellsij = IntToStr(i * j);145-5. StringGrid 範(fàn)例5-6:利用StringGrid實(shí)作九九乘法表 執(zhí)行結(jié)果155-5. StringGrid

10、 動(dòng)態(tài)產(chǎn)生StringGrid 在範(fàn)例5-7中,主要是要設(shè)計(jì)一個(gè)可以動(dòng)態(tài)產(chǎn)生StringGrid大小的程式。這樣的好處在於我們不需要在設(shè)計(jì)程式的同時(shí)就固定住該StringGrid的大小,反而可以很彈性的由使用者給定之後再產(chǎn)生所需要的大小。 在這個(gè)範(fàn)例中,main.h以及main.cpp都有動(dòng)到,跟平常只有修改main.cpp有點(diǎn)不一樣。 165-5. StringGrid 範(fàn)例5-7:main.hclass TForm1 : public TForm_published:/ IDE-managed Components /省略private:/ User declarationspublic:

11、/ User declarations /宣告一個(gè)宣告一個(gè)StringGrid的指標(biāo)的指標(biāo) /讓我們?cè)诘纫幌驴梢皂樌膭?dòng)態(tài)產(chǎn)生讓我們?cè)诘纫幌驴梢皂樌膭?dòng)態(tài)產(chǎn)生 TStringGrid *StringGrid; _fastcall TForm1(TComponent* Owner);/-extern PACKAGE TForm1 *Form1;/-#endif175-5. StringGrid 範(fàn)例5-7:main.cppvoid _fastcall TForm1:BitBtn1Click(TObject *Sender) /利用if來(lái)判斷是不是四個(gè)LabeledEdit都有輸入資料 /如果都有

12、輸入資料.就new一個(gè)TStringGrid出來(lái) /並且對(duì)該StringGrid做一些屬性的設(shè)定 /如果沒(méi)有輸入資料.就顯示一個(gè)MessageBox通知使用者 if (LabeledEdit1-Text.Length() != 0) & (LabeledEdit2-Text.Length() != 0) & (LabeledEdit3-Text.Length() != 0) & (LabeledEdit4-Text.Length() != 0) StringGrid = new TStringGrid(GroupBox2); /new一個(gè)StringGrid Strin

13、gGrid-Parent = GroupBox2; /將StringGrid的parent設(shè)定為GroupBox2 StringGrid-Width = 577; /設(shè)定StringGrid的寬度 StringGrid-Height = 209; /設(shè)定StringGrid的高度 StringGrid-Top = 24; /設(shè)定StringGrid對(duì)於GroupBox2的上緣的距離 StringGrid-Left = 16; /設(shè)定StringGrid對(duì)於GroupBox2的左邊界的距離 /設(shè)定該StringGrid的Cell個(gè)數(shù)的相關(guān)屬性 StringGrid-ColCount = StrT

14、oInt(LabeledEdit1-Text); StringGrid-RowCount = StrToInt(LabeledEdit2-Text); StringGrid-FixedCols = StrToInt(LabeledEdit3-Text); StringGrid-FixedRows = StrToInt(LabeledEdit4-Text); StringGrid-Visible = true; /將該StringGrid的Visible設(shè)定為可看見(jiàn) StringGrid-Enabled = true; /將該StringGrid設(shè)定成Enable else /顯示應(yīng)該輸入完整的

15、資訊 /在這邊會(huì)跳出一個(gè)MessageBox ShowMessage(請(qǐng)輸入完整的資訊); 185-5. StringGrid 範(fàn)例5-7:main.cppvoid _fastcall TForm1:BitBtn2Click(TObject *Sender) /如果StringGrid已經(jīng)被new出來(lái)了,就可以掃過(guò)所有的Cells /並把所有的Cell的值都設(shè)定為空字串,如此可以模擬出清除Grid資料的感覺(jué) if (StringGrid != NULL) for (int i = 0 ; i ColCount ; i+) for (int j = 0 ; j RowCount ; j+) St

16、ringGrid-Cellsij = ; /-void _fastcall TForm1:BitBtn3Click(TObject *Sender) /將已經(jīng)new出來(lái)的StringGrid delete掉 /這個(gè)動(dòng)作會(huì)完整的刪除已經(jīng)new出來(lái)的物件 delete StringGrid;195-5. StringGrid 範(fàn)例5-7:main.cppvoid _fastcall TForm1:BitBtn4Click(TObject *Sender) /宣告我們要設(shè)定Cell的colunm, row, 以及data的變數(shù) int col, row; AnsiString data; /判斷是不

17、是我們需要的資料都具備了 if (LabeledEdit5-Text.Length() != 0) & (LabeledEdit6-Text.Length() != 0) & (LabeledEdit7-Text.Length() != 0) /如果所需的資訊都已經(jīng)具備,就將這些資訊寫(xiě)入我們剛剛宣告的變數(shù)中 col = LabeledEdit5-Text.ToInt(); row = LabeledEdit6-Text.ToInt(); data = LabeledEdit7-Text; StringGrid-Cellscolrow = data; else ShowMessa

18、ge(請(qǐng)輸入完整的資訊); /顯示應(yīng)該輸入完整的資訊 205-5. StringGrid 範(fàn)例5-7 執(zhí)行結(jié)果215-6. ValueListEdit ValueListEditor最主要的功能就是類(lèi)似hash table,可以指定key以及value給這個(gè)Grid。 ValueListEditor也可以提供視覺(jué)化的修改,不一定要像StringGrid只能由程式控制Cell的Value。 在key的部分,有四種Option可以選擇,分別是keyEdit、keyAdd、keyDelete、以及keyUnique這四種。 Value部分,可以利用Insert或是Cell等不同的方法來(lái)設(shè)定,也可以設(shè)

19、定是不是可以由視覺(jué)化的元件修改等等。 範(fàn)例5-8225-7. RichEdit元件的使用 相信大家一定對(duì)筆記本相當(dāng)不陌生,筆記本它有相當(dāng)簡(jiǎn)單的介面,除了文字編輯區(qū)外就是一個(gè)主選單。我們現(xiàn)在所要介紹的就是這個(gè)文字編輯區(qū),也就是BCB內(nèi)所提供的RichEdit元件。 RichEdit元件放在BCB VCL面板的Standard Page上,放到Form上面感覺(jué)就像是一大塊的白色方塊,當(dāng)然,你希望他不是白色的也可以,只需要改一下屬性就好了。 235-7. RichEdit元件的使用 RichEdit他本身具有相當(dāng)多的屬性和方法可以使用,如果大家還記得我們?cè)谇懊嫠岬匠淌骄庉嬈鞯墓δ?,?yīng)該還記得Cod

20、e Completion這個(gè)功能吧! 因?yàn)樵赗ichEdit或是下一小節(jié)我們要介紹的RichEdit中,有很多屬性跟方法並不會(huì)在Object Inspector中出現(xiàn),除了查詢Help之外,就是Code Completion最好用了。在範(fàn)例5-9中,我們將會(huì)簡(jiǎn)單的介紹一些RichEdit的範(fàn)例,會(huì)讓各位讀者了解該如何對(duì)RichEdit內(nèi)的資料做新增刪除等動(dòng)作。 245-7. RichEdit元件的使用 範(fàn)例5-9void _fastcall TForm1:BitBtn1Click(TObject *Sender) /在RichEdit的最後一行加入字串 if (LabeledEdit1-Tex

21、t.Length() != 0) RichEdit1-Lines-Append(LabeledEdit1-Text); /將字串附加到RichEdit的最後 LabeledEdit1-Text = ; /插入之後將該LabeledEdit清除 /-void _fastcall TForm1:BitBtn2Click(TObject *Sender) /刪除RichEdit的某一行的資料,RichEdit的行數(shù)由第0行開(kāi)始算起 if (LabeledEdit2-Text.Length() != 0) RichEdit1-Lines-Delete(LabeledEdit2-Text.ToInt()

22、; /刪除指定的行數(shù) LabeledEdit2-Text = ; /刪除之後將輸入的行數(shù)清除 /-void _fastcall TForm1:BitBtn3Click(TObject *Sender) /在RichEdit的某一行插入字串,插入字串用的index也是從0算起 if (LabeledEdit3-Text.Length() != 0) & (LabeledEdit4-Text.Length() != 0) /用index和Str儲(chǔ)存我們將會(huì)使用到的資料 int index = LabeledEdit3-Text.ToInt(); AnsiString Str = Label

23、edEdit4-Text; RichEdit1-Lines-Insert(index, Str); /將資料插入到RichEdit中 LabeledEdit3-Text = ; /清除輸入的資料 LabeledEdit4-Text = ; /清除輸入的資料 255-8. RichEdit元件的使用 RichEdit跟RichEdit是很相近的兩個(gè)元件,最大的差別大概就是在RichEdit它可以讀寫(xiě)RTF文件! RichEdit被放在Win32這個(gè)頁(yè)次中,將RichEdit放在Form上面的長(zhǎng)相幾乎跟RichEdit沒(méi)有什麼不同。 RichEdit的基本和RichEdit並沒(méi)有什麼差別,程式碼也差不多。 265-8. RichEdit元件的使用 範(fàn)例5-10void _fastcall TForm1:BitBtn1Click(TObject *Sender) /在RichEdit的最後一行加入字串 if (LabeledEdit1-Text.Length() != 0) RichEdit1-Lines-Append(LabeledEdit1-Text); /將字串附加到R

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論