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

關於在image畫出圓形圖案的問題

答題得分者是:alvinken
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-19 22:00:07 IP:163.17.xxx.xxx 訂閱
小弟想要以在一張image 上,用「拉」的,拉出一個橢圓

但是看了許多資料,直畫不出來,都只能有線在image 上畫…

code 如下,懇請各位先進賜教~!


[code cpp]
void __fastcall TForm2::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
MDown = true;
Image1->Canvas->MoveTo(X,Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{

if(MDown)
{
Image1->Canvas->Pen->Color = clRed;
Image1->Canvas->Pen->Mode = pmCopy;
Image1->Canvas->Pen->Style = psSolid;
Image1->Canvas->Brush->Style = bsClear;
//Image1->Canvas->LineTo(X,Y);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
int X2,Y2;
MDown = false;
X2=X;
Y2=Y;
Image1->Canvas->Ellipse(X 10,Y 10,X2-10,Y2-10);
}
[/code]
------
Spencer~~~~*
編輯記錄
f814030 重新編輯於 2008-12-20 10:34:31, 註解 無‧
f814030 重新編輯於 2008-12-20 11:19:24, 註解 無‧
f814030 重新編輯於 2008-12-20 11:20:11, 註解 無‧
alvinken
初階會員


發表:21
回覆:32
積分:45
註冊:2008-06-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-20 08:51:23 IP:218.170.xxx.xxx 訂閱
1. Image1->Canvas->Ellipse(X,Y,X2,Y2); 

如果要做到拉放的效果
X ,Y 的值 應該是 MouseDown時的 X,Y值,你這裡是up時的


除此之外,你每拉ㄧ次"之前",要把Image裡的圖"清空"

2. mode = 0 是何時觸發的, 初值就是 0? 用途是?

3. Image本身沒 滑鼠事件,你應該有加吧
因為你的程式不完整,所以問一下


題外話 : LineTo 是本來就想要的效果嗎

------
水至清則無魚,人至賤則無敵。
編輯記錄
alvinken 重新編輯於 2008-12-20 09:51:47, 註解 無‧
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-20 10:33:55 IP:163.17.xxx.xxx 訂閱
首先學生感謝您的指導~"~

1、您說X,Y是MouseUp的值,可是我是加在MouseDown下面啊?為什麼會是MouseUp的值呢?

2、mode=0 是指在繪圖模式下,原本是要加入「清除功能」但現在已把此項目拿掉了。

3、學生有加入滑鼠事件,是用MDown,若MDown = true 則指滑鼠按下鍵的情況。


這是學生的想法,不知是否有錯…如有錯誤,懇請各位先進不吝賜教~~~~

感激!

ps.學生不用心…現在才知道LineTo是畫直線的效果…

☆☆附上學生預期結果。

預期效果



------
Spencer~~~~*
編輯記錄
f814030 重新編輯於 2008-12-20 11:05:14, 註解 無‧
f814030 重新編輯於 2008-12-20 11:18:47, 註解 無‧
alvinken
初階會員


發表:21
回覆:32
積分:45
註冊:2008-06-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-20 11:34:23 IP:218.170.xxx.xxx 訂閱

===================引 用 f814030 文 章===================
首先學生感謝您的指導~"~

1、您說X,Y是MouseUp的值,可是我是加在MouseDown下面啊?為什麼會是MouseUp的值呢?

本來的說法可能不太好
要有拉放效果
MouseDown時 要記錄當時的X,Y 放到全域變數
你畫圖形的X,Y 是 Move時的 X,Y 不是 Down時的
直接用X,Y 是讀到Move 時的滑鼠X,Y

我會說是Up的值 是因為 UP時
MDown = false
所以 X , Y , X2, Y2 都是 UP時的 滑鼠 X,Y值

你的程式其實改一下就有效果了





------
水至清則無魚,人至賤則無敵。
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-12-20 13:18:53 IP:163.17.xxx.xxx 訂閱
小弟修改後,變成如下圖

會有一段的差距…
試了把畫圓的座標加上一個數值,但還是不能改善,不知問題是在哪裡呢?


[code cpp]
int MDouseX;
int MDouseY;
void __fastcall TForm2::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
MDown = true;
Image1->Canvas->MoveTo(X,Y);
MDouseX=X;
MDouseY=Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{
if(MDown)
{
Image1->Canvas->Pen->Color = clRed;
Image1->Canvas->Pen->Mode = pmCopy;
Image1->Canvas->Pen->Style = psSolid;
Image1->Canvas->Brush->Style = bsClear;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)
{
int X2,Y2;
MDown = false;
Image1->Canvas->LineTo(X,Y);
X2=X;
Y2=Y;
Image1->Canvas->Ellipse(MDouseX,MDouseY,X2,Y2);
}
[/code]
------
Spencer~~~~*
編輯記錄
f814030 重新編輯於 2008-12-20 13:19:43, 註解 無‧
alvinken
初階會員


發表:21
回覆:32
積分:45
註冊:2008-06-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-12-20 15:29:53 IP:218.170.xxx.xxx 訂閱
我查了一下 Ellipse 
這個函式是用對角線作ㄧ個矩形
然後做出內切圓
所以你得到的結果就是如此
他的参數有兩種, BCB Help裡有

你如果是要用拉放來做出橢圓
可能要推算那些参數
應該要去查一些數學公式





------
水至清則無魚,人至賤則無敵。
f814030
一般會員


發表:20
回覆:22
積分:8
註冊:2008-04-04

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