關於在image畫出圓形圖案的問題 |
答題得分者是:alvinken
|
f814030
一般會員 發表:20 回覆:22 積分:8 註冊:2008-04-04 發送簡訊給我 |
小弟想要以在一張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~~~~* |
alvinken
初階會員 發表:21 回覆:32 積分:45 註冊:2008-06-09 發送簡訊給我 |
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 發送簡訊給我 |
首先學生感謝您的指導~"~
1、您說X,Y是MouseUp的值,可是我是加在MouseDown下面啊?為什麼會是MouseUp的值呢? 2、mode=0 是指在繪圖模式下,原本是要加入「清除功能」但現在已把此項目拿掉了。 3、學生有加入滑鼠事件,是用MDown,若MDown = true 則指滑鼠按下鍵的情況。 這是學生的想法,不知是否有錯…如有錯誤,懇請各位先進不吝賜教~~~~ 感激! ps.學生不用心…現在才知道LineTo是畫直線的效果… ☆☆附上學生預期結果。
------
Spencer~~~~* |
alvinken
初階會員 發表:21 回覆:32 積分:45 註冊:2008-06-09 發送簡訊給我 |
===================引 用 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 發送簡訊給我 |
小弟修改後,變成如下圖
會有一段的差距… 試了把畫圓的座標加上一個數值,但還是不能改善,不知問題是在哪裡呢? [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 發送簡訊給我 |
|
f814030
一般會員 發表:20 回覆:22 積分:8 註冊:2008-04-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |