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

取得TMemo裡的游標位置

答題得分者是:syntax
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-12 23:28:55 IP:61.56.xxx.xxx 未訂閱
要怎樣取得TMemo裡游標的座標值呢?(不是CaretPos屬性喲...那只能傳回第幾行、第幾列...)
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-13 00:28:29 IP:211.76.xxx.xxx 未訂閱
您好: 參考此篇http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29900 或http://delphi.ktop.com.tw/topic.php?topic_id=21030 ~~應無所住而生其心~~ 發表人 - terrychen 於 2004/01/13 00:33:41
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-13 13:22:15 IP:61.56.xxx.xxx 未訂閱
terrychen,謝謝你的回答。 不過,我需要的是取得座標值(in pixel),而不是行列值。
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-13 13:34:38 IP:211.22.xxx.xxx 未訂閱
Sorry小弟沒看清楚說你不要CaretPos 再參考http://delphi.ktop.com.tw/topic.php?topic_id=27994 ~~應無所住而生其心~~ 發表人 - Terrychen 於 2004/01/13 14:20:20
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-15 20:53:59 IP:61.56.xxx.xxx 未訂閱
我目前用下面的方法取得座標位置:
var Pixel_X,Pixel_Y:integer;    Pixel_X:=Memo1.CaretPos.X*11; //11是我字型的大小(pt)
Pixel_Y:=Memo1.CaretPos.Y*20; //試驗的結果,11 pt的字型含行距大約佔20 pixel
這樣遇到了一個問題...當Scroll Bar捲動時,CaretPos必須減去左上角的行列數(取得相對值)...所以程式變成:
var Pixel_X,Pixel_Y:integer;
    LeftCol,TopRow:integer;    
//LeftCol:=??? <==不知道如何取得
TopRow:=SendMessage(code.Handle, EM_GETFIRSTVISIBLELINE, 0, 0); //取得第一列的"列"值    Pixel_X:=(Memo1.CaretPos.X-LeftCol)*11; //11是我字型的大小(pt)
Pixel_Y:=(Memo1.CaretPos.Y-TopRow)*20; //試驗的結果,11 pt的字型含行距大約佔20 pixel
可是要如何取得LeftCol?或者有更簡便、直接取得座標的方法?請提供一下經驗,謝謝!
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-15 20:57:41 IP:61.56.xxx.xxx 未訂閱
謝謝你~~~不過下面的文章並沒有這部份可參考,倒是http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29900提供取得第一列的方法 <>< face="Verdana, Arial, Helvetica">引言: Sorry小弟沒看清楚說你不要CaretPos 再參考http://delphi.ktop.com.tw/topic.php?topic_id=27994 ~~應無所住而生其心~~ 發表人 - Terrychen 於 2004/01/13 14:20:20
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-15 21:50:21 IP:211.76.xxx.xxx 未訂閱
您好: 因『取得座標值(in pixel),而不是行列值』 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29900 所以小弟以為您要的是『 Pixels[X][Y] 自己取灰階值吧』 http://delphi.ktop.com.tw/topic.php?topic_id=27994 那 P:=aInMemo.CaretPos; //Save目前游標位置(第y行,第x位置 CurPos:=aInMemo.selStart; //Save目前游標位置 LastPos:=(Length(aInMemo.Lines.Text)-2); //Save目前Memo目前最後後位置 這樣遇到了一個問題...當Scroll Bar捲動時,CaretPos必須減去左上角的行列數(取得相對值)... 這可達到您想要的ㄇ ~~應無所住而生其心~~
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-18 16:18:08 IP:218.32.xxx.xxx 未訂閱
我 Send "EM_POSFROMCHAR" Message 給 TRichEdit 可正常取得游標之座標.    可是 Send 給 TMemo 就不行... 看 >
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-18 16:53:46 IP:61.56.xxx.xxx 未訂閱
引言: 我 Send "EM_POSFROMCHAR" Message 給 TRichEdit 可正常取得游標之座標. 可是 Send 給 TMemo 就不行... 看 > < face="Verdana, Arial, Helvetica"> 我試的結果也是這樣說...
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-01-19 20:09:56 IP:203.203.xxx.xxx 未訂閱
GetCaretPos 應該就解決了! 發表人 - syntax 於 2004/01/19 20:26:03
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-01-19 20:21:18 IP:61.56.xxx.xxx 未訂閱
引言: 用 GetCursorPos(a TPoint) 取得游標的螢幕位置 然後用 self.ScreenToClient(a TPoint) 轉成相對的物件位置 就解決了!不用想太多
感謝syntax提供的方法。可是那傳回的是滑鼠的位置,不是游標的位置...
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-01-19 20:27:48 IP:203.203.xxx.xxx 未訂閱
引言:
引言: 用 GetCursorPos(a TPoint) 取得游標的螢幕位置 然後用 self.ScreenToClient(a TPoint) 轉成相對的物件位置 就解決了!不用想太多
感謝syntax提供的方法。可是那傳回的是滑鼠的位置,不是游標的位置...
剛發現,所以改了!見元位置
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-01-19 20:45:40 IP:61.56.xxx.xxx 未訂閱
引言: 剛發現,所以改了!見元位置
太感謝了...真的可以,想不到這麼單純!
系統時間:2024-06-01 23:06:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!