TeeChart基础使用手册
TeeChart使用手冊
pdf版下載地址
TeeChart庫下載
文章目錄
- TeeChart使用手冊
- 1、TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll優缺點
- 1.1 TeeChart.dll
- 1.2 TeeChart8.ocx
- 1.3 TeeChart.WPF.dll
- 2、Windows窗體應用(.NET Framework) + TeeChart.dll
- 2.1 創建工程
- 2.2 添加TeeChart.dll
- 2.3. 基本參數設置
- 2.3.1 代碼設置
- 2.3.2 代碼實現效果
- 2.3.3 圖像界面設置
- 2.3.4 界面設置實現效果
- 3、Windows窗體應用(.NET Framework) + TeeChart8.ocx
- 3.1 創建工程
- 3.2 添加TeeChart8.ocx
- 3.3. 基本參數設置
- 3.3.1 代碼設置
- 3.3.2 代碼實現效果
- 3.3.3 圖像界面設置
- 3.3.4 界面設置實現效果
- 4、WPF應用(.NET Framework) + TeeChart.WPF.dll
- 4.1 創建工程
- 4.2 添加TeeChart.WPF.dll
- 4.3. 基本參數設置
- 4.3.1 代碼設置
- 4.3.2 代碼實現效果
- 5、動態繪制圖表
- 5.1 TeeChart.dll實現
- 5.1.1 不同條件實現效果
- 5.1.2 TeeChart.dll繪圖效率測試結果
- 5.2 TeeChart8.ocx實現
- 5.2.1 不同條件實現效果
- 5.2.2 TeeChart8.ocx繪圖效率測試結果
- 5.3 TeeChart.WPF.dll實現
- 5.3.1 不同條件實現效果
- 5.3.2 TeeChart.WPF.dll繪圖效率測試結果
- 6、Add-數據添加函數解析
返回頂部
1、TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll優缺點
- TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll數據繪制效率表
| >16000(帶端點) | 高 | 中 | 低 |
| <16000(帶端點) | 中 | 高 | 低 |
| 任意數量(不帶端點) | 中 | 高 | 低 |
- TeeChart.dll、TeeChart8.ocx、TeeChart.WPF.dll流暢繪制的數據量范圍
| 帶端點 | <2000 | <2500 | <1500 |
| 不帶端點 | <6000 | <8000 | <2500 |
返回頂部
1.1 TeeChart.dll
-
缺點:
-
TeeChart.dll在顯示效果上較差,如圖所示,添加控件后默認情況下在縮放是鼠標的選框會出現偏移、虛影、重疊、閃爍的情況,圖中紅圈為鼠標位置。
-
解決方法(1):進入TeeChart Editor界面 –> Chart –>General –>Zoom –>Pen 然后修改任意一項參數,就不會出現選框偏移、閃爍等問題,而虛影、選框重疊的問題還是存在,第一次修改后會在Form.Designer.cs文件中生成相應的代碼,第二次以后修改不會生成,這導致第二次以后修改的參數不會生效,只有刪除第一次生成的代碼再設置才能生成。
-
解決方法(2):在程序中添加任意一條設置Zoom參數的代碼就不會出現選框偏移等問題,如:
tChart1.Zoom.Pen.Style = System.Drawing.Drawing2D.DashStyle.Dash;
-
-
TeeChart.dll的TeeChart Editor界面存在字體模糊,缺失,被遮擋的情況。
-
-
優點:
-
在TeeChart.dll的TeeChart Editor界面中設置的參數會在Form.Designer.cs文件中自動生成相應的代碼,步驟清晰,利于通過代碼繪制圖標,可用于學習每個參數、功能的代碼實現方式。
-
TeeChart.dll在使用時支持.NET Framework 4及4以上的框架。
-
具有較多重載函數,結構清晰,使用簡單方便。
-
TeeChart.dll添加大量數據的效率高于TeeChart8.ocx,和TeeChart.WPF.dll差不多。
-
TeeChart.dll在繪制超過16000個帶端點的數據時效率最高。
-
返回頂部
1.2 TeeChart8.ocx
-
缺點:
-
在TeeChart8.ocx的Editing界面上設置的參數、內容并不會在Form.Designer.cs文件中生成相應的代碼,而是將控件的設置信息編碼后寫入Form.resx文件中,不利于使用代碼實現TeeChart8.ocx的圖表功能,如下圖。
-
TeeChart8.ocx大部分類、函數、參數、實現方式與TeeChart.dll、TeeChart.WPF.dll差異較大,所以在從TeeChart.dll、TeeChart.WPF.dll轉到TeeChart8.ocx后使用代碼實現時不是很方便。
-
TeeChart8.ocx在使用時支持**.NET Framework 4.5及4.5以上的框架,當使用框架低于4.5時,在運行程序時會出現異常。**
-
-
優點:
- TeeChart8.ocx的Editing界面在顯示效果上要優于TeeChart.dll,功能邏輯更清晰,較少出現字體模糊、被遮擋的情況,使用圖像界面實現圖表效率高于TeeChart.dll。
-
在圖表種類上TeeChart8.ocx 有121種,TeeChart.dll有104種。
-
TeeChart8.ocx添加大量數據的速度較慢,略低于TeeChart.dll和TeeChart.WPF.dll。
-
TeeChart8.ocx 在繪制小于16000個帶端點的數據時效率最高,繪制任意數量不帶端點的數據效率最高。
返回頂部
1.3 TeeChart.WPF.dll
-
缺點:
-
TeeChart.WPF.dll沒有圖形設置窗口,不能通過圖形界面進行設置,開發效率較低。
-
部分的功能、參數也被棄用,在使用上不易上手,代碼實現效率較低。
-
大概率出現某一組數據繪制失敗的情況,且與數據量無關。
-
TeeChart.WPF.dll 繪制任意數量的數據效率都比較低,能流暢繪制的數據量小。
-
-
優點:
- TeeChart.WPF.dll的部分類、函數、參數與TeeChart.dll相同,在熟悉TeeChart.dll代碼實現的情況下使用TeeChart.WPF.dll會更容易。
- TeeChart.WPF.dll在使用時支持**.NET Framework 4及4以上**的框架。
- TeeChart.WPF.dll添加大量數據的效率高于TeeChart8.ocx,和TeeChart.dll差不多。
返回頂部
2、Windows窗體應用(.NET Framework) + TeeChart.dll
2.1 創建工程
- 打開Visual studio,將選項欄設置為C# — windows — 桌面,如下圖:
- 選擇Windows窗體應用(.NET Framework),然后點擊下一步,設置好項目名稱和位置,點擊創建,創建成功后如下圖。
返回頂部
2.2 添加TeeChart.dll
-
選擇窗口左上角(根據每個人Visual studio設置不同而位置不同)的工具箱。
-
在工具欄中任意處點擊鼠標右鍵,選擇添加選項卡。
- 設置好選項卡名字后,在新建的選項卡上點擊鼠標右鍵,點擊選擇項。
- 進入選擇工具項后,選擇**.NET Framework組件**,點擊瀏覽,然后然后找到存放TeeChart.dll的路徑,再點擊確定。
- 這樣新建的選項卡中就添加進了Teechart。
返回頂部
2.3. 基本參數設置
2.3.1 代碼設置
- 從工具欄找到剛添加的TChart,使用鼠標左鍵拖入設計窗口。
- 鼠標左鍵選中添加的TChart,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill。
- 進入Form.cs文件,創建一個函數DrawImage(),根據需要使用下表中的程序語句設置Chart的常用基本參數。
-
數據添加方式效率對比
-
單位: 分:秒:毫秒
-
數據量: 10000 * 2個數據點
-
public int Add(double x, double y); //添加點
-
添加前:48:35:896
添加后:48:35:901消耗:5 毫秒
-
添加前:49:53:762
添加后:49:53:768消耗:6 毫秒
-
添加前:53:31:880
添加后:53:31:885消耗:5 毫秒
-
-
public void Add(Array xValues, Array yValues); //添加數組
-
添加前:35:39:089
添加后:35:39:092消耗:3 毫秒
-
添加前:33:58:818
添加后:33:58:820差:2 毫秒
-
添加前:11:30:878
添加后:11:30:881消耗:3 毫秒
-
-
-
綜合得出
- 點添加方式:消耗時間在5-6毫秒左右;
- 數組添加方式:消耗時間在2-3毫秒左右。
- **結論:數組添加方式效率比點添加方式快一倍。**詳情請看:Add函數解析
返回頂部
2.3.2 代碼實現效果
返回頂部
2.3.3 圖像界面設置
-
從工具欄找到剛添加的TChart,使用鼠標左鍵拖入設計窗口。
-
鼠標左鍵選中添加的TChart,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill。
-
鼠標右鍵點擊添加的TChart,選擇屬性。
- 會進入TeeChart Editor界面,該界面主要能設置Chart、Series、Data、Print、Export、Tools、Animations、Themes八項。
-
基本設置步驟
- 選擇表的種類、樣式:Chart –> Series –> Add.
- 選擇這里取消勾選左下角 view 3D,選擇3D分類 –> point 3D(不是必須,可選擇其它類),點擊OK.
- Chart會變成所選的圖表樣式,左下角出現一個points3D1。
- 設置圖形窗口是否為3D、3D的效果程度:Chart –> 3D
- 勾選3,開啟3D效果,這里可勾選也可不勾選。
- 3D% :在勾選3后設置3D效果度大小。
- 設置邊框和背景:Chart –> Walls
- Visible Walls :是否顯示邊框
- Left\Right\Back\Bottom:設置單面邊框
- 設置point3D端點的顏色:Series –> Format
- 設置線條的樣式:Series –> Format
- 設置端點的樣式:Series –> Points
- 設置橫坐標、縱坐標刻度顯示數據類型、Legend的顯示類型。
- 設置標記提示:Tools –> “+”號。
- 選擇Mark Tips –> Add.
- 設置標記提示
- style :設置顯示信息,這里改為X and Y values.
- move:鼠標移動到目標點上就顯示。
- Click:鼠標點擊目標點然后顯示。
- Delay:設置響應時間。
- Hide Delay:設置顯示時間。
- 窗口左下角出現marksTip1。
- 可通過選中窗口左下角的圖標,點擊圖標右上角的三角圖標 –> Edit 來設置相應屬性參數。
- 添加數據:進入Form.cs文件,寫入下列代碼。
返回頂部
2.3.4 界面設置實現效果
返回頂部
3、Windows窗體應用(.NET Framework) + TeeChart8.ocx
3.1 創建工程
-
打開Visual studio,將選項欄設置為C# — windows — 桌面。
-
選擇Windows窗體應用(.NET Framework),然后點擊下一步,設置好項目名稱和位置,點擊創建。
-
需要注意的時這里的框架不能低于**.NET Framework 4.5**,否則使用TeeChart8.ocx時會報錯。
-
返回頂部
3.2 添加TeeChart8.ocx
-
選擇窗口左上角(根據每個人Visual studio設置不同而位置不同)的工具箱。
-
在工具欄中任意處點擊鼠標右鍵,選擇添加選項卡。
-
設置好選項卡名字后,在新建的選項卡上點擊鼠標右鍵,點擊選擇項。
-
進入選擇工具項后,選擇COM組件,找到并勾選TeeeChart Pro Activex control v8,再點擊確定。
-
這樣新建的選項卡中就添加進了Teechart。
返回頂部
3.3. 基本參數設置
3.3.1 代碼設置
-
從工具欄找到剛添加的TeeChart Pro Activex control v8,使用鼠標左鍵拖入設計窗口。
-
鼠標左鍵選中添加的TChart,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill。
-
進入Form.cs文件,創建兩個函數DrawImage()、ColorToUint(Color color),根據需要使用下表中的程序語句設置AxTChart的常用基本參數。
/// <summary> /// 將Color的RGB值轉換為uint值 /// </summary> /// <param name="color"></param> /// <returns></returns> private uint ColorToUint(Color color) {return (uint)(((uint)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); } /// <summary> /// 靜態圖表繪制 /// </summary> private void SetChart() {/*******************圖表窗體設置********************************///axTChartMove.Header.Text.Clear(); //清空標題//axTChartMove.Header.Text.Add("TeeChar8.ocx"); //添加窗口標題,先清空原有標題axTChartMove.Header.Text.Text = "TeeChar8.ocx"; //設置tchart窗口標題axTChartMove.Axis.Left.Title.Caption = "Y軸"; //設置X軸Y軸標題axTChartMove.Axis.Bottom.Title.Caption = "X軸";axTChartMove.Axis.Left.Title.Angle = 0; //設置標題的旋轉角度axTChartMove.Aspect.View3D = false; //是否顯示3D效果/*axTChartMove.Axis.Bottom.SetMinMax(0, 200); //設置刻度顯示范圍axTChartMove.Axis.Left.SetMinMax(0, 1000);*/axTChartMove.Axis.Left.Increment = 10; //設置Y軸最小刻度axTChartMove.Legend.CheckBoxes = true; //是否需要勾選/*******************紅色直線創建并設置***************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(0).Title = "直線red"; //設置線條名axTChartMove.Series(0).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(0).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(0).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(0).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(0).Color = ColorToUint(Color.FromArgb(255, 0, 0)); //設置直線顏色/*******************藍色直線創建并設置*****************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(1).Title = "直線blue"; //設置線條名axTChartMove.Series(1).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(1).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(1).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(1).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(1).Color = ColorToUint(Color.FromArgb(0, 0, 255));/*******************添加鼠標監聽,標記提示*************************/axTChartMove.Tools.Add(TeeChart.EToolClass.tcMarksTip); //標記提示axTChartMove.Tools.Items[0].asMarksTip.Style = TeeChart.EMarkStyle.smsXY; //設置提示信息顯示樣式/*******************設置鼠標縮放**********************************/Color l_cZoom = Color.FromArgb(0, 0, 0);axTChartMove.Zoom.Pen.Color = ColorToUint(l_cZoom); //設置鼠標縮放選框顏色axTChartMove.Zoom.Pen.Style = TeeChart.EChartPenStyle.psDashDot; //選框線條樣式設置/*******************添加數據顯示數據*****************************///第一種添加方式,單個點添加/* Random l_ran = new Random(); //隨機數種子for (int i = 0; i < 10000; i++){axTChartMove.Series(0).AddXY(i, l_ran.Next(500, 900), "", axTChartMove.Series(0).Color); //添加數據點axTChartMove.Series(1).AddXY(i, l_ran.Next(100, 600), "", axTChartMove.Series(1).Color);}*///第二種添加方式,添加數組Random l_ran = new Random(); //隨機數種子int[] l_arrX = new int[10000];int[] l_arrRedY = new int[10000];int[] l_arrBlueY = new int[10000];for (int i = 0; i < 10000; i++){l_arrX[i] = i;l_arrRedY[i] = l_ran.Next(400, 900);l_arrBlueY[i] = l_ran.Next(100, 500);}Console.WriteLine("添加前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數據添加前系統時間axTChartMove.Series(0).AddArray(10000, l_arrRedY, l_arrX); //添加數組數據axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同Console.WriteLine("添加后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加后系統時間
-
數據添加方式效率對比
-
單位: 分:秒:毫秒
-
數據量: 10000 * 2個數據點
-
int AddXY(double AX, double AY, string ALabel, uint Value); //添加點
-
添加前:54:47:115
添加后:54:47:826消耗:711 毫秒
-
添加前:55:35:540
添加后:55:35:884消耗:344 毫秒
-
添加前:03:40:087
添加后:03:40:516消耗:429 毫秒
-
-
void AddArray(int ArraySize, object YArray, object XArray); //添加數組
-
添加前:14:55:456
添加后:14:55:460消耗:4 毫秒
-
添加前:15:51:258
添加后:15:51:262消耗:4 毫秒
-
添加前:16:20:728
添加后:16:20:732消耗:4 毫秒
-
-
-
綜合得出
- 點添加方式:消耗時間在344-711毫秒左右;
- 數組添加方式:消耗時間在4毫秒左右。
- 結論:數組添加方式效率比點添加方式快了百倍。
返回頂部
3.3.2 代碼實現效果
返回頂部
3.3.3 圖像界面設置
-
從工具欄找到剛添加的axTChart1,使用鼠標左鍵拖入設計窗口。
-
鼠標左鍵選中添加的axTChart1,按R鍵進入屬性欄,找到布局 –> Dock,設置為fill。
-
鼠標右鍵點擊添加的axTChart1,選擇屬性。
-
會進入到如圖所示窗口,點擊**Edit Chart…**開始編輯圖表。
-
進入編輯欄后如圖所示,窗口左側時選項卡主要有Series、Chart、Data、Tools、Export、Print、Themes幾部分組成,窗口中部及右側是點擊選項卡后相應的設置區域。
-
基本設置步驟。
-
選擇表的種類、樣式: Series –> Add.
-
選擇這里取消勾選左下角 view 3D,選擇3D分類 –> point 3D,點擊OK。
-
axTChart1會變成所選的圖表樣式。
-
設置圖表標題: Chart –> General –> Fonts –> Font
- 窗口中部選項欄選擇 Title ,可再 Font設置圖表標題的字體大小、字體類型、字體顏色等。
-
設置坐標軸刻度:Axis –> Scales
-
Minimum –> Change :設置坐標軸刻度最小取值范圍。
-
Maximum –> Change:設置坐標軸刻度最大取值范圍。
-
Increment –> Change:設置坐標軸刻度增量。
-
Axis –> Labels–> Text–> Font 可設置坐標軸刻度的字體類型、字體大小、字體顏色等。
-
-
設置坐標軸標題:Axis –> Title –> style
- Style –> Title 里輸入標題內容。
- 可選擇標題的位置:Left Axis、Right Axis等。
- Angle 設置標題的旋轉角度。
- Size設置標題區域大小。
- Visible設置是否顯示標題。
-
Axis –> Title –> Format –> Text –> Font 可設置坐標軸標題的字體類型、字體大小、字體顏色等。
-
設置線條:Series0 –> Format
- color:設置端點顏色。
- Color Each :使用任意顏色。
- Line … :設置線條顏色、樣式、大小等。
-
設置端點:Series0 –> Point
- 設置端點樣式、大小等。
-
設置縮放功能:Chart –> Zoom
- Allow : 是否使用縮放功能
- Pen… :設置縮放選框的顏色、樣式、線條粗細等。
- Minimum Pixels:設置選框選擇的最小像素大小。
- Mouse Button:設置縮放功能是使用鼠標哪一個鍵。
-
設置標記提示
-
添加工具:Tools –> Add
-
選擇Mark Tips,點擊Add .
-
style :設置顯示信息,這里改為X and Y values.
-
move:鼠標移動到目標點上就顯示。
-
Click:鼠標點擊目標點然后顯示。
-
Delay:設置響應時間。
-
Hide Delay:設置顯示時間。
-
添加數據:進入Form.cs文件,寫入下列代碼。
-
3.3.4 界面設置實現效果
返回頂部
4、WPF應用(.NET Framework) + TeeChart.WPF.dll
4.1 創建工程
- 打開Visual studio,將選項欄設置為C# — windows — 桌面。
- 選擇WPF應用(.NET Framework),然后點擊下一步,設置好項目名稱和位置,點擊創建。
返回頂部
4.2 添加TeeChart.WPF.dll
-
選擇窗口左上角(根據每個人Visual studio設置不同而位置不同)的工具箱。
-
在工具欄中任意處點擊鼠標右鍵,選擇添加選項卡。
-
設置好選項卡名字后,在新建的選項卡上點擊鼠標右鍵,點擊選擇項。
-
進入選擇工具項后,選擇WPF組件,點擊瀏覽,然后然后找到存放TeeChart.dll的路徑,再點擊確定。
-
這樣新建的選項卡中就添加進了Teechart。
返回頂部
4.3. 基本參數設置
4.3.1 代碼設置
-
從工具欄找到剛添加的TChart,使用鼠標左鍵拖入設計窗口。
-
鼠標右鍵點擊添加的TChart,選擇布局 –> 全部填充。
-
選中剛添加的TChart控件,在窗口右邊的屬性欄設置控件名稱。
-
進入MainWindow.xaml.cs文件,創建一個函數DrawImage(),根據需要使用下表中的程序語句設置Chart的常用基本參數。
private void SetChart() {/*******************圖表窗體設置********************************/chartMove.Aspect.View3D = false; //控件3D效果chartMove.Header.Text = "WPF使用TeeChart.WPF"; //設置窗體標題chartMove.Legend.Visible = true; //圖例chartMove.Legend.Color = Color.FromRgb(100, 200, 200); //設置圖例背景顏色chartMove.Axes.Visible = true; //是否顯示坐標軸chartMove.Axes.Left.Title.Text = "Y軸"; //Y軸標題chartMove.Axes.Bottom.Title.Text = "X軸"; //X軸標題chartMove.Axes.Left.Title.Visible = true; //坐標軸標題是否可見chartMove.Axes.Left.Title.Angle = 0; //坐標軸標題旋轉角度chartMove.Axes.Left.Labels.Style = Steema.TeeChart.WPF.AxisLabelStyle.Auto;//Y軸樣式chartMove.Axes.Left.Labels.Angle = 20; //坐標軸刻度標簽旋轉角度chartMove.Axes.Bottom.Grid.Visible = true; //是否顯示網格/*******************藍色直線創建并設置*****************************/Steema.TeeChart.WPF.Styles.Line l_lineBlue = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineBlue.Color = Color.FromRgb(0, 0, 200); //設置線顏色l_lineBlue.Title = "直線blue";l_lineBlue.Pointer.Visible = true; //設置開啟端點chartMove.Series.Add(l_lineBlue); //line添加進TChart/*******************綠色直線創建并設置***************************/Steema.TeeChart.WPF.Styles.Line l_lineGreen = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineGreen.Color = Color.FromRgb(0, 200, 0); //設置線顏色l_lineGreen.Title = "直線green";l_lineGreen.Pointer.Visible = true;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標監聽,標記提示*************************/Steema.TeeChart.WPF.Tools.MarksTip l_marks = new Steema.TeeChart.WPF.Tools.MarksTip();l_marks.Style = Steema.TeeChart.WPF.Styles.MarksStyles.XY; //設置提示信息樣式l_marks.MouseAction = Steema.TeeChart.WPF.Tools.MarksTipMouseAction.Click; //設置觸發響應方式chartMove.Tools.Add(l_marks);/*******************添加數據顯示數據*****************************///第一種添加方式,單個點添加/*Random l_ran = new Random(); //隨機數種子for (int i = 0; i < 10000; i++){chartMove.Series[0].Add(i, l_ran.Next(600, 1000)); //添加數據點 chartMove.Series[1].Add(i, l_ran.Next(200, 700)); //添加數據點 }*///第二種添加方式,添加數組Random l_ran = new Random(); //隨機數種子int[] l_arrX = new int[10000];int[] l_arrBlueY = new int[10000];int[] l_arrGreenY = new int[10000];for (int i = 0; i < 10000; i++){l_arrX[i] = i;l_arrBlueY[i] = l_ran.Next(100, 500);l_arrGreenY[i] = l_ran.Next(400, 900);}Console.WriteLine("添加前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數據添加前系統時間chartMove.Series[0].Add(l_arrX, l_arrBlueY); //添加數組數據chartMove.Series[1].Add(l_arrX, l_arrGreenY);Console.WriteLine("添加后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加后系統時間 }
-
數據添加方式效率對比
-
單位: 分:秒:毫秒
-
數據量: 10000 * 2個數據點
-
public virtual int Add(double x, double y); //添加點
-
添加前:42:25:431
添加后:42:25:438消耗:7 毫秒
-
添加前:43:29:754
添加后:43:29:760消耗:6 毫秒
-
添加前:44:03:966
添加后:44:03:972消耗:6 毫秒
-
-
public void Add(Array xValues, Array yValues); //添加數組
-
添加前:55:20:610
添加后:55:20:613消耗:3 毫秒
-
添加前:55:32:508
添加后:55:32:511消耗:3 毫秒
-
添加前:55:47:579
添加后:55:47:581消耗:2 毫秒
-
-
-
綜合得出
- 點添加方式:消耗時間在6-7毫秒左右;
- 數組添加方式:消耗時間在2-3毫秒左右。
- 結論:數組添加方式效率比點添加方式快一倍。
返回頂部
4.3.2 代碼實現效果
返回頂部
5、動態繪制圖表
5.1 TeeChart.dll實現
/// <summary> /// 圖表參數設置 /// </summary> private void SetChart() {/*******************圖表窗體設置********************************/chartMove.Aspect.View3D = false; //關閉控件3D效果 默認為truechartMove.Legend.CheckBoxes = true; //是否需要勾選,如果只有一種數據,且設置為false時,顯示每個點的縱坐標chartMove.Legend.Visible = true; //直線標題集合(圖例)是否顯示chartMove.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom; //直線標題顯示位置chartMove.Header.Text = "teeChart.dll動態繪圖"; //Tchart窗體標題chartMove.Axes.Visible = true; //是否顯示坐標chartMove.Axes.Left.Title.Text = "Y軸"; //左側標題chartMove.Axes.Bottom.Title.Text = "X軸"; //底部標題chartMove.Axes.Left.Title.Visible = true; //坐標標題是否可見chartMove.Axes.Left.Title.Angle = 0; //設置坐標擺放角度,縱坐標默認為90chartMove.Axes.Left.Labels.Style = Steema.TeeChart.AxisLabelStyle.Auto; //Y軸樣式chartMove.Axes.Left.Labels.Angle = 0; //yx軸的Label顯示樣式(旋轉角度)chartMove.Walls.Visible = true; //是否顯示圖表邊框chartMove.Walls.Back.Transparent = false; //背景是否透明chartMove.Walls.Back.Gradient.Visible = true; //是否顯示背景chartMove.Axes.Left.Grid.Visible = true; //是否顯示橫行網格/*******************紅色直線創建并設置***************************/Steema.TeeChart.Styles.Line l_lineRed = new Steema.TeeChart.Styles.Line(); //直線l_lineRed.Title = "直線red"; //標題l_lineRed.Color = Color.FromArgb(250, 50, 0); //直線顏色//line1.ColorEach = true; //直線使用所有顏色l_lineRed.ShowInLegend = true; //是否顯示直線標題 true/false 默認為truel_lineRed.Pointer.Visible = true; //顯示端點l_lineRed.Pointer.Style = Steema.TeeChart.Styles.PointerStyles.Sphere; //設置端點樣式chartMove.Series.Add(l_lineRed); //添加直線/*******************綠色直線創建并設置*****************************/Steema.TeeChart.Styles.Line l_lineGreen = new Steema.TeeChart.Styles.Line();l_lineGreen.Title = "直線green";l_lineGreen.Color = Color.FromArgb(0, 255, 0);l_lineGreen.ShowInLegend = true;l_lineGreen.Pointer.Visible = true;l_lineGreen.Pointer.Style = Steema.TeeChart.Styles.PointerStyles.Rectangle;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標監聽,標記提示*************************/Steema.TeeChart.Tools.MarksTip l_marks = new Steema.TeeChart.Tools.MarksTip(); //創建標記提示對象l_marks.Style = Steema.TeeChart.Styles.MarksStyles.XY; //顯示信息設為X YchartMove.Tools.Add(l_marks);l_marks.MouseDelay = 200; //設置延時時間,注意必須在Add(l_marks)后,否則會報錯l_marks.HideDelay = 1500;}/// <summary> /// 子線程執行的方法 /// </summary> protected void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當前線程l_thThis.Abort();}else{int[] l_arrX = new int[10000];int[] l_arrY_red = new int[10000];int[] l_arrY_green = new int[10000];Random l_ran = new Random(); //隨機數種子for (int i = 0; i < 10000; i++){l_arrX[i] = i;l_arrY_red[i] = l_ran.Next(200, 300);l_arrY_green[i] = l_ran.Next(300, 400);}Console.WriteLine("顯示前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數據添加顯示前系統時間chartMove.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{chartMove.Series[0].Add(l_arrX, l_arrY_red);chartMove.Series[1].Add(l_arrX, l_arrY_green);}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff")); //打印數據添加顯示后系統時間}} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關閉/// <summary> /// 開始Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStart_Click(object sender, EventArgs e) {if (!m_thSwitch){ThreadStart l_start = new ThreadStart(ThreadRun);Thread l_thAddData = new Thread(l_start); //創建子線程繪制圖表數據m_thSwitch = true;l_thAddData.Start(); //線程開始} } /// <summary> /// 停止Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStop_Click(object sender, EventArgs e) {m_thSwitch = false; //關閉線程 }返回頂部
5.1.1 不同條件實現效果
-
以下數據皆為測試數據中隨機抽取。
-
測試條件1: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(帶端點)。
-
顯示前:55:19:646
顯示后:55:20:055消耗:409 毫秒
-
顯示前:55:20:056
顯示后:55:20:457消耗:401毫秒
-
顯示前:55:20:458
顯示后:55:20:865消耗:407 毫秒
-
-
測試條件2: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(不帶端點)
- 顯示前:00:10:464
顯示后:00:10:586
消耗:122 毫秒
-
顯示前:00:10:586
顯示后:00:10:711消耗:125 毫秒
-
顯示前:00:10:711
顯示后:00:10:832消耗:121 毫秒
- 顯示前:00:10:464
-
測試條件3: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(帶端點)。
-
顯示前:04:39:917
顯示后:04:40:123消耗:206 毫秒
-
顯示前:04:40:123
顯示后:04:40:338消耗:215 毫秒
-
顯示前:04:40:338
顯示后:04:40:545消耗:207 毫秒
-
-
測試條件4: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(不帶端點)。
-
顯示前:09:20:054
顯示后:09:20:118消耗:64 毫秒
-
顯示前:09:20:118
顯示后:09:20:179消耗:61毫秒
-
顯示前:09:20:179
顯示后:09:20:240消耗:61毫秒
-
-
測試條件5: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(帶端點)。
-
顯示前:13:02:957
顯示后:13:03:005消耗:48 毫秒
-
顯示前:13:03:005
顯示后:13:03:055消耗:50 毫秒
-
顯示前:13:03:055
顯示后:13:03:100消耗:45 毫秒
-
-
測試條件6: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(帶端點)。
-
顯示前:16:16:539
顯示后:16:16:556消耗:17
-
顯示前:16:16:556
顯示后:16:16:574消耗:18
-
顯示前:16:16:574
顯示后:16:16:599消耗:25
-
返回頂部
5.1.2 TeeChart.dll繪圖效率測試結果
- 根據上方幾組測試數據得出以下幾點結論:
- 相同數據量下,不帶端點比帶端點繪制效率高3倍左右。
- TeeChart.dll繪圖效率與數據量呈線性關系。
- 根據20幀左右為肉眼感覺的流暢度,帶端點繪制一次大概最多繪制總量2000個數據,不帶端點一次大概最多繪制總量6000個數據。
返回頂部
5.2 TeeChart8.ocx實現
/// <summary> /// 將Color的RGB值轉換為uint值 /// </summary> /// <param name="color"></param> /// <returns></returns> private uint ColorToUint(Color color) {return (uint)(((uint)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); }/// <summary> /// AxTChart基本參數設置 /// </summary> private void SetChart() {/*******************圖表窗體設置********************************/axTChartMove.Header.Text.Text = "TeeChar8.ocx"; //設置tchart窗口標題axTChartMove.Axis.Left.Title.Caption = "Y軸"; //設置X軸Y軸標題axTChartMove.Axis.Bottom.Title.Caption = "X軸";axTChartMove.Axis.Left.Title.Angle = 0; //設置標題的旋轉角度axTChartMove.Aspect.View3D = false; //是否顯示3D效果axTChartMove.Axis.Left.Increment = 10; //設置Y軸最小刻度axTChartMove.Legend.CheckBoxes = true; //是否需要勾選/*******************紅色直線創建并設置***************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(0).Title = "直線red"; //設置線條名axTChartMove.Series(0).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(0).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(0).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(0).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(0).Color = ColorToUint(Color.FromArgb(255, 0, 0)); //設置直線顏色/*******************藍色直線創建并設置*****************************/axTChartMove.AddSeries(TeeChart.ESeriesClass.scLine); //創建并添加直線對象axTChartMove.Series(1).Title = "直線blue"; //設置線條名axTChartMove.Series(1).asLine.Pointer.Style = TeeChart.EPointerStyle.psCircle; //設置端點的樣式形狀axTChartMove.Series(1).asLine.Pointer.HorizontalSize = 4; //設置端點寬axTChartMove.Series(1).asLine.Pointer.VerticalSize = 4; //設置端點高axTChartMove.Series(1).asLine.Pointer.Visible = true; //是否顯示端點axTChartMove.Series(1).Color = ColorToUint(Color.FromArgb(0, 0, 255));/*******************添加鼠標監聽,標記提示*************************/axTChartMove.Tools.Add(TeeChart.EToolClass.tcMarksTip); //標記提示axTChartMove.Tools.Items[0].asMarksTip.Style = TeeChart.EMarkStyle.smsXY; //設置提示信息顯示樣式/*******************設置鼠標縮放**********************************/Color l_cZoom = Color.FromArgb(0, 0, 0);axTChartMove.Zoom.Pen.Color = ColorToUint(l_cZoom); //設置鼠標縮放選框顏色axTChartMove.Zoom.Pen.Style = TeeChart.EChartPenStyle.psDashDot; //選框線條樣式設置 }/// <summary> /// 子線程執行的方法 /// </summary> private void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當前線程l_thThis.Abort();}else{Random l_ran = new Random(); //隨機數種子int[] l_arrX = new int[10000];int[] l_arrRedY = new int[10000];int[] l_arrBlueY = new int[10000];for (int i = 0; i < 10000; i++) //組合數據到數組中{l_arrX[i] = i;l_arrRedY[i] = l_ran.Next(400, 900);l_arrBlueY[i] = l_ran.Next(100, 500);}Console.WriteLine("顯示前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數據添加顯示前系統時間axTChartMove.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{axTChartMove.Series(0).AddArray(10000, l_arrRedY, l_arrX); //添加數組數據axTChartMove.SeriesList.Items[1].AddArray(10000, l_arrBlueY, l_arrX); //效果和上面相同}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加顯示后系統時間}} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關閉 /// <summary> /// 開始Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStart_Click(object sender, EventArgs e) {if (!m_thSwitch){ThreadStart l_start = new ThreadStart(ThreadRun);Thread l_thAddData = new Thread(l_start); //創建子線程繪制圖表數據m_thSwitch = true;l_thAddData.Start(); //線程開始} } /// <summary> /// 停止Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStop_Click(object sender, EventArgs e) {m_thSwitch = false; //關閉線程 }返回頂部
5.2.1 不同條件實現效果
-
測試條件1: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(帶端點)。
-
顯示前:54:24:196
顯示后:54:24:891消耗:695 毫秒
-
顯示前:54:24:891
顯示后:54:25:510消耗:619 毫秒
-
顯示前:54:25:941
顯示后:54:26:513消耗:572 毫秒
-
-
**測試條件2:**同時顯示兩路數據、每路10000個數據點,共20000個數據點(不帶端點)。
-
顯示前:57:24:433
顯示后:57:24:535消耗:102 毫秒
-
顯示前:57:24:536
顯示后:57:24:633消耗:97 毫秒
-
顯示前:57:24:633
顯示后:57:24:732消耗:99 毫秒
-
-
**測試條件3:**同時顯示兩路數據、每路5000個數據點,共10000個數據點(帶端點)。
-
顯示前:01:10:577
顯示后:01:10:781消耗:204 毫秒
-
顯示前:01:10:833
顯示后:01:11:080消耗:247 毫秒
-
顯示前:01:11:080
顯示后:01:11:334消耗:254 毫秒
-
-
**測試條件4:**同時顯示兩路數據、每路5000個數據點,共10000個數據點(不帶端點)。
-
顯示前:04:53:350
顯示后:04:53:421消耗:71 毫秒
-
顯示前:04:53:489
顯示后:04:53:558消耗:69 毫秒
-
顯示前:04:53:558
顯示后:04:53:626消耗:68 毫秒
-
-
**測試條件5:**同時顯示兩路數據、每路1000個數據點,共2000個數據點( 帶端點)。
-
顯示前:08:18:860
顯示后:08:18:900消耗:40 毫秒
-
顯示前:08:18:900
顯示后:08:18:941消耗:41 毫秒
-
顯示前:08:18:941
顯示后:08:18:981消耗:40 毫秒
-
-
**測試條件6:**同時顯示兩路數據、每路1000個數據點,共2000個數據點( 不帶端點)。
-
顯示前:12:26:130
顯示后:12:26:142消耗:12 毫秒
-
顯示前:12:26:142
顯示后:12:26:155消耗:13 毫秒
-
顯示前:12:26:155
顯示后:12:26:167消耗:12 毫秒
-
返回頂部
5.2.2 TeeChart8.ocx繪圖效率測試結果
- 根據幾組測試數據得出以下幾點結論:
- 相同數據量下,不帶端點比帶端點繪制效率高6倍左右。
- TeeChart8.ocx繪圖效率與數據量增長呈反比關系。
- 根據20幀左右為肉眼感覺的流暢度,帶端點繪制一次大概最多繪制總量2500個數據,不帶端點一次大概最多繪制總量8000個數據。
返回頂部
5.3 TeeChart.WPF.dll實現
private void SetChart() {/*******************圖表窗體設置********************************/chartMove.Aspect.View3D = false; //控件3D效果chartMove.Header.Text = "WPF使用TeeChart.WPF"; //設置窗體標題chartMove.Legend.Visible = true; //圖例chartMove.Legend.Color = Color.FromRgb(100, 200, 200); //設置圖例背景顏色chartMove.Axes.Visible = true; //是否顯示坐標軸chartMove.Axes.Left.Title.Text = "Y軸"; //Y軸標題chartMove.Axes.Bottom.Title.Text = "X軸"; //X軸標題chartMove.Axes.Left.Title.Visible = true; //坐標軸標題是否可見chartMove.Axes.Left.Title.Angle = 0; //坐標軸標題旋轉角度chartMove.Axes.Left.Labels.Style = Steema.TeeChart.WPF.AxisLabelStyle.Auto;//Y軸樣式chartMove.Axes.Left.Labels.Angle = 20; //坐標軸刻度標簽旋轉角度chartMove.Axes.Bottom.Grid.Visible = true; //是否顯示網格/*******************藍色直線創建并設置*****************************/Steema.TeeChart.WPF.Styles.Line l_lineBlue = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineBlue.Color = Color.FromRgb(0, 0, 200); //設置線顏色l_lineBlue.Title = "直線blue";l_lineBlue.Pointer.Visible = false; //設置開啟端點chartMove.Series.Add(l_lineBlue); //line添加進TChart/*******************綠色直線創建并設置***************************/Steema.TeeChart.WPF.Styles.Line l_lineGreen = new Steema.TeeChart.WPF.Styles.Line(); //創建linel_lineGreen.Color = Color.FromRgb(0, 200, 0); //設置線顏色l_lineGreen.Title = "直線green";l_lineGreen.Pointer.Visible = false;chartMove.Series.Add(l_lineGreen);/*******************添加鼠標監聽,標記提示*************************/Steema.TeeChart.WPF.Tools.MarksTip l_marks = new Steema.TeeChart.WPF.Tools.MarksTip();l_marks.Style = Steema.TeeChart.WPF.Styles.MarksStyles.XY; //設置提示信息樣式l_marks.MouseAction = Steema.TeeChart.WPF.Tools.MarksTipMouseAction.Click; //設置觸發響應方式chartMove.Tools.Add(l_marks); }/// <summary> /// 子線程執行的方法 /// </summary> private void ThreadRun() {while (true){if (!m_thSwitch){Thread l_thThis = Thread.CurrentThread; //如果m_thSwitch為false,則銷毀當前線程l_thThis.Abort();}else{//第二種添加方式,添加數組Random l_ran = new Random(); //隨機數種子int[] l_arrX = new int[1250];int[] l_arrBlueY = new int[1250];int[] l_arrGreenY = new int[1250];for (int i = 0; i < 1250; i++){l_arrX[i] = i;l_arrBlueY[i] = l_ran.Next(100, 500);l_arrGreenY[i] = l_ran.Next(400, 900);}Console.WriteLine("顯示前:" + DateTime.Now.ToString("mm:ss:fff")); //打印數據添加顯示前系統時間chartMove.Dispatcher.Invoke(new Action(delegate () //通過委托在UI線程繪制圖像{chartMove.Series[0].Add(l_arrX, l_arrBlueY); //添加數組數據chartMove.Series[1].Add(l_arrX, l_arrGreenY);}));Console.WriteLine("顯示后:" + DateTime.Now.ToString("mm:ss:fff ")); //打印數據添加顯示后系統時間 }} }private bool m_thSwitch = false; //用于判斷線程是開啟還是關閉/// <summary> /// 開始Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStart_Click(object sender, EventArgs e) {if (!m_thSwitch){ThreadStart l_start = new ThreadStart(ThreadRun);Thread l_thAddData = new Thread(l_start); //創建子線程繪制圖表數據m_thSwitch = true;l_thAddData.Start(); //線程開始} } /// <summary> /// 停止Button /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStop_Click(object sender, EventArgs e) {m_thSwitch = false; //關閉線程 }返回頂部
5.3.1 不同條件實現效果
-
測試條件1: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(帶端點)。
-
顯示前:47:34:611
顯示后:47:35:546935 毫秒
-
顯示前:49:30:041
顯示后:49:30:995954 毫秒
-
顯示前:49:30:996
顯示后:49:31:974978 毫秒
-
顯示前:57:28:732 (繪制失敗)
顯示后:57:28:733消耗:1 毫秒
-
-
測試條件2: 同時顯示兩路數據、每路10000個數據點,共20000個數據點(不帶端點)。
-
顯示前:32:29:988
顯示后:32:30:249消耗:261 毫秒
-
顯示前:32:30:536
顯示后:32:30:788消耗:252 毫秒
-
顯示前:32:30:789
顯示后:32:31:043消耗:254 毫秒
-
顯示后:32:31:043 (繪制失敗)
顯示前:32:31:043消耗:0 毫秒
-
-
測試條件3: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(帶端點)。
-
顯示前:36:19:108
顯示后:36:19:501消耗:393 毫秒
-
顯示前:36:19:857
顯示后:36:20:250消耗:393 毫秒
-
顯示前:36:20:252
顯示后:36:20:650消耗:398 毫秒
-
顯示前:36:20:650 (繪制失敗)
顯示后:36:20:651消耗:1 毫秒
-
-
測試條件4: 同時顯示兩路數據、每路5000個數據點,共10000個數據點(不帶端點)。
-
顯示前:39:57:782
顯示后:39:57:940消耗:158 毫秒
-
顯示前:39:57:941
顯示后:39:58:103消耗:162 毫秒
-
顯示前:39:58:464
顯示后:39:58:629消耗:165 毫秒
-
顯示后:39:59:123 (繪制失敗)
顯示前:39:59:124消耗:1 毫秒
-
-
測試條件5: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(帶端點)。
-
顯示前:44:01:284
顯示后:44:01:357消耗:73 毫秒
-
顯示前:44:01:475
顯示后:44:01:553消耗:78 毫秒
-
顯示前:44:01:650
顯示后:44:01:726消耗:76 毫秒
-
顯示前:44:01:812 (繪制失敗)
顯示后:44:01:813消耗:1 毫秒
-
-
測試條件6: 同時顯示兩路數據、每路1000個數據點,共2000個數據點(不帶端點)。
-
顯示前:47:53:530
顯示后:47:53:570消耗:40 毫秒
-
顯示前:47:53:570
顯示后:47:53:610消耗:40 毫秒
-
顯示前:47:53:611
顯示后:47:53:652消耗:41 毫秒
-
顯示前:47:53:734 (繪制失敗)
顯示后:47:53:734消耗:0 毫秒
-
返回頂部
5.3.2 TeeChart.WPF.dll繪圖效率測試結果
- 根據幾組測試數據得出以下幾點結論:
- 相同數據量下,不帶端點比帶端點繪制效率高2-3倍左右。
- TeeChart.WPF.dll帶端點繪圖效率與數據量增長反比關系,不帶端點繪圖效率與數據量增加呈正比關系。
- 根據20幀左右為肉眼感覺的流暢度,帶端點繪制一次大概最多繪制總量1500個數據,不帶端點一次大概最多繪制總量2500個數據。
- 大概率出現某一組數據繪制失敗的情況,且與數據量無關。
返回頂部
6、Add-數據添加函數解析
-
概述: add函數無論是 public int Add(double x, double y) 還是 public void Add(Array xValues, Array yValues) 都是異步執行函數,并不參與圖表數據的繪制。
-
步驟:
-
使用ILSpy反編譯工具打開編譯后的可執行文件,找到使用到添加數據的函數。
-
點擊Add,找到函數實現位置。
- 可以看出,前面if中都是在將數組數據添加給控件,最后調用Invalidate()函數,此函數的主要功能是使控件的特定區域無效并向控件發送繪制消息。也就是說Invalidate函數只發出重繪界面的消息,不參與繪制控件,在消息發送完后就返回,Add函數就結束了。
-
從下列函數可看出,以點的方式添加數據每添加一個點就執行一次**Invalidate()**函數,所以添加效率會遠低于數組添加方式。
-
總結
以上是生活随笔為你收集整理的TeeChart基础使用手册的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工智能AI编程基础(六)
- 下一篇: 前端学习之浏览器缓存