第五章 C++ Builder 顯示與輸入介面

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

計算機程式語言實習課.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
第二十四章 使用Indy元件設計網路程式 在上一章我們提到了如何在BCB中開發一些基本的網路程式,在這一章我們要介紹的也是網路程式,不過在這邊我們是使用Indy相關的VCL元件來開發網路程式。在BCB中,Indy所提供的功能比FastNet提供的功能還要強大還要好用。
第二十三章 InterNet網路程式設計 有沒有想過自己寫個Service呢?想不想自己也寫一套發信程式呢?在這一章節裡,我們將介紹socket的觀念以及BCB在Internet上開發應用程式的方法。
Chapter 5 迴圈.
第二十八章 開發新的VCL元件 雖然BCB內提供了很多VCL元件,但是一定還有一些我們常常需要用的介面並沒有製作成VCL元件,或是一些個人化的介面,我們也有需要做成VCL元件。在第十三章,我們將介紹如何自行開發新的VCL元件。
進階輸出入元件(一) 本書第三章已介紹Form 、Label 、Edit 及Button 等最基本的輸出入元件, 本章將繼續介紹一些可以提昇輸出入視覺效果的元件, 例如CheckBox 、RadioButton 及RadioGroup 等17 個進階元件, 學習本章將可提昇使用介面的親和性。 核對框(CheckBox)
C#.
LINQ 建國科技大學 資管系 饒瑞佶.
第二十九章 DLL / LIB函式庫開發 當我們開發程式到一個階段之後,我們一定會希望各個Component的程式碼可以分開的越清楚越好。而這一章最主要就是要告訴各位讀者,我們常在Windows系統中看到的dll或是lib的檔案該怎麼實作?做出這樣的library我們又該如何運用?為什麼使用dll或是lib有利於我們開發程式?以上這些疑問都將會在這一章中得到解答。
9/28號專題報告 Web網頁遊戲 曾建瑋.
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
基础综合 C++ Builder 显示与输入接口
Q101 在701 SDX Linux上的標準安裝與使用程序v2
页眉 基础综合 C++ Builder 按钮组件
資料庫操作.
Google Data API Spreadsheet
Controls.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
R教學 安裝RStudio 羅琪老師.
第十二章 Win32環境程式設計 這一章節可以說是本書精華之一,Win32程式設計算是比較複雜的部分,但是我們以最簡單的敘述帶領著大家進入Win32程式設計的殿堂,讓你寫出來的程式具有一定的水準以上。若能將本章與下一章的技巧靈活運用,更能讓大家寫出高階的視窗程式。
系統設定 IE8相容性檢視
Java 程式設計 講師:FrankLin.
第六章 擷取輸入裝置的訊息和事件 鍵盤、滑鼠,是我們最常使用的輸入工具。我們是不是常常希望可以再按下某個按鈕後就可以有哪些功能出現呢?沒錯,這就是這一章節的重點,在第四章,我們提到了有關鍵盤、滑鼠、以及RS-232介面的事件及訊息偵測,讓我們更能掌控電腦週邊的硬體。
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
第一單元 建立java 程式.
VS.NET 2003 IDE.
第二次電腦實習課 說明者:吳東陽 2003/10/07.
Ch20. 計算器 (Mac 版本).
UpToDate Anywhere 設定方法
精明使用互聯網教育計劃 K9下載及安裝教學篇.
HTML – 超連結與圖片 資訊教育.
表格(HTML – FORM).
Introduction to C Programming
期末考.
GUI Title and GUI Status
挑戰C++程式語言 ──第8章 進一步談字元與字串
雙按button1,2,3,4 Method 方法/動作 textBox2.Text textBox1 textBox3.Text 轉為數字 c是數字 int c = int.Parse(textBox1.Text) + …; textBox3.Text = c.ToString();
Controls.
GridView.
GridView操作 (II).
視窗程式中,佔最大部分的大概就是按鈕了。在這一章裡面,我們詳細的介紹各種標籤、按鈕的VCL元件,進而介紹一些Tool Bar的使用方法。
如何使用Gene Ontology 網址:
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
目錄 在中文輸入法底下打標點符號 Backspace退位鍵 Delete刪除鍵 Enter確定鍵 NumLock數字卡鎖鍵
DRC with Calibre 課程名稱:VLSI 報告人:黃家洋 日期: 改版(蔡秉均) 1.
MicroSim pspice.
利用 EditorConfig 自訂文字編輯器設定
表格(HTML – FORM)
挑戰C++程式語言 ──第7章 輸入與輸出.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
國立台灣大學 關懷弱勢族群電腦課程 By 資訊工程 黃振修
1757: Secret Chamber at Mount Rushmore
資料表示方法 資料儲存單位.
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
多國語系 建國科技大學 資管系 饒瑞佶.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
SQLite資料庫 靜宜大學資管系 楊子青.
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
InputStreamReader Console Scanner
Presentation transcript:

第五章 C++ Builder 顯示與輸入介面 視窗程式中,佔最大部分的大概就是按鈕跟一些輸入框了。在這一章裡面,我們詳細的介紹各種標籤、按鈕以及輸入的VCL元件,進而介紹一些按鈕軸的使用方法,以及類似筆記本的多行輸入窗。

大綱 5-1. 標籤的使用(Label) 5-2. 使用編輯框(Edit) 5-3. 遮罩編輯框(MaskEdit) 5-4. 標籤編輯框(LabeledEdit) 5-5. StringGrid 5-6. ValueListEdit 5-7. RichEdit元件的使用 5-8. RichEdit元件的使用 本章習題

5-1. 標籤的使用(Label) 標籤,簡單來說就是視窗程式上的文字方塊。標籤的使用相當容易,也很直觀,在之前的程式我們也已經用過Label了!我們將利用範例5-1來說明Label的詳細用法。 Label這個VCL元件放在Standard Page上,選取後也是一樣將游標移到Form上,並且在要放上Label的地方按一下滑鼠左鍵就可以了,其實任何VCL元件都是這樣子使用。

5-2. 使用編輯框(Edit) Edit也是視窗程式中很重要的一個元件,最常見的是將Label和Edit一起使用,因為這樣可以讓使用者很清楚的知道,這個編輯框要輸入的東西是什麼。 Edit這個元件也被放在Standard這一個頁次中,我們將利用範例5-2和5-3把編輯框跟標籤緊緊的結合起來,再配合上按鈕,來完成我們的範例。

5-2. 使用編輯框(Edit) 利用編輯框實作密碼輸入 在很多場合我們需要輸入密碼之類的機密資料,我們通常不會直接讓輸入的資料出現在Edit上,這時候只要修改Edit一個屬性就夠了。 『PasswordChar』。原本這個屬性的設定值是『#0』,我們將之改成我們希望它出現的字元,例如『*』,這樣當我們再輸入字元的時候,一率都是使用『*』來顯示。我們將密碼輸入的實際範例放在範例5-3裡。

5-3. 遮罩編輯框(MaskEdit) 遮罩編輯框跟編輯框的功能很相近,只是遮罩編輯框可以先設定好輸入的格式,所以當使用者在使用的時候,就可以限制使用者輸入的文字。 例如我們希望使用者輸入身分證字號,格式就是一個英文字母加上九個數字,但是有些使用者就會故意亂輸入,這時後除非我們在程式中寫入檢查的程式碼,不然就只能任由使用者亂來了。 MaskEdit被放置在Additional這個頁次內,將MaskEdit放在Form上跟Edit的外觀幾乎沒有什麼不同,但是MaskEdit主要是擁有一個Edit沒有的屬性,就是EditMask這個屬性。

5-3. 遮罩編輯框(MaskEdit) Mask中可以使用的符號 Mask位元 代表意義 ! > 在這個符號後面的所有英文字母都會被強制轉換為大寫字母。直到“<”符號出現才恢復。 < 在這個符號之後的英文字母全部變成小寫,直到“>”符號出現才恢復。 <> 不檢查英文字母到底是大寫或是小寫 \ 顯示特別字元,只需在要顯示的字元前加上這個符號即可。 L 只可以輸入英文字母,而且一定被要求輸入,不分大小寫。 l 只可以輸入英文字母,但是不一定要輸入。不分大小寫。 A 可以輸入英文字母和數字,而且一定要輸入,英文字母不分大小寫。

5-3. 遮罩編輯框(MaskEdit) Mask中可以使用的符號 Mask位元 代表意義 a 可以輸入英文字母和數字,但是不一定要輸入,英文字母不分大小寫。 C 可以輸入任何字元,不過一定要輸入。 c 可以輸入任何字元,但是不一定要輸入。 只可以輸入數字,而且一定要輸入。 9 只可以輸入數字,但是不一定要輸入。 # 可以輸入數字或是正負符號。 : 用來分隔時間中的時、分、秒。 / 用來分隔時間中的年、月、日。 ; 用來分隔mask的欄位。 _ 空白字元,輸入時將會跳過這個字元。但是會在MaskEdit上出現這個位元需要輸入(有底線)。

5-3. 遮罩編輯框(MaskEdit) 範例5-4的執行結果

5-4. 標籤編輯框(LabeledEdit) 在前面我們介紹過Label跟Edit,也在範例中展現出Label跟Edit合作無間的功能。 在BCB 6裡面,多了一個相當好用的元件,他叫做『LabeledEdit』,他將Label跟Edit合起來,我們不需要再拉兩個VCL元件下來,只要拉一個LabeledEdit就等於拉了一個Label和Edit。

5-5. StringGrid StringGrid最主要的功能就是提供一個Grid可以讓我們儲存一堆相關的文字。 例如我們將在範例5-6實做的『九九乘法表』就是一個好例子。 其餘,像是很多需要填寫的表格,或是工廠機台傳出來的報表等等,都很適合用StringGrid來表現!

5-5. StringGrid 範例5-6:利用StringGrid實作九九乘法表 StringGrid需要改變的屬性 屬性 設定說明 ColCount 就是設定Column的數目,在這邊雖然九九乘法表只需要九個Column,但是因為我們需要第一個Column,所以必須要設定成『10』 DefaultColWidth 設定每個Column的寬度,使該StringGrid不需要使用Scroll Bar RowCount 就是設定Row的數目,在這邊雖然九九乘法表只需要九個Row,但是因為我們需要第一個Row,所以必須要設定成『10』 DefaultRowHeight 設定每個Row的高度,使該StringGrid不需要使用Scroll Bar

5-5. StringGrid 範例5-6:利用StringGrid實作九九乘法表 主要程式碼 void __fastcall TForm1::BitBtn1Click(TObject *Sender) { int i, j; //設定Row Header 以及Column Header的數字 for (i = 0 ; i <= 9 ; i++) { if (i == 0 ) { //設定StringGrid中最左上角那一小格的資料 StringGrid1->Cells[0][i] = "九九乘法"; } else { //設定Column Header的值..就是最上面那一排的資料 StringGrid1->Cells[i][0] = IntToStr(i); //設定Row Header的值..就是最左邊那一排的資料 StringGrid1->Cells[0][i] = IntToStr(i); //計算九九乘法表內的資料 for (i = 1 ; i <= 9 ; i++) for (j = 1 ; j <=9 ; j++) StringGrid1->Cells[i][j] = IntToStr(i * j);

5-5. StringGrid 範例5-6:利用StringGrid實作九九乘法表 執行結果

5-5. StringGrid 動態產生StringGrid 在這個範例中,main.h以及main.cpp都有動到,跟平常只有修改main.cpp有點不一樣。

5-5. StringGrid 範例5-7:main.h class TForm1 : public TForm { __published: // IDE-managed Components //省略 private: // User declarations public: // User declarations //宣告一個StringGrid的指標 //讓我們在等一下可以順利的動態產生 TStringGrid *StringGrid; __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; #endif

5-5. StringGrid 範例5-7:main.cpp void __fastcall TForm1::BitBtn1Click(TObject *Sender) { //利用if來判斷是不是四個LabeledEdit都有輸入資料 //如果都有輸入資料..就new一個TStringGrid出來 //並且對該StringGrid做一些屬性的設定 //如果沒有輸入資料..就顯示一個MessageBox通知使用者 if ((LabeledEdit1->Text.Length() != 0) && (LabeledEdit2->Text.Length() != 0) && \ (LabeledEdit3->Text.Length() != 0) && (LabeledEdit4->Text.Length() != 0)) { StringGrid = new TStringGrid(GroupBox2); //new一個StringGrid StringGrid->Parent = GroupBox2; //將StringGrid的parent設定為GroupBox2 StringGrid->Width = 577; //設定StringGrid的寬度 StringGrid->Height = 209; //設定StringGrid的高度 StringGrid->Top = 24; //設定StringGrid對於GroupBox2的上緣的距離 StringGrid->Left = 16; //設定StringGrid對於GroupBox2的左邊界的距離 //設定該StringGrid的Cell個數的相關屬性 StringGrid->ColCount = StrToInt(LabeledEdit1->Text); StringGrid->RowCount = StrToInt(LabeledEdit2->Text); StringGrid->FixedCols = StrToInt(LabeledEdit3->Text); StringGrid->FixedRows = StrToInt(LabeledEdit4->Text); StringGrid->Visible = true; //將該StringGrid的Visible設定為可看見 StringGrid->Enabled = true; //將該StringGrid設定成Enable } else { //顯示應該輸入完整的資訊 //在這邊會跳出一個MessageBox ShowMessage("請輸入完整的資訊"); 範例5-7:main.cpp

5-5. StringGrid 範例5-7:main.cpp void __fastcall TForm1::BitBtn2Click(TObject *Sender) { //如果StringGrid已經被new出來了,就可以掃過所有的Cells //並把所有的Cell的值都設定為空字串,如此可以模擬出清除Grid資料的感覺 if (StringGrid != NULL) { for (int i = 0 ; i < StringGrid->ColCount ; i++) for (int j = 0 ; j < StringGrid->RowCount ; j++) StringGrid->Cells[i][j] = ""; } //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn3Click(TObject *Sender) //將已經new出來的StringGrid delete掉 //這個動作會完整的刪除已經new出來的物件 delete StringGrid;

5-5. StringGrid 範例5-7:main.cpp void __fastcall TForm1::BitBtn4Click(TObject *Sender) { //宣告我們要設定Cell的colunm, row, 以及data的變數 int col, row; AnsiString data; //判斷是不是我們需要的資料都具備了 if ((LabeledEdit5->Text.Length() != 0) && (LabeledEdit6->Text.Length() != 0) && \ (LabeledEdit7->Text.Length() != 0)) { //如果所需的資訊都已經具備,就將這些資訊寫入我們剛剛宣告的變數中 col = LabeledEdit5->Text.ToInt(); row = LabeledEdit6->Text.ToInt(); data = LabeledEdit7->Text; StringGrid->Cells[col][row] = data; } else { ShowMessage("請輸入完整的資訊"); //顯示應該輸入完整的資訊

5-5. StringGrid 範例5-7 執行結果

5-6. ValueListEdit ValueListEditor最主要的功能就是類似hash table,可以指定key以及value給這個Grid。 ValueListEditor也可以提供視覺化的修改,不一定要像StringGrid只能由程式控制Cell的Value。 在key的部分,有四種Option可以選擇,分別是『keyEdit』、『keyAdd』、『keyDelete』、以及『keyUnique』這四種。 Value部分,可以利用Insert或是Cell等不同的方法來設定,也可以設定是不是可以由視覺化的元件修改等等。 範例5-8

5-7. RichEdit元件的使用 相信大家一定對筆記本相當不陌生,筆記本它有相當簡單的介面,除了文字編輯區外就是一個主選單。我們現在所要介紹的就是這個文字編輯區,也就是BCB內所提供的RichEdit元件。 RichEdit元件放在BCB VCL面板的Standard Page上,放到Form上面感覺就像是一大塊的白色方塊,當然,你希望他不是白色的也可以,只需要改一下屬性就好了。

5-7. RichEdit元件的使用 RichEdit他本身具有相當多的屬性和方法可以使用,如果大家還記得我們在前面所提到程式編輯器的功能,應該還記得Code Completion這個功能吧! 因為在RichEdit或是下一小節我們要介紹的RichEdit中,有很多屬性跟方法並不會在Object Inspector中出現,除了查詢Help之外,就是Code Completion最好用了。在範例5-9中,我們將會簡單的介紹一些RichEdit的範例,會讓各位讀者了解該如何對RichEdit內的資料做新增刪除等動作。

5-7. RichEdit元件的使用 void __fastcall TForm1::BitBtn1Click(TObject *Sender) { //在RichEdit的最後一行加入字串 if (LabeledEdit1->Text.Length() != 0) { RichEdit1->Lines->Append(LabeledEdit1->Text); //將字串附加到RichEdit的最後 LabeledEdit1->Text = ""; //插入之後將該LabeledEdit清除 } //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn2Click(TObject *Sender) { //刪除RichEdit的某一行的資料,RichEdit的行數由第"0"行開始算起 if (LabeledEdit2->Text.Length() != 0) { RichEdit1->Lines->Delete(LabeledEdit2->Text.ToInt()); //刪除指定的行數 LabeledEdit2->Text = ""; //刪除之後將輸入的行數清除 void __fastcall TForm1::BitBtn3Click(TObject *Sender) { //在RichEdit的某一行插入字串,插入字串用的index也是從"0"算起 if ((LabeledEdit3->Text.Length() != 0) && (LabeledEdit4->Text.Length() != 0)) { //用index和Str儲存我們將會使用到的資料 int index = LabeledEdit3->Text.ToInt(); AnsiString Str = LabeledEdit4->Text; RichEdit1->Lines->Insert(index, Str); //將資料插入到RichEdit中 LabeledEdit3->Text = ""; //清除輸入的資料 LabeledEdit4->Text = ""; //清除輸入的資料 範例5-9

5-8. RichEdit元件的使用 RichEdit跟RichEdit是很相近的兩個元件,最大的差別大概就是在RichEdit它可以讀寫RTF文件! RichEdit被放在Win32這個頁次中,將RichEdit放在Form上面的長相幾乎跟RichEdit沒有什麼不同。 RichEdit的基本和RichEdit並沒有什麼差別,程式碼也差不多。

5-8. RichEdit元件的使用 void __fastcall TForm1::BitBtn1Click(TObject *Sender) { //在RichEdit的最後一行加入字串 if (LabeledEdit1->Text.Length() != 0) { RichEdit1->Lines->Append(LabeledEdit1->Text); //將字串附加到RichEdit的最後 LabeledEdit1->Text = ""; //插入之後將該LabeledEdit清除 } //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn2Click(TObject *Sender) { //刪除RichEdit的某一行的資料,RichEdit的行數由第"0"行開始算起 if (LabeledEdit2->Text.Length() != 0) { RichEdit1->Lines->Delete(LabeledEdit2->Text.ToInt()); //刪除指定的行數 LabeledEdit2->Text = ""; //刪除之後將輸入的行數清除 void __fastcall TForm1::BitBtn3Click(TObject *Sender) { //在RichEdit的某一行插入字串,插入字串用的index也是從"0"算起 if ((LabeledEdit3->Text.Length() != 0) && (LabeledEdit4->Text.Length() != 0)) { //用index和Str儲存我們將會使用到的資料 int index = LabeledEdit3->Text.ToInt(); AnsiString Str = LabeledEdit4->Text; RichEdit1->Lines->Insert(index, Str); //將資料插入到RichEdit中 LabeledEdit3->Text = ""; //清除輸入的資料 LabeledEdit4->Text = ""; //清除輸入的資料 範例5-10

本章習題 自己開發一個密碼輸入對話窗,需包含有使用者名稱、密碼兩欄,以及確定及取消兩個按鈕。 利用MaskEdit實作一個身分證字號檢查程式,用來檢查使用者輸入的身分證字號是不是合法的。 將記事本的功能實作完成。 將WordPad的功能實作完成。