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

給滑鼠一個不可能的任務"雙滑鼠游標"

答題得分者是:taishyang
shchen
一般會員


發表:12
回覆:27
積分:7
註冊:2003-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-15 00:01:50 IP:202.52.xxx.xxx 未訂閱
各位高手們,我有個需要,假設有2個TImage物件,我需要當滑鼠移動到TImage1上時,同時TImage2也會出現滑鼠游標,結果變成在畫面上,同時出現2個滑鼠游標,同步的動作,不知有沒有這類的Mouse API指令可以呼叫物件上的游標出現. 如果沒有,我另想了方式來逹成,就是直接在TImage2範圍內另繪製一個游標圖形,位置會隨著滑鼠移動而改變,然後在於TImage1的滑鼠事件內來控制TImage2的觸發事件,這樣的想法理想嗎?? 不知各位前輩們,有沒有更好的方法來逹成"雙滑鼠游標"目的.
miyu
中階會員


發表:13
回覆:96
積分:91
註冊:2003-05-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-15 00:15:36 IP:61.219.xxx.xxx 未訂閱
引言: 各位高手們,我有個需要,假設有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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-15 01:34:21 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-15 03:32:58 IP:202.52.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-15 03:41:41 IP:202.52.xxx.xxx 未訂閱
引言: 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;        
}
//---------------------------------------------------------------------------
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 - >< face="Verdana, Arial, Helvetica"> 感謝taishyang前輩的回覆. 對!,這大蓋就是我指的繪製圖形的方法.但我只要繪製出滑鼠游標,以上的code會整個將Imgae1的畫面,全部繪到Image2上,這樣我Image2上原本的圖形就被覆蓋掉了.感謝你提供的code,我會參考並深入研究,寫出雙游標的功能.
Cooky Kid
初階會員


發表:5
回覆:68
積分:44
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-09 17:18:32 IP:211.76.xxx.xxx 未訂閱
假設Image1為對照用的原圖,Image2為編輯用的複製圖, 其實您可以在程式啟動時,就隱藏了一個滑鼠箭頭(Image3), 當滑鼠進入Image1範圍中,此滑鼠箭頭(Image3)就相對地顯現在Image2相對位置上,若滑鼠離開Image1範圍時,滑鼠箭頭(Image3)即隱藏起來。 當滑鼠在Image1上移動作繪製效果時,Image2即時呈現編修後效果,而滑鼠箭頭(Image3)則隨滑鼠相對移動。    這樣子,您的程式就沒有"雙滑鼠游標"這個關卡了。 < >< >
shchen
一般會員


發表:12
回覆:27
積分:7
註冊:2003-08-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-10 00:44:12 IP:202.52.xxx.xxx 未訂閱
引言: 假設Image1為對照用的原圖,Image2為編輯用的複製圖, 其實您可以在程式啟動時,就隱藏了一個滑鼠箭頭(Image3), 當滑鼠進入Image1範圍中,此滑鼠箭頭(Image3)就相對地顯現在Image2相對位置上,若滑鼠離開Image1範圍時,滑鼠箭頭(Image3)即隱藏起來。 當滑鼠在Image1上移動作繪製效果時,Image2即時呈現編修後效果,而滑鼠箭頭(Image3)則隨滑鼠相對移動。 這樣子,您的程式就沒有"雙滑鼠游標"這個關卡了。 < >< > >< face="Verdana, Arial, Helvetica"> 謝謝你的提示,但問題是,我找不到方法.命令來顯示隱藏滑鼠游標,所以我需要進一步的參考範例或指導,你知道這方面的資訊嗎?能否告訴我?
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-06 16:14:19 IP:211.23.xxx.xxx 未訂閱
請多多利用搜尋功能或結案。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D -------------------------------
系統時間:2024-05-03 0:27:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!