100分大奉送! RichTextBox中怎么快速计算行号?

jettyjiang 2000-08-25 12:23:00
加精
我使用richTextBox,要求即时得到当前光标位置的行号和列号,
我现在使用的是richTextBox的GetLineFromChar方法,但是它太慢,
如果文本有几千行,速度就会特别忙。
哪位大虾有高招,请指教!
...全文
186 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fs_windy 2000-08-25
  • 打赏
  • 举报
回复
使用ApI函数SendMessage,加上常数EM_LINEINDEX 可返回行号,
EM_GETSEL 可返回一Long值,高位为行号索引,低位为字符索引
通过计算可得到你要的。


prefix 2000-08-25
  • 打赏
  • 举报
回复
没错,RichTextBox自己的GetLineFromChar太慢了,用api比较快:
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const EM_LINEFROMCHAR = &HC9
使用
LineNo = SendMessageLong(RichTextbox1.hwnd, EM_LINEFROMCHAR, -1&, ByVal 0&) + 1
LineNo就是当前光标所在行号。
andymei 2000-08-25
  • 打赏
  • 举报
回复
TotalLines := RichEdit.Lines.Count;
哈哈!
shines77 2000-08-25
  • 打赏
  • 举报
回复
应该是:TotalLines = RichTextBox.GetLineFromChar(Len(RichTextBox.Text))

TotalLines := RichEdit.Lines.Count; 是Delphi中的RichEdit的用法,在VB不适用,andymei 啊,不要误人子弟啊。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧