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

如何取得游標(Edit、Memo)在Form上的(X、Y)坐標

尚未結案
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-14 11:29:00 IP:203.73.xxx.xxx 未訂閱
請問各位大大如何取得輸入介面(Edit、Memo)在輸入時的游標,在Form上面的坐標呢?也就是說用鍵盤打字時,游標會跟著動的坐標,而不是滑鼠的坐標。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-14 13:26:31 IP:218.19.xxx.xxx 未訂閱
shinjie 您好:    基本上 Edit 物件是單行的,Column 值可以使用 SelStart 屬性來取得。    Memo 物件的 Row 與 Column 值可參考下列這篇:    http://delphi.ktop.com.tw/topic.php?topic_id=18238
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-16 08:38:16 IP:203.73.xxx.xxx 未訂閱
引言: shinjie 您好: 基本上 Edit 物件是單行的,Column 值可以使用 SelStart 屬性來取得。 Memo 物件的 Row 與 Column 值可參考下列這篇: http://delphi.ktop.com.tw/topic.php?topic_id=18238
抱歉,是我說明的不夠清楚,並不是要取得Memo的Row Column, 是想取得輸入游標(Edit、Memo上都會有輸入游標)在Form上的(X,Y)。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-16 13:57:32 IP:219.137.xxx.xxx 未訂閱
shinjie 您好:    抱歉誤解了您的意思,請您再試試看 Windows API 裡的 GetCaretPos() 好嗎?我測試的結果,好像是可以取得游標所在位置的座標值,我使用 Memo 物件來測試,可以取得對應於 Memo 物件的座標值,如果您想要獲取對應於螢幕的座標值,透過 ClientToScreen() 函式應該可以獲得,如果是要對應於 Form 的座標值,那就將透過 GetCaretPos() 獲取的值加上 Memo 物件的 Top, Left 座標值應該就可以了 (如果有需要的話,可能還得加上其它相關物件座標的計算),我的測試碼如下:
void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    POINT pt;
    GetCaretPos(&pt);
    Label1->Caption = pt.x;
    Label2->Caption = pt.y;
}    void __fastcall TForm1::Memo1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    POINT pt;
    GetCaretPos(&pt);
    Label1->Caption = pt.x;
    Label2->Caption = pt.y;
}    void __fastcall TForm1::Memo1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    Label3->Caption = X;
    Label4->Caption = Y;
}
您參考一下,希望這是您所需要的。 發表人 - RedSnow 於 2005/05/16 14:10:50
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-16 14:01:32 IP:210.69.xxx.xxx 未訂閱
uses
  QControls;    procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
var
  P: TPoint;
begin
  // 取得 Edit3 上游標的位址
  GetCursorPos(p);
  Edit1.Text:=IntToStr(p.X);
  Edit2.Text:=IntToStr(p.Y);
end;
********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-16 14:04:10 IP:210.69.xxx.xxx 未訂閱
如果不特定抓哪個元件, 可用 Timer 來更新游標位置
uses
  QControls;    procedure TForm1.Timer1Timer(Sender: TObject);
var
  P: TPoint;
begin
  GetCursorPos(p);
  Edit1.Text:=IntToStr(p.X);
  Edit2.Text:=IntToStr(p.Y);
end;
********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-05-07 17:13:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!