1. 程式人生 > >TChart和TDBChart的用法與區別

TChart和TDBChart的用法與區別

在網上轉了轉,找了一些資料抄下來.

資料圖表DBChart的使用
一、顯示資料柱

資料圖表DBChart物件用於在報表中插入圖表。雙擊資料圖表物件,可以調出圖表編輯器:

Chart選項:

(1)Series型別頁

可以選擇十一種型別的圖表以及下列選項,按Add就可以選擇圖表的型別(3D :顯示3維圖表);按Title..就可以修改圖表的名稱。

(2)General頁(圖表的普通設定)

其中'Print Preview'按鈕是用於列印圖表。'Zoom'為縮放設定。'Margins(%)'是設定整個圖表的位置。

(3)Axis頁(軸的相關設定)
'Title'頁用於設定豎軸的相關屬性,Title設定要顯示的豎軸的名稱
'Labels'頁中的'Font'按鈕用於設定左邊刻度的字型大小,Size用於設定各軸的距離,Angle用於設定刻度的寬度,Min.Separation%用於設定刻度的比例。Valuse Format用於設定格式(一般不用改)
'Position'頁用於位置的設定,Position%是設定刻度位置,Start是設定刻度高度,

(4)Titles頁(圖表標題的設定)

'Font'按鈕用於設定字型大小,Back Color設定顏色,Alignment用於設定標題的位置。

(5)Legend頁(右上角說明的設定)

Visible選項是否顯示說明;Back Color設定說明背景的顏色;Font設定說明的字型大小;Frame設定說明的邊線;Resize Chart選項用於設定是否讓圖表覆蓋說明;Inverted選項用於設定從左或從右顯示欄位顏色;Position選項用於設定說明在圖表元件中的顯示的位置;Margin設定圖表的大小;Legend Style設定說明的風格;Text Style設定說明的內容(Plain欄位內容、Left Value值+欄位、Right Value欄位+值、Left Percent百分率+欄位、Right Percent欄位+百分率、X Value從0開始);Dividing Lines設定說明中是否顯示分格線;Shadow設定說明的背景屬性;

(6)Panel頁(面板的設定)

Bevel Inner、Bevel Outer設定圖表邊框屬性;Width設定高度;Back Image設定是否在圖表元件上顯示影象;Panel Color設定面板的顏色;Gradiend用於設定在面板中顯示特效顏色(Direction用於設定特效位置);

(7)Walls頁(設定刻度的其它屬性)

(8)3D頁(3D效果的設定)

Series選項:

(1)Format頁(資料柱的風格)

在Color Each中打勾,就可使用多種顏色顯示,color按鈕用於設定顏色,Style用於設定圖表的風格(Rectangle長方體,Pyramid三角體,Invert.PyramId倒三角體,Cylinder圓柱體,Ellipse圓形,Arrow箭頭,Rect.Gradient立體長方體[推薦],Cone不顯示),Border按鈕設定資料柱的邊線屬性,Pattern按鈕設定資料柱的顯示型別,Bar Width設定資料柱間的距離,Bar Offset設定資料柱與縱刻度的距離,

(2)General頁(資料柱的一般設定)

Show in Legend選項是否顯示右上角的資料說明,Horizontal Axis設定橫刻度的位置,Vertical Axis設定縱刻度的位置,Formats設定資料柱的格式,

(3)Marks頁(標記,資料內容顯示設定)

資料內容顯示設定:在Style中選相關的選項,標記的型別:Value值、Percent百分率、Label欄位內容、Label and Percet欄位內容+百分率、Label and Value欄位內容+值、Legend與右上角的資料說明一樣、Percent Total百分率+值、Label&Percent Total欄位內容+百分率+值。
Visible選項是否顯示標記;Transparent選項是否顯示標記的顏色;Clipped選項是否讓標記超過刻度;Arrows用於設定標記下垂線的屬性。
Back Color設定標記的顏色;Font設定標記的字型大小;Border設定標記的邊線;

(4)Data Source頁:(資料連線)

要連線圖表到資料欄位,通過SQL語句查詢,取得兩個欄位的資料(如:品種名,噸數(各品種的合計數))。
例:{ADOQuery1元件的SQL語句}
select a.kindName,sum((0.01*0.001)*(b.MZ-b.PZ)) as KZ form KindInfo a inner join Weighinfo b on a.kindName=b.kName1 Group by a.kindName

這些資料欄位的內容將用於設定圖表的變數和圖例。圖例通常顯示在X軸上,變數在圖表的Y軸上。當生成報表時,選擇的Text物件的內容將儲存到圖表物件的備註中。雙擊DBChart物件,在Editing DBChart對話方塊下的'Series'頁進行設定,在下拉列表框中選擇Series物件,在Data Source頁的下拉框中選擇'DataSet',再在dataset中選對應的查詢元件(ADOQuery1),在Labels中選擇'品種'欄位對應的欄位名,再在Bar中選擇'噸數'欄位對應的欄位名,注意X軸項不用寫。

X軸不能選擇字元型欄位。冥思苦想不得其法。後來硬著頭皮看英文幫助,終於有所收穫。

dbchart1.Series[0].XLabelsSource:='mc';

-------------
Series[0]代表我的一個圖表,mc代表我的一個字元型欄位。在開啟dbchart1.Series[0]所對應的AdoQuery後,用上面這個語句,就可以實現在Dbchart中顯示字元型欄位。
別看就一條語句。你要是不知道就是沒辦法。

例:在程式中設定:
begin
with DBChart1 do
begin
with Series[0} do
begin
DataSource:=ADOQuery1;
XValuse.ValueSource:='欄位';
YValuse.ValueSource:='欄位';
end;
end;
end;

TChart使用問答
最近開發要使 用圖表,Delphi裡提供了圖表開發的控制元件TChart,可惜幫助裡沒有DEMO程式碼,上網搜尋了一下,竟然發現文章也少的可憐。沒辦法,自己豐衣足 食,寫程式碼試用,看幫助,讀程式碼,搞了半天大概弄明白了TChart的使用方式,下面寫一下幾個常見問題的解決。
1.如何寫一個TChart的Hello World?放一個控制元件到窗體上,然後寫程式碼加入一個折線資料序列:

var

Series: TLineSeries;

begin

Series := TLineSeries.Create(Chart1);

Series.Add(100, 'aaa', clRed);

Series.Add(200, 'AAA', clGreen);

Chart1.AddSeries(Series);

end;

這樣就會生成一個簡單的折線圖表,要生成其它型別的資料圖表,可以新增不同的資料序列(各種圖表的序列型別可以參考幫助文件)。

2.如何設定圖表的標題?TChart元件提供了Title屬性可以這是圖表的標題,包括標題的內容、字型、對齊方式等都可以通過Title屬性設定。

最簡單的設定方式:Chart1.Title.Text.Text := '圖表的標題';

3.如何修改圖表的背景顏色和整個圖表的顏色?TChart是一個窗體控制元件,可以通過修改Color屬性設定圖表顏色,這是一種最簡單的方式:Chart1.Color := clWhite;

修改圖表部分的背景色可以通過BackColor屬性來實現:Chart1.BackColor := clGreen;此外,TChart還提供了漸變的背景支援,通過Gradient控制:Chart1.Gradient.Visible := True;

Chart1.Gradient.Direction := gdFromTopLeft;

Chart1.Gradient.StartColor := clGreen;

Chart1.Gradient.EndColor := clYellow;4.TChart的3D效果如何控制?TChart提供了View3D屬性,控制是否使用3D效果,View3dWalls屬性控制是否顯示左側的3D牆效果5.如何不顯示圖表控制元件生成圖表?很遺憾,TChart是一個Windows窗體控制元件,必須依附一個窗體或Windows控制元件才能使用。如果要不顯示TChart的話,可以將TChart的Visible屬性設為False來使用。下面的例子建立了一個隱藏的TChart來生成圖表:var

Chart: TChart;

S: TChartSeries;

Tmpfile&: string;

begin

Chart := TChart.Create(nil);

try

    Chart.Parent := Application.MainForm;

    Chart.Visible := False;    Chart.Title.Text.Text := '測試圖表';    S := TBarSeries.Create(Chart);    Chart.AddSeries(S);    S.Title := '嘿嘿';

    S.AddXY(1, 56, '一月', clGreen);

    S.AddXY(2, 67, '二月', clYellow);

    S.AddXY(3, 34, '三月', clBlue);

    S.AddXY(4, 78, '四月', clRed);    Chart.View3D := False;

    Chart.BackColor := clWhite;

    Chart.Gradient.StartColor := clWhite;

    Chart.Gradient.EndColor := clWhite;

    Chart.Gradient.Visible := True;    TmpFile := Application.ExeName + '.bmp';    Chart.SaveToBitmapFile(TmpFile);    Image1.Picture.LoadFromFile(TmpFile);

finally

    Chart.Free;

end;

end;

Tchart簡單教程delphi用 1.1      [概述]    TChart是delphi裡面一個標準的圖形顯示控制元件。它可以靜態設計(at design time)也可以動態生成。 1.2      [繼承關係]      TObject TPersistent TComponent TControl TCustomControl TWedgetControl TChart TCustomPanel 1.3      [tips] 1.3.1            Pro Version支援Bezier , Contour , Radar 和 point3D 曲線 1.3.2            支援jpeg檔案的匯出 1.3.3            Chart中的Series 可以連線到Table , Query , RemoteDataset(其他資料集) 1.3.4            TChart裡的series的active屬性可以實現對已繪製圖形的顯示或者隱藏 1.3.5            在TChart中, tchartSeries是所有具體series的父類,沒有畫出什麼來的,用一個具體的series類來建立就可以了,比如用TLineSeries、 TPieSeries、 TPointSeries、 TPointSeries等等都行 1.3.6            TTeeFunction Component可以實現在同一個TChart裡面,一個Serries對另一個Serries的統計 1.4      [問題極其使用技巧] 1.4.1            TChart中如何實現只有Y軸的放大與縮小功能? 設定BottomAxis或者LeftAxis的Automatic:=false並同時設定Minimum,Maximum屬性 1.4.2            如何固定TChart中的座標,不使TChart中的座標跟隨Series的變化而變化? //設定底座標 with myChart.BottomAxis do begin     Automatic:=false;     Minimum:=0;     LabelStyle := talText; end; //設定左座標 with myChart.LeftAxis do begin     Automatic:=false;     Minimum:=0;     Title.Angle:=270;     Title.Font:=Self.Font;     Title.Font.Charset:=ANSI_CHARSET;     Title.Font.Name:='@宋體';     Grid.Visible := False; end; //設定右座標 with myChart.RightAxis do begin     Automatic:=false;     Title.Font:=Self.Font;     Title.Font.Charset:=ANSI_CHARSET;     Title.Font.Name:='@宋體';     Title.Caption:='累計百分比(%)';     Maximum:=100;     Minimum:=0; end; 1.4.3            如何刪除一個圖形中的一個點? 使用Series的delete 方法 1.4.4            如何修改一個點的X或者Y 值? LineSeries1.YValue[3] := 27.1 ; {In Bubble Series} BubbleSeries1.RadiusValues.Value[ 8 ] := 8.1 ; {In Pie Series} PieSeries1.PieValues.Value[ 3 ] := 111 ; 1.4.5            如果橫座標是時間(日期),如何進行設定? {First, you need to set the DateTime property to True in the desired X and/or Y values list.} LineSeries1.XValues.DateTime := True ; {Second, use the same above described methods, but give the values as Date, Time or DateTime values} LineSeries1.AddXY( EncodeDate( 1996 , 1 , 23 ) , 25.4 , 'Barcelona' , clGreen ); 1.4.6            如何在chart中畫出的曲線某個點上標記出該點的值? Series.Marks.Visible:=true; Series.Marks.Style:=smsValue; 1.4.7            如何設定橫軸或者縱軸的增長率? Chart.BottomAxis.Increment := DataTimeStep[ dtOneHour ] ; Chart.RightAxis.Increment := 1000; 1.4.8            如何對圖象進行縮放? TChart的ZoomRect或者ZoomPercent方法 (Pie圖可能不支援縮放) 1.5      [TChart可以繪製的圖形] 1.5.1            Line ( TLineSeries) 1.5.2            FastLine (TFastLineSeries) 相對Line來說,它損耗了某些屬性從而來實現快速繪製 1.5.3            Bar (TBarSeries) 1.5.4            Horizontal bar (THorizBarSeries) 1.5.5            Area (TAreaSeries) 1.5.6            Point (TPointSeries) 1.5.7            Pie (TPieSeries) 1.5.8            Arrow (TArrowSeries) 1.5.9            Bubble (TBubbleSeries) 1.5.10         Gantt (TGanttSeries) 1.5.11         Sharp (TChartShape) 1.6      [TChart的實時繪製] 實時繪製對機器效能要求比較高,因此我們在程式設計的時候要注意下面幾個方面: ü         使用2D圖形 ü         是Chart儘可能包含少的點 ü         如果需要,可以移除(remove)chart的legend(?????)和Title ü         使用預設的字型和字型大小 ü         使用FastLineSeries ü         使用實體(solid)畫筆和畫刷格式 ü         儘量避免使用圓形和環行bar樣式 ü         不要使用背景圖片和漸變效果樣式 ü         把Chart的BevelInner和BevelOUter屬性設定為bcNone ü         如果需要,把TChart的AxisVisible屬性設定為False ü         把BufferedDisplay設定為false可以加速chart的重繪 1.7      [Scrolling]    TChart有4中scroll選擇(AllowPanning屬性),分別是 不允許Scroll ( pmNone) ; 水平Scroll (pmHorizontal) ; 垂直Scroll (pmVertical) ; 水平和垂直Scroll (pmBoth) Procedure Scroll(Const Offset:Double; CheckLimits:Boolean); 例子如下: Chart1.BottomAxis.Scroll( 1000, True );這段程式碼也等同於 With Chart1.BottomAxis do Begin Automatic:=false; SetMinMax( Minimum+1000, Maximum+1000 );     End; 1.8      [TChart中的全域性變數] ü         TeeScrollMouseButton := mbRight;設定滑鼠右鍵為TChart滾動鍵(預設) ü         TeeScrollKeyShift    := [ ssCtrl ]; 要按住Control鍵才可以使Scroll滾動 1.9      [TChartSerries使用技巧] 1.9.1            執行時候建立一個Serries, 三種方法: 1.Var MySeries : TBarSeries ; MySeries := TBarSeries.Create( Self ); MySeries.ParentChart := Chart1 ;             2.Chart1.AddSeries( TBarSeries.Create( Self ) );                 3.Var MyClass : TChartSeriesClass; MyClass := TBarSeries ; Chart1.AddSeries( MyClass.Create( Self ) ); 1.9.2            獲得TChart中的Serries陣列,也有三種方法 1.MySeries := Chart1.SeriesList [ 0 ] 2.MySeries := Chart1.Series [ 0 ] 3.MySeries := Chart1 [ 0 ] 1.9.3            SerriesCount屬性獲得SeriesList中Series的個數 1.9.4            隱藏TChart中的Series有三種方法,但是效果不等價 1. Series1.Active:=False; 僅僅隱藏,當設定為true的時候還可以顯示出來 2. Series1.ParentChart:=nil ; 隱藏,重新設定ParentChart為TChart時候可以顯示 3. Series1.Free; 刪除了Series. 不可以恢復 1.9.5            TChart中的資料排序     With Series1 do begin     YValues.Order:=loAscending;     YValues.Sort;     Repaint; end; Ø         定位一個點(Loacate a point) Series1.XValues.Locate(123); Ø         XValue和YValue都擁有的屬性Total , TotalABS , MaxValue , MinValue