怎样在richedit中知道pos位置,而得到该字符所在的行数,我出50分(50分)

  • 主题发起人 主题发起人 chenbm
  • 开始时间 开始时间
你是要光标所在的行吗?
 
用这个特性就可以知道了:richedit.caretpos.(x或y)
 
我是说任意指定一个pos直,而知道它所在的行,不一定是光标所在的字符
 
richedit.caretpos.(x或y)是象素值,当然不行。
这样:
所在行 :=SendMessage(RichEdit1.Handle,$0436,0,pos);
 
从开头开始找:

c:=0;

for i:=0 to RichEdit1.Lines.Count-1 do
begin
c:=c+Length(RichEdit1.Lines)+2;//回车换行符 2 个字符
if c<pos then
就是这一行了;
end;
 
o*o用SendMessage发送的是什么消息?$0436应该属于自定义消息的范围了吧?
 
取得行数?
这样:(X为列数,Y行数)
Y:=SendMessage(richedit1.Handle, EM_EXLINEFROMCHAR, 0,
richedit1.SelStart);
X := richedit1.SelStart -
SendMessage(richedit1.Handle, EM_LINEINDEX, CharPos.Y, 0);


beta(mophy@188.net)
 
beta的代码是取得当前光标的行列号,chenbm好像是要查找某个字符所在的行数。
 
beta的方法是正确的,
获取光标在控件中的行号,思路完全正确。
需要注意的是richedit中的最上面一行值为0.

 
各位大哥大姐,为何不亲自试一下我的SendMessage,这是正解。
 
补充一下, inc(X);inc(Y);
过后的X,Y才是真正的列号和行号,
因为第一列和第一行都是0.
正如banelon所说的. :-)
 
recive answer! thank you
 
后退
顶部