如何取得游標(Edit、Memo)在Form上的(X、Y)坐標 |
尚未結案
|
shinjie
資深會員 發表:12 回覆:275 積分:287 註冊:2003-03-19 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
shinjie 您好: 基本上 Edit 物件是單行的,Column 值可以使用 SelStart 屬性來取得。 Memo 物件的 Row 與 Column 值可參考下列這篇: http://delphi.ktop.com.tw/topic.php?topic_id=18238
|
shinjie
資深會員 發表:12 回覆:275 積分:287 註冊:2003-03-19 發送簡訊給我 |
引言: 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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
如果不特定抓哪個元件, 可用 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;********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |