Tchar 上的點如何拖拉呢? |
答題得分者是:ikk
|
maped
一般會員 發表:13 回覆:19 積分:6 註冊:2008-10-06 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
maped
一般會員 發表:13 回覆:19 積分:6 註冊:2008-10-06 發送簡訊給我 |
感謝 ikk 大大的回答,
不過我不是很懂要如何實作? 我現在有在Series1ClickPointer事件中加了參數,這樣我只要 滑鼠點以上的點時,就會在一個Label XMargin 顯示點的一些數值 void __fastcall TForm1::Series1ClickPointer(TCustomSeries *Sender, int ValueIndex, int X, int Y) { XMargin->Caption="T=" String(ValueIndex) ", Value=" String(Series1->YValue[ValueIndex]); } 至於你說的利用Mouse來達成移動的效果,可以舉些範例程式嗎? 因為我的點是在Tchart 內,不曉得可不可以達成,我先來試試看好了 謝謝。 ===================引 用 ikk 文 章=================== 可以利用OnClickSeries() 取得被點選的點, 再利用OnMouseDown, OnMouseMove, OnMouseUp 實現點的移動. |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
之前的文字被網站篩選掉了...
可以利用Chart1ClickSeries() 取得被點選的點, 再利用Chart1MouseDown, Chart1MouseMove, Chart1MouseUp 實現點的移動. [code cpp] void __fastcall TForm1::Chart1ClickSeries(TCustomChart *Sender, TChartSeries *Series, int ValueIndex, TMouseButton Button, TShiftState Shift, int X, int Y) { char msg[128]; double SerialX, SerialY; Series->GetCursorValues(SerialX, SerialY); sprintf(msg,"ValueIndex = %d, SerialX = %f, SerialY = %f", ValueIndex, SerialX, SerialY ); Memo2->Lines->Add(msg); bGotSerialPoint = true; } void __fastcall TForm1::Chart1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { bGotSerialPoint = false; } void __fastcall TForm1::Chart1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { int ValueIndex; if ( bGotSerialPoint ) { ValueIndex = Series1->GetCursorValueIndex(); if ( ValueIndex < 0 ) { return; } Series1->XValues->Value[ValueIndex] = 0.1; Series1->YValues->Value[ValueIndex] = 0.1; } } [/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
編輯記錄
ikk 重新編輯於 2009-03-18 17:22:24, 註解 無‧
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
我用 delphi 試了一下, 沒有寫得很精確, 只是想測一下是否可行, 結果, (我是用線圖測, 比較明顯), 線會隨 mouse 移動重繪 (把 . 改成 -> 例如 series1.addxy(...) 改成 series1->addxy(...) 應該就看得懂了) 算我雞婆, 參考一下囉. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart; type TForm1 = class(TForm) Button1: TButton; Chart1: TChart; Series1: TFastLineSeries; procedure Button1Click(Sender: TObject); procedure Chart1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Chart1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; dodrag : boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin series1.AddXY(10,10); series1.AddXY(20,30); series1.AddXY(30,20); end; procedure TForm1.Chart1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if series1.Clicked(x,y)>-1 then dodrag := true else begin dodrag := false; end; end; procedure TForm1.Chart1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin dodrag := false; end; procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if dodrag then begin series1.XValue[0] :=x; series1.YValue[0] :=y; end; end; end.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
maped
一般會員 發表:13 回覆:19 積分:6 註冊:2008-10-06 發送簡訊給我 |
感謝 ikk 大大的回復,試了一下有個函數常常回復 -1(Series1->GetCursorValueIndex();)
,不曉得是我移動太快嗎? 而且常常要移第三次或第四次點才會移動, 所以我把要得到 ValueIndex 改到 Series1ClickPointer()去抓, 所以我稍微改一下程式,但是還是碰到要移動兩次,點才會過去, 我把程式post出來,請大家看看有什麼問題,本來想把全部的程式打包給大家test, 但是找不到上傳檔案的按鍵, [code cpp] #include #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; bool bGotSerialPoint; double SerialX, SerialY; int idx = -1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Series1->AddXY(2, 10,"",clBlue); Series1->AddXY(5, 20,"",clBlue); Series1->AddXY(8, 30,"",clBlue); Series1->AddXY(12, 40,"",clBlue); } void __fastcall TForm1::Series1ClickPointer(TCustomSeries *Sender, int ValueIndex, int X, int Y) { idx = ValueIndex; } void __fastcall TForm1::Chart1ClickSeries(TCustomChart *Sender, TChartSeries *Series, int ValueIndex, TMouseButton Button, TShiftState Shift, int X, int Y) { char msg[128]; double SerialX, SerialY; Series->GetCursorValues(SerialX, SerialY); sprintf(msg,"ValueIndex = %d, SerialX = %f, SerialY = %f", ValueIndex, SerialX, SerialY ); Memo2->Lines->Add(msg); bGotSerialPoint = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Chart1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if( idx == -1 ) return; Series1->GetCursorValues(SerialX, SerialY); Series1->XValues->Value[idx] = SerialX; Series1->YValues->Value[idx] = SerialY; Series1->RefreshSeries(); bGotSerialPoint = false; idx = -1; } [/code] |
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
我也來插花一下。參考看看。
[code cpp] TForm1 *Form1; bool bGotSerialPoint= false; int iValueIndex; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Series1->AddXY(2, 10,"",clBlue); Series1->AddXY(5, 20,"",clBlue); Series1->AddXY(8, 30,"",clBlue); Series1->AddXY(12, 40,"",clBlue); Series1->Pointer->Visible = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Chart1ClickSeries(TCustomChart *Sender, TChartSeries *Series, int ValueIndex, TMouseButton Button, TShiftState Shift, int X, int Y) { char msg[128]; iValueIndex = ValueIndex; bGotSerialPoint = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Chart1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int ValueIndex; double SerialX, SerialY; if ( bGotSerialPoint ) { Series1->GetCursorValues(SerialX, SerialY); Series1->XValues->Value[iValueIndex] = SerialX; Series1->YValues->Value[iValueIndex] = SerialY; } Chart1->Refresh(); bGotSerialPoint = false; } //--------------------------------------------------------------------------- [/code] |
maped
一般會員 發表:13 回覆:19 積分:6 註冊:2008-10-06 發送簡訊給我 |
|
maped
一般會員 發表:13 回覆:19 積分:6 註冊:2008-10-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |