給滑鼠一個不可能的任務"雙滑鼠游標" |
答題得分者是:taishyang
|
shchen
一般會員 發表:12 回覆:27 積分:7 註冊:2003-08-13 發送簡訊給我 |
各位高手們,我有個需要,假設有2個TImage物件,我需要當滑鼠移動到TImage1上時,同時TImage2也會出現滑鼠游標,結果變成在畫面上,同時出現2個滑鼠游標,同步的動作,不知有沒有這類的Mouse API指令可以呼叫物件上的游標出現.
如果沒有,我另想了方式來逹成,就是直接在TImage2範圍內另繪製一個游標圖形,位置會隨著滑鼠移動而改變,然後在於TImage1的滑鼠事件內來控制TImage2的觸發事件,這樣的想法理想嗎??
不知各位前輩們,有沒有更好的方法來逹成"雙滑鼠游標"目的.
|
miyu
中階會員 發表:13 回覆:96 積分:91 註冊:2003-05-01 發送簡訊給我 |
引言: 各位高手們,我有個需要,假設有2個TImage物件,我需要當滑鼠移動到TImage1上時,同時TImage2也會出現滑鼠游標,結果變成在畫面上,同時出現2個滑鼠游標,同步的動作,不知有沒有這類的Mouse API指令可以呼叫物件上的游標出現. 如果沒有,我另想了方式來逹成,就是直接在TImage2範圍內另繪製一個游標圖形,位置會隨著滑鼠移動而改變,然後在於TImage1的滑鼠事件內來控制TImage2的觸發事件,這樣的想法理想嗎?? 不知各位前輩們,有沒有更好的方法來逹成"雙滑鼠游標"目的.如果你要求助Win32 API, 那據我記憶中是沒有. Windows的基本設計就是, 無論你接了幾隻 Mouse/Keyboard, 所有的輸入最終都會整合到Virtual Keyboard/Mouse. 換句話說, 從User layer看下去, 你只能看到一隻keyboard跟一隻Mouse存在而已. 而 Focus 也始終只有一個. |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
shchen您好:
請參考http://delphi.ktop.com.tw/topic.php?topic_id=25742
【問題】請問可以把自己的動作(加滑鼠)製程 .avi ???
RaynorPao版主的方式
並試試下面的Code
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { HDC hdc=GetDC(0); TPoint Posi = Image1->ClientToScreen(Point(Image1->Left,Image1->Top)); int x=Image1->Width; int y=Image1->Height; Graphics::TBitmap *bmpBuf=new Graphics::TBitmap; bmpBuf->Handle=CreateCompatibleBitmap(hdc, x, y); BitBlt(bmpBuf->Canvas->Handle, 0,0,Image1->Width,Image1->Height, hdc,Posi.x,Posi.y, SRCCOPY); HCURSOR hCur=GetCursor(); ICONINFO IconInfo; IconInfo.fIcon=FALSE; GetIconInfo(hCur, &IconInfo); TPoint pt; GetCursorPos(&pt); pt.x-=Posi.x; pt.y-=Posi.y; DrawIcon(bmpBuf->Canvas->Handle, pt.x-10, pt.y-10, hCur); Image2->Picture->Assign(bmpBuf); delete bmpBuf; ReleaseDC(0,hdc); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Form1->DoubleBuffered=true; } //---------------------------------------------------------------------------順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 - |
shchen
一般會員 發表:12 回覆:27 積分:7 註冊:2003-08-13 發送簡訊給我 |
引言: miyu感謝你給的回覆,也讓我打消了違反Windows定律的念頭,畢竟Windows的滑鼠指標只能有1個,現在我將專心的朝向用繪製的方法來逹成目的.謝謝引言: 各位高手們,我有個需要,假設有2個TImage物件,我需要當滑鼠移動到TImage1上時,同時TImage2也會出現滑鼠游標,結果變成在畫面上,同時出現2個滑鼠游標,同步的動作,不知有沒有這類的Mouse API指令可以呼叫物件上的游標出現. 如果沒有,我另想了方式來逹成,就是直接在TImage2範圍內另繪製一個游標圖形,位置會隨著滑鼠移動而改變,然後在於TImage1的滑鼠事件內來控制TImage2的觸發事件,這樣的想法理想嗎?? 不知各位前輩們,有沒有更好的方法來逹成"雙滑鼠游標"目的.如果你要求助Win32 API, 那據我記憶中是沒有. Windows的基本設計就是, 無論你接了幾隻 Mouse/Keyboard, 所有的輸入最終都會整合到Virtual Keyboard/Mouse. 換句話說, 從User layer看下去, 你只能看到一隻keyboard跟一隻Mouse存在而已. 而 Focus 也始終只有一個. |
shchen
一般會員 發表:12 回覆:27 積分:7 註冊:2003-08-13 發送簡訊給我 |
引言: shchen您好: 請參考http://delphi.ktop.com.tw/topic.php?topic_id=25742 【問題】請問可以把自己的動作(加滑鼠)製程 .avi ??? RaynorPao版主的方式 並試試下面的Codevoid __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { HDC hdc=GetDC(0); TPoint Posi = Image1->ClientToScreen(Point(Image1->Left,Image1->Top)); int x=Image1->Width; int y=Image1->Height; Graphics::TBitmap *bmpBuf=new Graphics::TBitmap; bmpBuf->Handle=CreateCompatibleBitmap(hdc, x, y); BitBlt(bmpBuf->Canvas->Handle, 0,0,Image1->Width,Image1->Height, hdc,Posi.x,Posi.y, SRCCOPY); HCURSOR hCur=GetCursor(); ICONINFO IconInfo; IconInfo.fIcon=FALSE; GetIconInfo(hCur, &IconInfo); TPoint pt; GetCursorPos(&pt); pt.x-=Posi.x; pt.y-=Posi.y; DrawIcon(bmpBuf->Canvas->Handle, pt.x-10, pt.y-10, hCur); Image2->Picture->Assign(bmpBuf); delete bmpBuf; ReleaseDC(0,hdc); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Form1->DoubleBuffered=true; } //---------------------------------------------------------------------------順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 - >>< face="Verdana, Arial, Helvetica"> 感謝taishyang前輩的回覆. 對!,這大蓋就是我指的繪製圖形的方法.但我只要繪製出滑鼠游標,以上的code會整個將Imgae1的畫面,全部繪到Image2上,這樣我Image2上原本的圖形就被覆蓋掉了.感謝你提供的code,我會參考並深入研究,寫出雙游標的功能. |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
|
shchen
一般會員 發表:12 回覆:27 積分:7 註冊:2003-08-13 發送簡訊給我 |
引言: 假設Image1為對照用的原圖,Image2為編輯用的複製圖, 其實您可以在程式啟動時,就隱藏了一個滑鼠箭頭(Image3), 當滑鼠進入Image1範圍中,此滑鼠箭頭(Image3)就相對地顯現在Image2相對位置上,若滑鼠離開Image1範圍時,滑鼠箭頭(Image3)即隱藏起來。 當滑鼠在Image1上移動作繪製效果時,Image2即時呈現編修後效果,而滑鼠箭頭(Image3)則隨滑鼠相對移動。 這樣子,您的程式就沒有"雙滑鼠游標"這個關卡了。 < >< > >>< face="Verdana, Arial, Helvetica"> 謝謝你的提示,但問題是,我找不到方法.命令來顯示隱藏滑鼠游標,所以我需要進一步的參考範例或指導,你知道這方面的資訊嗎?能否告訴我? |
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |