溫 佳
(中北大學,山西 太原 030051)
C++Bulider6 是Borland 公司出品的一種基于C++的快速開發(fā)工具。它不僅易學易用,而且功能強大、目標程序效率高。
C++Builder6 具有快速的可視化開發(fā)環(huán)境,充分利用已經發(fā)展成熟的Delphi 的可視化組件庫(visual component library,VCL),只要簡單地把控件(Component)拖到窗體(Form)上,定義一下它的屬性,設置一下它的外觀,就可以快速地建立應用程序界面;C++Builder 內置了100 多個完全封裝了Windows 公用特性且具有完全可擴展性(包括全面支持ActiveX 控件)的可重用控件;C++Builder 具有一個專業(yè)C++開發(fā)環(huán)境所能提供的全部功能:快速、高效、靈活的編譯器優(yōu)化,逐步連接,CPU 透視,命令行工具等。它實現了可視化的編程環(huán)境和功能強大的編程語言(C++)的完美結合。
MSComm 作為一個串行通訊控件為程序員串口通訊編程節(jié)省了很多時間。我們利用MSComm 控件進行簡單的設置就可以方便地進行串口通信[1]。因為MSComm 控件為第三方控件,首先我們需要在C++Builder6 內安裝MSComm控件。安裝好之后,可以在ActiveX 菜單下發(fā)現一個小電話圖標。此時我們將該圖標拖到窗體(FORM)上。
雙擊該圖標設置其屬性,這里我們設置CommPort 為3(串口3),設置波特率為4800,無校驗,8 位數據,1 位停止位。不設置握手協(xié)議。
它提供兩種處理通信的方式:一是事件驅動方式,一是查詢方式。我們本次將利用事件驅動方式。在許多情況下,在事件發(fā)生時需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者Carrier Detect(CD)或Request To Send(RTS)線上一個字符到達或一個變化發(fā)生時。在這些情況下,可以利用MSComm 控件的OnComm 事件捕獲并處理這些通訊事件。
設置好MSComm 控件后,需要我們雙擊窗體(FORM),系統(tǒng)會自動生成FormCreate 函數,我們此時需要添加代碼進去。每當打開該窗體,系統(tǒng)就會自動執(zhí)行FormCreate 函數,所以我們需要把初始化的一些參數寫入該函數,使其自動運行。我們設置Rthreshold 為1,接收緩沖區(qū)收到每一個字符都會使MSComm 控件產生OnComm 事件,設置Sthreshold 屬性為1,當傳輸緩沖區(qū)完全空時,MSComm 控件產生OnComm事件。如下為設置初始化代碼:
同時,我們可以添加MSComm 組件的OnComm 事件的消息響應函數,只需要點小電話圖標,然后在對象檢視器的事件中在OnComm 的框中雙擊系統(tǒng)就會自動生成。我們只需要添加如下代碼即可判斷。括號內可進一步添加下一步希望的操作。
簡單設置好串口通信控件后,我們就可以拖入各種所需的控件,可以是系統(tǒng)自帶的控件或者第三方控件。
1)單擊Form 窗體修改其Caption 屬性為全自動綜合驗光儀。在組件面板的Standard 欄中拖入1 個GroupBox 控件,并調整其大小。之后將拖入的按鍵與編輯框將分別放在這4 個GroupBox 之上。使用GroupBox 組件可以將部分組件集合起來,使界面更加整潔美觀[2]。
2)在組件面板Standard 欄中拖入8 個Edit 框,在左側的對象檢視器中可以設置大小、字體及顯示內容等等。這里我們設置Width 為126,Height 為39,Text 為0。我們設置好這幾項之后,再在組件面板Standard 欄中拖入14 個Button 按鍵,分別對其命名修改大小。并對齊擺放。
圖1 全自動綜合驗光儀主界面
3)分別為每個按鍵添加控制代碼,雙擊某按鍵便進入其代碼編輯界面。當鼠標單擊該按鍵會產生OnClick 事件,此時讀取對應Edit 框中數據并進行相應計算后,利用MSComm控件通過串口發(fā)送指令。例如以下代碼,讀取Edit1 中內容經一系列計算后發(fā)送5 字節(jié)指令。
4)完成基本界面后當我們點擊輔助鏡片或PD 的按鍵時,我們希望能彈出新的界面供我們操作,這時我們就需要添加新的窗體進來。點擊菜單欄文件按鈕新建窗體(或者我們可以連續(xù)按FNF 這3 個按鍵)打開后建立如圖2 所示窗體,點擊窗體修改Caption 為PD 表明此窗體為瞳距測量窗體,添加兩個Button 控件。
圖2 全自動綜合驗光儀PD 界面
5)將其命名保存,這時我們需要將該窗體頭文件添加到主界面程序中,主界面才能夠調用該界面。雙擊按鍵為其添加控制程序。
6)繼續(xù)制作輔助鏡片界面,如同PD 界面一樣新建窗體,同樣我們需要將按鍵拖入,因為我們要方便操作,所以我們在按鍵上貼上各種鏡片的示意圖以方便操作。這時我們不能再使用組件面板Standard 欄中的Button。因為它不能導入圖片。故我們使用Additional 欄中SpeedButton 按鍵,該按鍵能導入BMP 圖片。導入所需圖片使操作界面清晰明了。如圖3 所示為打開位,遮蓋片,交叉柱鏡片,紅、綠濾光片,針孔片等。根據其不同功能為每個按鍵添加控制程序。
圖3 全自動綜合驗光儀輔助鏡片界面
7)同理做另一側輔助鏡片界面。
做完上述工作后點Run 按鈕發(fā)現界面不夠美化。于是我們繼續(xù)添加第三方控件VCL Skin 控件。安裝后如同MSComm 控件將其拖入界面中。其設置非常簡單,單擊該圖標,在對象檢視器中設置Active 屬性為true。設置SkinStore瀏覽計算機文件夾打開連同該組件一起下載的皮膚文件夾,并從其中選定某一皮膚[3]。換膚后如下圖所示:
圖4 全自動綜合驗光儀主界面
圖5 全自動綜合驗光儀PD 界面
通過使用C++Bulider 完成了全自動綜合驗光儀上位機界面設計。該界面簡潔直觀,方便控制,同時利用串口通信控制具有很高的可靠性,符合驗光流程標準。
圖6 全自動綜合驗光儀輔助鏡片界面
[1]李江全,魏忠?guī)r,姚帥,等.單片機通信與控制應用編程實例[M].北京:中國電力出版社,2012:96-101.
[2]陸衛(wèi)忠,劉文亮.C++Builder6 程序設計教程[M].北京:科學出版社,2011:66-73.
[3]馮妍黃,鋁文,馬煜.C++Builder 案例開發(fā)集錦[M].北京:電子工業(yè)出版社.2008:21-24.