全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1668
推到 Plurk!
推到 Facebook!

多個TChart 的問題,同一個form 如何知道對應哪一個

尚未結案
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-20 10:42:08 IP:221.169.xxx.xxx 未訂閱
小弟一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-20 23:25:44 IP:211.20.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-21 09:03:08 IP:221.169.xxx.xxx 未訂閱
因為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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-22 01:02:39 IP:203.204.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-22 09:03:12 IP:221.169.xxx.xxx 未訂閱
請問大大 ,有沒有中文的說明文件 因為,英文的文件,看得粉頭痛
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-22 09:22:58 IP:221.169.xxx.xxx 未訂閱
我要出現上面管制圖的資料 請問,我要如何塞值也 chart 是load *.vec 還 load *.mtx 或是在其它chart內的data text Y 0 1 4.5 2 4.9 3 5.1 4 11.3 5 7.9 6 7 6.8 8 3.8 9 6 ps:0及6沒有給點
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-22 09:57:56 IP:221.169.xxx.xxx 未訂閱
此外,當滑鼠 移到點的上面 要做動作 是寫在 哪個event 是onmouse?? 移到點上面時,點如何show出來 是 showmessage(series3.mark.xxx ????????
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-23 18:33:51 IP:211.20.xxx.xxx 未訂閱
引言: 此外,當滑鼠 移到點的上面 要做動作 是寫在 哪個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 .....
系統時間:2024-05-17 19:04:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!