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

關於TChart

尚未結案
kaiming
一般會員


發表:6
回覆:11
積分:8
註冊:2004-03-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-25 17:01:16 IP:203.204.xxx.xxx 未訂閱
我在TChart內有建立了四條的Series(Line) ,那我現在要在MouseMove這個事件裡頭加入,當我移動滑鼠時,當滑鼠的X值改變時可以同時來顯示這四個Series(Line)的Y值來,當然它們的X值都是一樣的~~~這應該要怎麼作???
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-26 16:31:12 IP:221.169.xxx.xxx 未訂閱
kaiming你好:    請參閱範例    觀念:由X下去找這個Series最接近的兩點,直線公式算出Y
function TForm1.GetLineYByX(PriorPoint,NextPoint:TPoint;X:Double):Double;
//y=ax b
var
  a,b:Double;
begin
  if (PriorPoint.X-NextPoint.X)=0 then
    a:=0
  else
    a:=(PriorPoint.Y-NextPoint.Y)/(PriorPoint.X-NextPoint.X);
  b:=NextPoint.Y-(NextPoint.X*a);
  Result:=a*X b;
end;    procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Edit1.Text:=FloatToStr(GetSeriesYValueByX(Series1,X));
  Edit2.Text:=FloatToStr(GetSeriesYValueByX(Series2,X));
  Edit3.Text:=FloatToStr(GetSeriesYValueByX(Series3,X));
  Edit4.Text:=FloatToStr(GetSeriesYValueByX(Series4,X));
end;    function TForm1.GetSeriesYValueByX(ASeries:TChartSeries;X:Integer):Double;
var
  I: Integer;
  XValue,YValue: Double;
  ClosePrior,CloseNext:Integer;
  PriorPoint,NextPoint:TPoint;
  tmpY:Integer;
begin
  Result:=0;
  XValue:=ASeries.XScreenToValue(X);
  ClosePrior:=0;
  CloseNext:=0;
  for I := ASeries.FirstValueIndex to ASeries.LastValueIndex do    // Iterate
  begin
    if I>=ASeries.Count then exit;        //取最接近兩點
    if ASeries.XValue[I]<=XValue then
      ClosePrior:=I;
    if ASeries.XValue[I]>=XValue then
    begin
      CloseNext:=I;
      Break;
    end;
  end;    // for
  if (ClosePrior>-1) and (ClosePrior-1) and (ClosePrior     
        
kaiming
一般會員


發表:6
回覆:11
積分:8
註冊:2004-03-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-27 11:09:12 IP:203.204.xxx.xxx 未訂閱
StrongLemon你好: 我把你給我的Code轉成BCB的模式,但Compiler會失敗    我的Code如下:    void __fastcall TForm1::Chart1MouseMove(TObject *Sender, TShiftState Shift,       int X, int Y) {   Edit1->Text = FloatToStr(GetSeriesYValueByX(Series1,X));   Edit2->Text = FloatToStr(GetSeriesYValueByX(Series2,X));   Edit3->Text = FloatToStr(GetSeriesYValueByX(Series3,X));   Edit4->Text = FloatToStr(GetSeriesYValueByX(Series4,X)); } //--------------------------------------------------------------------------- double __fastcall TForm1::GetLineYByX(TPoint PriorPoint , TPoint NextPoint , double X) { //y=ax+b   double a , b;      if ((PriorPoint.x - NextPoint.x) == 0)     a =0 ;   else     a = (PriorPoint.y - NextPoint.y)/(PriorPoint.x - NextPoint.x);   b = NextPoint.y - (NextPoint.x * a);   return a*X+b ; } //--------------------------------------------------------------------------- double __fastcall TForm1::GetSeriesYValueByX(TChartSeries ASeries , int X) {   int I ;   double XValue,YValue ;   int ClosePrior,CloseNext ;   TPoint PriorPoint,NextPoint;   int tmpY ;      YValue = 0 ; //  return YValue ;   XValue = ASeries.XScreenToValue(X) ;   ClosePrior = 0 ;   CloseNext = 0 ;   for (I = ASeries.FirstValueIndex ; I < ASeries.LastValueIndex ; I++)    // Iterate   {     if (I >= ASeries.Count()) break ;        //取最接近兩點     if (ASeries.XValue[I] <= XValue)       ClosePrior = I ;     if (ASeries.XValue[I] >= XValue)     {       CloseNext = I ;       break;     }   }    // for   if ((ClosePrior > -1) && (ClosePrior < ASeries.Count())    && (CloseNext > -1) && (ClosePriorCalcXPosValue(ASeries.XValue[ClosePrior]); PriorPoint.y = Series1->CalcYPosValue(ASeries.YValue[ClosePrior]); NextPoint.x = Series1->CalcXPosValue(ASeries.XValue[CloseNext]); NextPoint.y = Series1->CalcYPosValue(ASeries.YValue[CloseNext]); tmpY = GetLineYByX(PriorPoint,NextPoint,X) ; YValue = ASeries.YScreenToValue(tmpY); } return YValue; } //---------------------------------------------------------------------------
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-27 16:53:21 IP:221.169.xxx.xxx 未訂閱
忘記說我TeeChart是用7.0 如果compiler出來是有關TeeChart的部分話那再討論。 另外編譯錯誤訊息是什麼?
kaiming
一般會員


發表:6
回覆:11
積分:8
註冊:2004-03-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-03 09:12:56 IP:203.204.xxx.xxx 未訂閱
這樣的話~~~我就在試試看~~~ 不然就只好去找找看有沒有新版的TeeChar for BCB的~~~ 還是很謝謝你!!!
系統時間:2024-05-16 0:24:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!