多個TChart 的問題,同一個form 如何知道對應哪一個 |
尚未結案
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
小弟一個form裡面
使用了pagecontrol元件
放了二個以上的tchart(在不同的page)
分別為chart2、chart3、chart4
下面這兩小段程式
DataVec:=Tvec.Create;
DataVec.LoadFromFile('QC_Attribute.vec');
QCPChart(DataVec,SampleSize,DrawVec,CL,UCL,LCL,Confidence*0.01);
DrawValues(DrawVec,Series1); Data:=Tvec.Create;
Data.LoadFromFile('QC_Pareto1.vec');
Recalc; //柏拉圖
procedure TFileLikelySet.Recalc;
var DrawVec,CumSumVec: TVec;
begin
LineSeries1.Active:=true;
DrawVec := TVec.Create;
try
DrawVec.Copy(Data);
{ that's all there is to Pareto }
DrawVec.SortDescend;
{ draw pareto chart }
DrawValues(DrawVec,Series1,0.0,1.0,false);
CumSumVec := TVec.Create;
try
{ Cumulative pareto }
CumSumVec.CumSum(DrawVec);
Factor := 100.0 / DrawVec.Sum;
CumSumVec.Scale(Factor);
{ draw cumulatiove pareto chart }
LineSeries1.GetVertAxis.SetMinMax(0.0,100);
BarSeries1.GetVertAxis.SetMinMax(0.0,DrawVec.Sum);
DrawValues(CumSumVec,LineSeries1, 0.0, 1.0,false);
finally
CumSumVec.Destroy;
end;
finally
DrawVec.Destroy;
end;
end; 要如何寫,才能讓其分別對應chart2 及chart3
來畫出不同的統計圖
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
seedbcc 你好 不好意思唷!你前述那兩段程式中所使用的物件,及一些Function或Procedure竟然看沒有,如TVec是何物件、QCPChart(...)、DrawValues(..)等等,會不會是3rd-Party的TChart物件?我在想你的問題是不是[如何判斷PageControl目前顯示的頁次是那一頁?]
如果是的話,那麼就可以用下列程式碼來判斷
Case PageControl1.ActivePageIndex Of 0 : Begin // 目前在第一頁 對應的TChart應該是 Chart1 End; 1 : Begin // 目前在第二頁 對應的TChart應該是 Chart2 End; 2 : Begin // 目前在第三頁 對應的TChart應該是 Chart3 End; ..... End; 或 If PageControl1.ActivePage='Tabsheet1' Then Begin //要注意大小寫 // 目前在第一頁 對應的TChart應該是 Chart1 End Else If PageControl1.ActivePage='Tabsheet2' Then Begin // 目前在第二頁 對應的TChart應該是 Chart2 End Else If PageControl1.ActivePage='Tabsheet3' Then Begin // 目前在第三頁 對應的TChart應該是 Chart3 End Else ...... End;若答非所問的話,請再詳細說明一下,大家比較好提供意見。 |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
因為chart元件,有許多不同的統計圖函數。 似乎每個函數,都是預設對應到chart1 假使,下列兩行執行時
QCPChart(DataVec,SampleSize,DrawVec,CL,UCL,LCL,Confidence*0.01);
DrawValues(DrawVec,Series1);
是不是會對應到,我form裡面所擺的chart元件,
還是,他會動態create 一個chart,然後才塞值給我form裡面的chart 但是,一個form有放pagecontrol,每個page分別放不同的chart
它要如何對應到,我指定的chart裡面 小弟試過下列方法,都不行
*
with chart3 do
begin
..................
end
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
seedbcc 你好
假設每個Chart皆只含一個Series(TChart.SeriesCount=1) with chart3 do begin If Series[0] is TBarSeries Then Begin // 長條圖 TBarSeries(Series[0]).xxxx := xxxxx;// 來設定相關資訊 ...... End Else If Series[0] is TLineSeries Then Begin // 線型圖 End Else If Series[0] is ..... // 其他圖型 End; end 或 你總該知道Chart3內含的Series的name(在該Chart上DoubleClick後顯示的設 定介面中的Series頁次所示的Series名稱一般正常即為Series1、series2....), 假設為Series3,那麼你前述的程式碼中就有跡可循了 DataVec:=Tvec.Create; DataVec.LoadFromFile('QC_Attribute.vec'); QCPChart(DataVec,SampleSize,DrawVec,CL,UCL,LCL,Confidence*0.01); DrawValues(DrawVec,Series1);//代換為Series3但要注意Series的型態是否相同 Data:=Tvec.Create; Data.LoadFromFile('QC_Pareto1.vec'); Recalc; //柏拉圖 procedure TFileLikelySet.Recalc; var DrawVec,CumSumVec: TVec; begin LineSeries1.Active:=true; DrawVec := TVec.Create; try DrawVec.Copy(Data); { that's all there is to Pareto } DrawVec.SortDescend; { draw pareto chart } DrawValues(DrawVec,Series1,0.0,1.0,false); CumSumVec := TVec.Create; try { Cumulative pareto } CumSumVec.CumSum(DrawVec); Factor := 100.0 / DrawVec.Sum; CumSumVec.Scale(Factor); { draw cumulatiove pareto chart } LineSeries1.GetVertAxis.SetMinMax(0.0,100); BarSeries1.GetVertAxis.SetMinMax(0.0,DrawVec.Sum); // 以上這兩個應該分屬兩個不同的TChart DrawValues(CumSumVec,LineSeries1, 0.0, 1.0,false); finally CumSumVec.Destroy; end; finally DrawVec.Destroy; end; end; 以上綠色部份即是TChart的可視的元件,因為不同的TxxxSeries有不同的屬性及 方法,所以要針對不同TxxxSeries做不同處理。ps:TxxxSeries查了一下Help有11種之多,以上很概念式的描述,希望可以了解,因為我也不是很懂。 |
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 此外,當滑鼠 移到點的上面 要做動作 是寫在 哪個event 移到點上面時,點如何show出來 是 showmessage(series3.mark.xxx ????????seedbcc 你好 TChart有提供四個額外的OnClick事依滑鼠所點位置不同而觸發不同的事件 OnClickAxis :點到橫軸或縱軸時觸發 OnClickbackGround:點選背景時 OnClickLegend:點選到圖例時 OnClickSeries:點選到圖表內容時 上述問題應該使用OnClickSeries事件, 其參數列中有個Series: TChartSeries,表示你所點到的Series(圖表),你可以直接使用該Series變數,但該Series 可能是各種不同的Series,而各種Series又提供各式屬性及方法,有相同意義也有不同屬性,所以在OnClickSeries事件下,須確定series是那一種的series,再轉型成該類型的Series,然後才使用該類型Series的屬性及方法。 引言: showmessage(series3.mark.xxx ????????應改成 showmessage(TxxxSeries(series).mark.yyy); xxx 代表各式Series型態(如下附註) yyy 直接查詢Help吧,因為我也不知 ps:Series有可能是TLineSeries、TBarSeries、TPieSeries ..... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |