線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1369
推到 Plurk!
推到 Facebook!

如何取得mouse的絕對座標

尚未結案
wjlin
一般會員


發表:10
回覆:15
積分:5
註冊:2003-09-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-09 15:26:10 IP:61.13.xxx.xxx 未訂閱
非常抱歉 剛開始使用BCB 想請問 在控制mouse移動時常常需要計算form上各原件的座標差值 onMouseMove所傳出的xy是各原件上的個別座標 不知道是不是有其他的方法 可以跨原件 隨時可以即時的得到mouse在整個form上的絕對座標 且不會隨著mouse在哪個元件上而不同? 感謝
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-09 15:51:24 IP:147.8.xxx.xxx 未訂閱
TControl has a method called ClientToScreen and you may be interested in the API GetCursorPos.
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-09 16:06:53 IP:210.66.xxx.xxx 未訂閱
這裡有另一個方法,我也覺的滿好用的, 用Label2 和 Label3 來顯示 (X,Y) 在Form的MouseMove加入下列程式碼, 並在你所用到元件的OnMouseMove,全指到這個FormMouseMove上, 就可以了 < class="code"> void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (((TControl *)Sender)->Name == "Form1") { Label2->Caption = IntToStr(X); Label3->Caption = IntToStr(Y); } else { Label2->Caption = IntToStr(X ((TControl *)Sender)->Left); Label3->Caption = IntToStr(Y ((TControl *)Sender)->Top); } } 國泰平安
wjlin
一般會員


發表:10
回覆:15
積分:5
註冊:2003-09-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-10 09:27:58 IP:61.13.xxx.xxx 未訂閱
非常感謝各位的指導 所以舉個例子 如果我在form上有一個GroupBox GroupBox中又包含StringGrid 則mouse座標控制如下囉 非常感謝!!!!!    
void __fastcall TForm1::GroupBox1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
    TControl * pObj = dynamic_cast(Sender);
    FormMouseMove(Sender, Shift, X   pObj->Left, Y   pObj->Top );
}    void __fastcall TForm1::HexCodeGrid1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
    TControl * pObj = dynamic_cast(Sender)->Parent;
    GroupBox1MouseMove(Sender, Shift,X    pObj->Left, Y    pObj->Top  );
}    
如果有任何更好的做法 煩請多多交流喔 謝謝
系統時間:2024-05-07 21:09:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!