原創(chuàng)|其它|編輯:龔雪|2014-06-05 14:42:25.000|閱讀 1708 次
概述:本系統(tǒng)中所使用的控件主要為BCGControlBar Pro和TeeChart Pro v2013 ActiveX
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
使用控件
本系統(tǒng)中所使用的控件主要為BCGControlBar Pro和TeeChart Pro v2013 ActiveX。
企業(yè)及項(xiàng)目介紹
西安創(chuàng)元一九九四年,一九九八年更名為西安市創(chuàng)元電器科技有限責(zé)任公司。專注于開發(fā)高、低壓電器試驗(yàn)站數(shù)據(jù)采集處理系統(tǒng)及提供技術(shù)咨詢。CY3000數(shù)據(jù)采集處理系統(tǒng)廣泛使用在我國(guó)高、低壓電器試驗(yàn)站。經(jīng)過十余年磨練及經(jīng)驗(yàn)累積, 最新推出的CY3000D,其性能已達(dá)國(guó)際先進(jìn)水平,運(yùn)行穩(wěn)定,測(cè)試精準(zhǔn),抗干擾能力強(qiáng)。
CY3000D數(shù)據(jù)采集測(cè)試系統(tǒng)是對(duì)已有系統(tǒng)的升級(jí),除了需要保持原有系統(tǒng)的優(yōu)勢(shì)之外,還需要增加新功能,提供更人性化的操作方式和功能,從而帶給用戶更好的體驗(yàn)。
選擇該控件的原因
BCGControlBar是俄羅斯著名的軟件開發(fā)公司BCGSOFT的優(yōu)秀產(chǎn)品,它是全球最早最優(yōu)秀的MFC界面類庫,功能強(qiáng)大,顯示豐富,在國(guó)際上享有盛譽(yù),并屢次獲獎(jiǎng),是VC界面設(shè)計(jì)的必備首選。開發(fā)者可以通過完全的用戶化操作構(gòu)成一些類似于Microsoft Office 2000/XP/2003和Microsoft Visual Studio.NET的應(yīng)用程序(用戶工具欄、菜單、鍵盤等等)。BCGControlBar庫包含了大約150多個(gè)經(jīng)過精心設(shè)計(jì),測(cè)試和具有完備文檔的MFC擴(kuò)展類,這些都可以很容易的應(yīng)用于需要開發(fā)的應(yīng)用程序,節(jié)省大量的開發(fā)和調(diào)試時(shí)間。
Steema是全球領(lǐng)先的圖表類控件公司,它的VCL圖表報(bào)表控件在全球擁有極高知名度。我們公司以前的系統(tǒng)(CY2008、CY2009)就是用它的VCL控件構(gòu)建的,因此對(duì)它的使用上有一定的技術(shù)積累。但是,由于界面部分決定采用BCGControlBar進(jìn)行開發(fā),而BCGControlBar本身帶有Chart控件,能不能用BCGControlBar本身的Chart來替代TeeChart呢?如果能夠替代,在保證系統(tǒng)開發(fā)進(jìn)度的前提下,既省去購(gòu)買TeeChart的費(fèi)用,節(jié)約了開發(fā)成本,又能減少系統(tǒng)對(duì)第三方組件的依賴性。為此,需要從以下幾個(gè)方面進(jìn)行對(duì)比:
二者的顯示性能都很高,這一點(diǎn)兒可以從BCGControlBar示例程序BCGPChartExample的Huge Data例子和TeeChart Pro AX v2013 feature demo程序中的FastLine Speed DrawAll例子中可以看出。筆者并沒有對(duì)加載時(shí)間進(jìn)行具體的測(cè)試,但從二者例子的顯示速度上已經(jīng)能夠感覺出二者性能都能夠滿足系統(tǒng)的要求。
由于行業(yè)的特殊要求,我們系統(tǒng)要求所采集的數(shù)據(jù)要能夠進(jìn)行多通道顯示,每個(gè)通道都有獨(dú)立的Y坐標(biāo)軸(包括Y軸標(biāo)題)和一個(gè)共同的X坐標(biāo)軸,通道之間要求無縫排列,通道連接處的Y軸標(biāo)簽顯示需要自定義格式顯示,并且要能夠高亮顯示當(dāng)前鼠標(biāo)點(diǎn)擊的通道。如圖(1)所示:
對(duì)于這個(gè)需求來講,BCGControlBar和TeeChart都沒有直接的解決方案可以用,他們雖然都有多坐標(biāo)軸功能,如圖(2)、圖(3)所示:
但是,它們都滿足不了系統(tǒng)對(duì)通道連接處無縫的要求,需要我們?cè)诖?基礎(chǔ)上另行開發(fā)實(shí)現(xiàn)。它們都提供了自定義坐標(biāo)軸標(biāo)簽的功能,通過此功能我們可以實(shí)現(xiàn)多通道無縫排列時(shí)Y坐標(biāo)軸刻度的自定義顯示。對(duì)于通道高亮顯示,TeeChart有著更簡(jiǎn)單的方法,它提供了一個(gè)ColorBoard工具,能夠設(shè)置它的顏色和透明度,通過對(duì)它的位置進(jìn)行動(dòng)態(tài)調(diào)整來表示當(dāng)前點(diǎn)擊的通道。
我們系統(tǒng)的用戶需要對(duì)加載的數(shù)據(jù)進(jìn)行放大(區(qū)域放大和沿X軸放大)查看和分析,有時(shí)候需要進(jìn)行多次放大甚至是無級(jí)放大。BCGControlBar內(nèi)置的縮放功能沒有TeeChart豐富,如果要實(shí)現(xiàn)區(qū)域放大,使用BCGControlBar時(shí),還需要進(jìn)行單獨(dú)編碼處理,而TeeChart已有此內(nèi)置功能。
另外,TeeChart還提供其它多種工具,比如DragPoint工具可以用來拖動(dòng)圖表Series、Cursor工具可以添加可以交互的橫縱光標(biāo)等,這些工具與圖表的交互不需要再寫額外的代碼。
總上所述,圖表控件我們最終選用了TeeChart。
控件應(yīng)用情況
創(chuàng)元數(shù)據(jù)采集系統(tǒng)(CY3000D)的主要功能是通過控制硬件數(shù)據(jù)采集卡進(jìn)行數(shù)據(jù)采集,并對(duì)采集的結(jié)果進(jìn)行分析查看,并最終提供試驗(yàn)報(bào)告。由于程序功能相對(duì)比較多,因此程序界面采用Ribbon風(fēng)格。界面設(shè)計(jì)是VC++的弱項(xiàng),但是BCGControlBar提供了一個(gè)Ribbon Designer,用它來設(shè)計(jì)程序主界面就簡(jiǎn)單輕松多了。數(shù)據(jù)采集系統(tǒng)程序主界面如圖(4)所示。
程序整體上可以分為3個(gè)主要部分:采集參數(shù)設(shè)置(包括硬件設(shè)置、通道設(shè)置、公式設(shè)置和顯示設(shè)置)、數(shù)據(jù)分析和試驗(yàn)報(bào)告。系統(tǒng)將硬件設(shè)置、公式設(shè)置和通道設(shè)置的一些參數(shù)傳給采集卡,采集卡依據(jù)這些參數(shù)進(jìn)行數(shù)據(jù)采集后傳遞給采集系統(tǒng),采集系統(tǒng)將采集到的數(shù)據(jù)按照顯示設(shè)置進(jìn)行顯示。
BCGControlBar的CBCGPGridCtrl不論是性能還是功能上,都是相當(dāng)出色的,它內(nèi)置了豐富的單元格類型,比如ComboBox、CheckBox、Button、ColorPicker等等(詳見BCGPGridExample例子中的Cell Types示例)。使用這些內(nèi)置的單元格類型,可以很方便地實(shí)現(xiàn)通道設(shè)置功能,如圖(5)所示。
然而,在實(shí)際開發(fā)過程中,這些內(nèi)置單元格類型還不能完全滿足我們的要求,我們需要有一種單元格類型,可以設(shè)置更為復(fù)雜的參數(shù),于是我們從CBCGPGridItem繼承一個(gè)我們自定義的單元格類型的類(CGridPopupWndItem),該類有一個(gè)成員變量CPopupDialig,在點(diǎn)擊單元格事件中動(dòng)態(tài)調(diào)整CPopupDialog的位置,就可以實(shí)現(xiàn)下拉對(duì)話框的效果。如圖(6)所示:
有了BCGControlBar這些靈活的擴(kuò)展機(jī)制和豐富的擴(kuò)展類,可以很便捷地實(shí)現(xiàn)硬件設(shè)置和顯示設(shè)置,如圖(7)所示:
圖(7)
對(duì)于采集到的波形數(shù)據(jù),要能夠?qū)@些波形進(jìn)行輸出打印,輸出的對(duì)象可以是真實(shí)的打印機(jī)或者是虛擬打印機(jī),打印的質(zhì)量要和系統(tǒng)中看到的相一致,特別是打印出的波形不能有鋸齒。TeeChart內(nèi)置打印機(jī)對(duì)象(Printer),調(diào)用它的BeginDoc、PrintChart/PrintPartial以及EndDoc等方法來實(shí)現(xiàn)出圖打印,但是它會(huì)根據(jù)打印區(qū)域的大小對(duì)TeeChart中的數(shù)據(jù)進(jìn)行處理,導(dǎo)致最終打印質(zhì)量不能夠滿足要求。另外,我們的數(shù)據(jù)采集系統(tǒng)中除了主顯示窗口外,還有一個(gè)放大窗口,因此需要對(duì)TeeChart的打印功能進(jìn)行擴(kuò)展,雖然TeeChart的Printer對(duì)象的PrintPartial方法能夠解決多窗口多TeeChart同時(shí)輸出的問題,但是打印質(zhì)量依然是無法保證的。TeeChart提供了輸出為EMF格式文件的功能(EMF是一種矢量文件格式,可以始終保持圖形的精度),通過對(duì)EMF文件的拼接,最終解決了多窗口中TeeChart輸打印的質(zhì)量問題。效果如圖(8)、圖(9)所示:
需要注意的是,TeeChart輸出EMF格式文件時(shí),字體會(huì)顯得特別的小,因此,在輸出之前需要對(duì)先將相關(guān)字體變大,等輸出完畢后,再將字體大小恢復(fù)到原來就可以了。
另外,系統(tǒng)對(duì)波形數(shù)據(jù)進(jìn)行分析時(shí),需要為波形添加點(diǎn)標(biāo)注、X方向標(biāo)注、Y方向標(biāo)注和斜標(biāo)注等,而且要能夠?qū)c(diǎn)標(biāo)注、X方向標(biāo)注以及Y方向的標(biāo)注能夠進(jìn)行拖動(dòng)。TeeChart提供了豐富的內(nèi)置工具,使用Rectangle工具可以繪制標(biāo)簽,使用ArrowSeries可以繪制標(biāo)注的錨點(diǎn)和錨線,使用DragPoint工具可以實(shí)現(xiàn)標(biāo)注的拖動(dòng)。圖(9)為標(biāo)注的實(shí)際顯示效果,高亮色表示當(dāng)前標(biāo)注為活動(dòng)標(biāo)注。
CY3000D有兩個(gè)縱光標(biāo)分別為主輔光標(biāo),除用不同的顏色進(jìn)行區(qū)分之外,另外每個(gè)光標(biāo)的上端還標(biāo)有數(shù)字,這種數(shù)字上標(biāo)的實(shí)現(xiàn)途徑有多種,比如可以用使用位圖圖標(biāo)來實(shí)現(xiàn),也可以使用TeeChart內(nèi)置的Rectangle工具來動(dòng)態(tài)跟隨來實(shí)現(xiàn),但是這兩種方案都有一種缺陷,那就是上端的數(shù)字標(biāo)注在光標(biāo)快速移動(dòng)時(shí)會(huì)有延遲,給人一種反應(yīng)遲鈍的感覺,用戶體驗(yàn)不好。最后采用的方案是使用TeeChart的Canvas對(duì)象直接進(jìn)行繪制,從這一點(diǎn)兒也可以看出TeeChart的功能強(qiáng)大!
我還想說...
BCGControlBar真不愧為MFC框架下最為優(yōu)秀的組件之一,通過它極大地提高了系統(tǒng)的開發(fā)進(jìn)度,是MFC框架下的首選。在系統(tǒng)的逐步開發(fā)過程中,才發(fā)現(xiàn)原來TeeChart的功能是如此強(qiáng)大,感覺它在Chart的表示方面幾乎達(dá)到了無所不能地步!
另外,在系統(tǒng)開發(fā)前期,我們需要對(duì)軟件(主要是Chart控件)進(jìn)行調(diào)研,主要對(duì)控件的功能予以初步的評(píng)估,看是否能夠滿足我們的需求,由于我們對(duì)要調(diào)研的軟件并不是十分的熟悉,有些深層次的問題還得和國(guó)外的開發(fā)商進(jìn)行咨詢,溝通難而且反饋慢。慧都公司市場(chǎng)部和技術(shù)部在這時(shí)給予了我們極大的支持和幫助,我們所提出的問題都能及時(shí)得到解答。在這里我代表西安創(chuàng)元向慧都公司的曾經(jīng)給予我們大力支持的市場(chǎng)部和技術(shù)部表示衷心的感謝!
聲明
本人提交此案例參加慧都第一屆案例大賽,并同意本案例內(nèi)容用于慧都科技和該控件廠商的市場(chǎng)宣傳。
案例提交人信息
姓名:梁紹輝
職位:開發(fā)工程師
所在企業(yè):西安創(chuàng)元電器科技
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)