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

[BCB]關於滑鼠座標超過1024X768解析度擷取問題

尚未結案
小球
一般會員


發表:2
回覆:4
積分:1
註冊:2003-07-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-02 01:32:30 IP:140.118.xxx.xxx 未訂閱
各位前輩大家好: 我遇到一個問題,就是我的Image元件尺寸超過一個螢幕解析度(1024X768) 目前是1024*3X768*3也就是9個螢幕那麼大的尺寸,以便載入一張9倍大的圖 使用Image上的Mouse Move事件來擷取X,Y座標 但是超過1024X768時BCB顯示座標值就不對了! 而我的螢幕又開不了那麼大的解析度,請問軟體該怎麼解決好呢? 謝謝! 發表人 - taishyang 於 2004/04/02 13:49:42
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-02 04:41:41 IP:61.30.xxx.xxx 未訂閱
小球您好: 可將此圖拉伸為X/3,Y/3顯示,那就是1024*768了 再將滑鼠抓到的座標X*3,Y*3理論上可行, 請問不知抓圖的座標要何用呢?? 亦可將圖分為九張,各張在加上與左上角第一張所誤差的點數 也是可以,純屬直覺想法,如有誤謬,請見諒。 --==多看.多學.多聽==--
------
--==多看.多學.多聽==--
小球
一般會員


發表:2
回覆:4
積分:1
註冊:2003-07-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-02 11:42:32 IP:140.118.xxx.xxx 未訂閱
您好:將圖stretch為1024X768後再將 座標值X,Y各乘3倍這個作法我做過 但是有誤差,並不合我用 比如原來大圖的x座標1026,1027,1028縮3倍以後皆為342會有失真問題 並無法分辨出原來大圖的實際座標位置 謝謝您的回答
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-03 23:45:13 IP:61.30.xxx.xxx 未訂閱
圖片漫遊是指不用捲軸,以鍵盤或是滑鼠控制圖片的移動,從而在較小的顯示區域內可以瀏覽圖片 的任何部分。下面以滑鼠控制為例來說明。 (1)、在視窗中放置一個TPanel元件,調整好其尺寸。 (2)、在TPanel元件上放置一個TImage元件。 (3)、設定TImage元件的AutoSize屬性為True,Left屬性為0,Top屬性為0。 (4)、在TForm1中加兩個區域變數:int iX0,iY0; (5)、對應TImage元件的OnMouseDown和OnMouseMove事件。
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{ iX0 = X;
  iY0 = Y;
}
void __fastcall TForm1::Image1MouseMove
(TObject *Sender, TShiftState Shift, int X, int Y)
{ int iDeltaX, iDeltaY;
  if(Shift.Contains(ssLeft))
  { iDeltaX = X - iX0;
    iDeltaY = Y- iY0;
    if(iDeltaY)
      Image1->Left  = iDeltaX;
    if(iDeltaY)
      Image1->Top  = iDeltaY;
   }
}
(6)、執行時按住滑鼠左鍵拖動,圖片將跟隨移動。 (7)、如果以鍵盤控制,只需參考滑鼠控制方式,加入鍵盤控制即可。 (8)、實際應用時,根據需要加入邊界限制,確保圖片不會被移出顯示區域之外。 以上供您參考,改一下就可得到您要的座標吧! --==多看.多學.多聽==--
------
--==多看.多學.多聽==--
小球
一般會員


發表:2
回覆:4
積分:1
註冊:2003-07-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-04 03:12:54 IP:140.118.xxx.xxx 未訂閱
太感謝了您了! 另外一提的是,我想拉一個Label顯示現在滑鼠點到的座標,並且跟著游標跑 Label的Top跟Left分別為現在滑鼠指到Y,X 為什麼超過1024X768時就會亂跳呢? 發表人 - 小球 於 2004/04/04 03:14:27
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-06 01:51:08 IP:61.30.xxx.xxx 未訂閱
小球您好:
int iX0,iY0;
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{iX0 = X;
 iY0 = Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{ int iDeltaX, iDeltaY;
  if(Shift.Contains(ssLeft))
  { iDeltaX = X - iX0;
    iDeltaY = Y- iY0;
    if(iDeltaY)
      Image1->Left  = iDeltaX;
    if(iDeltaY)
      Image1->Top  = iDeltaY;
   }
  Label1->Caption=AnsiString(X) " , " AnsiString(Y);
  或者是
  Label1->Caption=AnsiString(iX0) " , " AnsiString(iX0);
}
都不會亂跳喲! --==多看.多學.多聽==--
------
--==多看.多學.多聽==--
小球
一般會員


發表:2
回覆:4
積分:1
註冊:2003-07-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-06 02:19:37 IP:140.118.xxx.xxx 未訂閱
oh! 我想您搞錯我意思了,Label1的Caption座標內容顯示正常沒錯 但是若要Label1位置座落在我點的座標即Label1->Top=AnsiString(Y) Label1->Left=AnsiString(X)時 Label1會位置會跳來跳去的 您的不會嗎?我是用2000系統 多謝啦!
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-06 03:44:58 IP:61.30.xxx.xxx 未訂閱
不是亂跳:是因您滑鼠的座標是跟著圖片座標跑, 那您移動圖片時,Label1的座標是您Form(可見範圍)的座標, 所以Label1不能跟著圖片座標跑,可以用 Application->Title= AnsiString(X) " , " AnsiString(Y); 將它顯示在工作列上看座標,當然還有其它的方法 不一定要用Label來顯示喲! --==多看.多學.多聽==--
------
--==多看.多學.多聽==--
系統時間:2024-04-24 9:28:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!