線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1732
推到 Plurk!
推到 Facebook!

image元件擺在Chart上,還可get到滑鼠在Chart上的變化嗎

答題得分者是:RaynorPao
jsjs2601
一般會員


發表:7
回覆:7
積分:2
註冊:2008-09-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-14 09:38:48 IP:210.243.xxx.xxx 訂閱
各位先進,小弟碰到一個問題,就是
TeeChart元件裡,series裡的shape,似乎沒辦法畫出多於四個邊以上的多邊形,所以小弟想到了在TeeChart元件上再擺一個image元件,並讓image元件透明化,然後在image元件上畫多邊形。
而當我只拉一個TeeChart元件時,加入下列程式碼,可以get到滑鼠在chart裡,x,y軸的座標
void __fastcall TForm1::Chart1MouseMove(TObject *Sender, TShiftState Shift,int X, int Y)
{
int XPos,YPos;
XPos=Chart1->BottomAxis->CalcPosPoint(X);
YPos=Chart1->LeftAxis->CalcPosPoint(Y);
StatusBar1->Panels->Items[0]->Text= "X=" IntToStr(XPos) " Y=" IntToStr(YPos);
}
但是當我再拉一個image元件到TeeChart元件裡面,並覆蓋在座標圖上之後,似乎就只能get到image的MouseMove,沒辦法再get到Chart1的MouseMove。
請問各位先進,有什麼方法可以解決這問題嗎?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-14 11:07:38 IP:210.208.xxx.xxx 訂閱
先試試看在 Image1MouseMove 裡面加入以下的程式碼,是否可行?

[code cpp]
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
// 這裡做你原本想要做的事情
// ...略...
// 最後加入以下這一段程式碼
TPoint p;
p.x=X;
p.y=Y;
p=Chart1->ScreenToClient(Image1->ClientToScreen(p));
Chart1MouseMove(Sender, Shift, p.x, p.y);
}
[/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
jsjs2601
一般會員


發表:7
回覆:7
積分:2
註冊:2008-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-14 11:26:08 IP:210.243.xxx.xxx 訂閱
版大~真是太感謝了,可以用!沒有問題~

但是這一行不太了解,只知道看起來是將訊息轉換
p=Chart1->ScreenToClient(Image1->ClientToScreen(p));

可以請版大解說一下嗎?
===================引 用 RaynorPao 文 章===================
先試試看在 Image1MouseMove 裡面加入以下的程式碼,是否可行?

[code cpp]
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
// 這裡做你原本想要做的事情
// ...略...
// 最後加入以下這一段程式碼
TPoint p;
p.x=X;
p.y=Y;
p=Chart1->ScreenToClient(Image1->ClientToScreen(p));
Chart1MouseMove(Sender, Shift, p.x, p.y);
}
[/code]
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-14 11:40:19 IP:210.208.xxx.xxx 訂閱
(1)每一個元件都會有自己的相對座標,從元件的左上角開始,座標是 (0, 0),往右移動,則 X 軸座標累加,往下移動,則 Y 軸座標累加,依此類推
(2)所以當你把 Image1 元件放到 Chart1 元件裡面之後,在 Image1MouseMove 裡面得而的 X 和 Y,是對 Image1 元件的座標 (X, Y),不可以直接套用到 Chart1 元件
(3)因此必須透過轉換,先把 Image1元件的座標,轉換成螢幕的座標,再由螢幕的座標,轉換成 Chart1 元件的座標,這樣才會正確
(4)你可以參考 BCB Help 裡面有關於 ClientToScreen 及 ScreenToClient 的相關說明,應該就會更清楚了
(5)只有一種情況可以省略轉換座標,就是當 Image1 和 Chart1 兩個元件的長、寬相同,且完全重疊,就可以省略轉換座標了
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
jsjs2601
一般會員


發表:7
回覆:7
積分:2
註冊:2008-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-14 11:49:26 IP:210.243.xxx.xxx 訂閱
了解~感謝版大的解說~!!
系統時間:2024-04-25 8:19:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!