妖哥 2008-4-13 16:53
获取Memo组件中光标所在的位置
今天有人问我Memo组件如何获取光标所在的位置,所以找了下资料,找到这篇文章,现在来与大家分享!
编程思路
直接向Memo组件发送消息EM_LineFromChar并检测返回值,即可获知此组件中光标所在的行号,向Memo组件发送消息
EM_LineIndex并检测返回值即可获知此组件中光标所在的列号。
编程步骤
先在Form上放置三个Label组件,并在程序代码的前面声明下面这三个变量为整型数,即:
VarLpos,Cpos,Linelength:integer;
其中Lpos是行的值(按照Memo的规定,第一行为O),Cpos是字符的位置,LineLength是当前行的字符总个数。然后,再将下面的
七行程序代码分别加入Memo1的OnMouseDown和OnKeyDown的事件代码处即可。
Lops:=SendMessage(Memo1.Handle,EM_LineFromChar,Memol.SelStart,0);
Cpos:=SendMessage(Menol.Handle,EM_LineIndex,Lpos,0);
LineLength:=SendMessage(Memol.Handle,EM_LineLength,Cpos,0);
Cpos:=Memol.SelStart-CPos;
Label1.Caption:=IntToStr(ipos);
Label2.Caption:=IntToStr(cpos);
Label3.Caption:=IntToStr(linelength);
完成后,在执行程序时,随着在Memo组件中的编辑操作,Labell、Label2和Label3就将显示出相对应的当前行值、字符位置
与当前行的字符总个数了。
编程总结
请大家结合“获取RichEdit组件中光标所在的行号”一起学习,实际上两者极为相似。