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

DoubleClick和MouseDown兩個事件的關係

答題得分者是:aftcast
yeeddt
初階會員


發表:18
回覆:28
積分:29
註冊:2008-11-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-02 11:09:31 IP:211.21.xxx.xxx 訂閱
原本認為在DoublClick發生便完成一個多邊形繪製,所以需要將TPoint的內容消除。
結果在該如何消除TPoint的內容中經由aftcast前輩的解釋發現DoubleClick也會同時執行MouseDown。
經過幾天下來的研究,沒有絲毫進展,實在不知道該如何解決這樣的問題。
是不是根本無法利用DoubleClick做一個多邊形的結束呢?
這小畫家一點都不小啊!

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-03 12:49:05 IP:60.248.xxx.xxx 訂閱
山不轉路轉,轉個彎還是可以到目的地!!

因為當dubleclick時,事件的觸發順序如下:

MouseDown -> DoublClick -> MouseDown

所以,在MouseDown裡做一些修改。首先加入一個旗標,用來指示是否按了DoublClick,然後開始的時候是false,而在DoublClick事件裡把它設為true,接下來就是在MouseDown的事件中加入if的判別,我用我自己的例子給你參考。


[code cpp]
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPaintBox *PaintBox1;
TButton *Button1;
void __fastcall PaintBox1Paint(TObject *Sender);
void __fastcall PaintBox1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Button1Click(TObject *Sender);
void __fastcall PaintBox1DblClick(TObject *Sender);
private: // User declarations
std::vector vPoint;
bool DblFlag;
public: // User declarations
__fastcall TForm1(TComponent* Owner);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;

//------------上面是header-----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
this->DblFlag = false;
}

//---------------------------------------------------------------------------

void __fastcall TForm1::PaintBox1DblClick(TObject *Sender)
{
this->DblFlag = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (this->DblFlag == false)
{
vPoint.push_back(Point(X,Y));
((TPaintBox *)Sender)->Canvas->Polyline(vPoint.begin(), vPoint.size()-1);
return;
}
else
{
vPoint.pop_back(); //減1 ,你自己想想為何吧
PaintBox1->Canvas->Polygon( vPoint.begin(), vPoint.size()-1 );
vPoint.clear();
this->DblFlag = false;
}
}
[/code]

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
yeeddt
初階會員


發表:18
回覆:28
積分:29
註冊:2008-11-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-05 08:53:54 IP:211.21.xxx.xxx 訂閱
原來我還是太死腦筋了。
感謝前輩的解答。

但是下面這行我要去掉才會正常動作。
否則會回到上一個紀錄座標跟原點連起來。

[code cpp]
vPoint.pop_back(); //減1 ,你自己想想為何吧
[/code]


編輯記錄
yeeddt 重新編輯於 2008-12-05 08:54:34, 註解 無‧
yeeddt 重新編輯於 2008-12-05 08:55:11, 註解 無‧
yeeddt 重新編輯於 2008-12-05 08:55:36, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-05 12:35:51 IP:122.120.xxx.xxx 訂閱
疑? 怪怪,我測的時候是有必要減1,  因為 當最後一次double click時,由於順序是 1 mouse down,再2 click再3 down…  我主要是要消除第1個mouse down所造成的點。因為,double click 這個動作應該不含加入點,我是把它當做是一個閉合的動作。 也許你是把它當做「額外的最後一點外加閉合」來看待吧?!

總之,有解決就好。 ^ _^


===================引 用 yeeddt 文 章===================
原來我還是太死腦筋了。
感謝前輩的解答。

但是下面這行我要去掉才會正常動作。
否則會回到上一個紀錄座標跟原點連起來。

[code cpp]
vPoint.pop_back(); //減1 ,你自己想想為何吧
[/code]


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2024-04-27 7:21:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!