天天看點

TeeChart在VC中實時曲線繪制的應用

TeeChart在VC中實時曲線繪制的應用

一:TeeChart介紹

TeeChart Pro是一款提供上百種2D和3D圖形風格、40種數學和統計功能、加上無限制的軸和22種調色闆元件供選擇。提供上百種2D和3D圖形風格、40種數學和統計功能、加上無限制的軸和22種調色闆元件供您選擇。提供上百種2D和3D圖形風格、40種數學和統計功能、加上無限制的軸和22種調色闆元件供選擇,TeeChart還包括一個強大的、完整的編輯對話框,幾乎可用于每個元件和子元件,允許你快速的設計複雜圖表應用程式。圖表編輯器通過TeeCommander元件進一步得到增強,它提供一次點選通路圖表編輯器和共同特征。

二:主要特性

●是32位ActiveX控件,可以在VB、Delphi、MS Office等多種程式設計環境下使用;

●可以直接存取ODBC資料源;

●具有11種标準的和9種擴充的Series類型;

●提供16種統計函數;

●支援2D和3D效果,支援縮放和滾動;

●可以将圖表輸出為Bitmap、Metafile、JPEG 或者Native Chart 格式;

●支援使用者繪圖和列印;

●是內建化的設計工具;

●提供例子和線上幫助。

三:TeeChart類的屬性和方法

TeeChart的主類是TChart。TChart中使用了衆多的屬性方法和事件,随着版本的更新将越來越豐富。這使得TChart具有非常強大的功能。本文僅簡單地介紹其中一些重要類的屬性和方法。

●TChart.Height:圖表的高度(像素); 

●TChart.Width:圖表的寬度(像素);

●TChart.Header:圖表的題頭(Ititles類);

●TChart.Series:序列(Series類的數組);

●TChart.Axes:坐标軸(Iaxes類);

●TChart.Legend:圖例(Legend類);

●TChart.Panel:面闆(Ipanel類);

●TChart.Canvas:畫布(Canvas類)。

Series是要顯示的資料的主體。在一個圖表中可以有一個或多個序列,每個序列可以有不同的顯示類型,如Line、Bar、Pie等等。

Axes控制圖表坐标軸的屬性,在預設的情況下,坐标軸可以自動地根據不同的資料設定好标度範圍和間隔,當然也可以手工調整。

Legend控制圖表的圖例顯示。Legend是圖表中的一個長方形的用來顯示圖例标注的區域。可以标注Series的名稱或者Series中的項目和數值。

Panel可以設定圖表的背景。可以使用漸變的顔色或者圖像檔案作為整個圖表的背景

Canvas可以讓設計者繪制自己的圖形。使用方法和Delphi中的Canvas一樣。有TextOut、LineTo、Arc等各種畫圖的方法可以調用。

TChart的一些屬性實際上是其他類的變量,這些類又具有自己的屬性和方法。如Ititles類又具有Text、Color、Font等屬性,我們可以用這些屬性來設定題頭的文本、顔色和字型。

TeeChart和其他的圖表控件相比,有一個非常重要的特點是TeeChart可以把圖表儲存為一個JPEG格式的圖形檔案。調用格式如下:

TChart.Export.SaveToJPEGFile (FileName,Gray,Performance,Quality,Width,Height)

其中FileName是JPEG檔案的儲存路徑和檔案名,路徑應該是作業系統中的絕對路徑,而不是IIS中的相對路徑,IIS對相應的儲存目錄應該具有寫權限。Gray指明是否儲存為黑白圖像。Performance指明JPEG是生成品質優先還是速度優先。Quality是一個0到100的整數,100時JPEG品質最好,但檔案最大;Quality越小則生成的檔案越小,但圖像品質也随之下降。

四:VC

  對于Visual C++就不做多的介紹了,因為發現也沒有什麼特别的語言去介紹該語言的功能。這裡采用Visual C++6,TeeChart版本為5來實作。

五:實作辦法

一)導入vc中

1)  将TeeChart5進行系統注冊。

2)  在VC中選擇 Project / Add to Project / Components And Controls/下選擇Registered ActiveX Controls,然後找到TeeChart Pro Activex control v5。選擇确定即可,這樣在我們的項目中出現很多的類,同時在控件區域會出現

TeeChart在VC中實時曲線繪制的應用

二)屬性設定

單擊右鍵,選擇Edit …..

TeeChart在VC中實時曲線繪制的應用

當然,也可以根據要求,在語言裡面進行處理。但是也必須包含以下的頭檔案

#include "tchart.h"

#include "series.h"

#include "valuelist.h"

#include "axes.h"

#include "axis.h"

#include "pen.h"

#include "axislabels.h"

#include "teefont.h"

#include "axistitle.h"

#include "aspect.h"

#include "fastlineseries.h"

#include "titles.h"

#include "fastlineseries.h"

#include "panel.h"

#include "legend.h"

#include "tools.h"

#include "toollist.h"

#include "annotationtool.h"

設定資訊如下(該CHART控件名稱為:m_Chart)

   //清空chart -----------------------------------

         m_Chart.ClearChart();

      m_Chart.RemoveAllSeries();

  //CHART架構

        m_Chart.GetFrame().SetVisible(true);

        m_Chart.GetFrame().SetColor(RGB(255,255,255));

        m_Chart.GetPanel().SetColor(RGB(255,255,255));

        m_Chart.GetLegend().SetVisible(false);

// 添加3條曲線 ---------------------------------

m_Chart.AddSeries(0);

m_Chart.AddSeries(0);

m_Chart.AddSeries(0);

// 設定3條曲線的坐标軸 -------------------------

m_Chart.Series(0).SetVerticalAxis(0);

m_Chart.Series(1).SetVerticalAxis(0);

m_Chart.Series(2).SetVerticalAxis(0);

m_Chart.Series(0).SetHorizontalAxis(1);

m_Chart.Series(1).SetHorizontalAxis(1);

m_Chart.Series(2).SetHorizontalAxis(1);

m_Chart.Series(0).GetXValues().SetDateTime(true);

m_Chart.Series(1).GetXValues().SetDateTime(true);

m_Chart.Series(2).GetXValues().SetDateTime(true);

// 設定3條曲線的顔色 ---------------------------

m_Chart.Series(0).SetColor(RGB(255,0,0));

m_Chart.Series(1).SetColor(RGB(0,255,0));

m_Chart.Series(2).SetColor(RGB(0,0,255));

// 設定3條曲線的名稱

m_Chart.Series(0).SetName("ZongFengGuan");

m_Chart.Series(1).SetName("LieCheGuan");

m_Chart.Series(2).SetName("ZhiDongGang");

//-----設定最大最小值

m_Chart.GetAxis().GetBottom().SetMinMax(minStar,minEnd);

// minStar,minEnd要求自己去添加,這裡用的是時間的範圍

//一般為起始時間和結束時間的範圍的

// 連接配接資料庫 ----------------------------------

CXDatabasedb;

_RecordsetPtrpRs;

CStringstrSql;

if(!db.Connect("ACCESS","",GetRootDir()+"//db1.mdb","",""))

{

AfxMessageBox("連接配接資料庫失敗!");

return;

}

strSql.Format("select * from %s where RunTime>=#%s# and RunTime<=#%s#",m_strTableName,strMinTime,strMaxTime);

pRs = db.ExecuteSql(strSql);

while(pRs!=NULL && !pRs->adoEOF)

{

// 添加資料點 ------------------------------

double dTime = oletime2chttime(COleDateTime(pRs->GetCollect("RunTime")));

double dZFGPress = var2dbl(pRs->GetCollect("ZFGPress"));

double dLCGPress = var2dbl(pRs->GetCollect("LCGPress"));

double dZDGPress = var2dbl(pRs->GetCollect("ZDGPress"));

m_Chart.Series(0).AddXY(dTime,dZFGPress,NULL,RGB(255,0,0));

m_Chart.Series(1).AddXY(dTime,dLCGPress,NULL,RGB(0,255,0));

m_Chart.Series(2).AddXY(dTime,dZDGPress,NULL,RGB(0,0,255));

pRs->MoveNext();

}

// 斷開資料庫連接配接 ------------------------------

db.Disconnect();

後記

   其實,TeeChart的功能非常強大。我們可以在此建立豐富的圖形表示。下面是在一個工程當中從序列槽中擷取資料分析得到的電流和能耗的實作的實時曲線繪制。實作兩軸控制顯示!