这个问题已经解决,参考@easyppt的那篇文章 https://bbs.bc-cn.net/thread-514540-1-1.html 12楼
只是行数,不带考虑每行的文字,可以稍微快点。
让deepseek给我详细注释一下我的代码,可读性更强了。
deepseek评价:
代码功能分析
主要功能:通过模拟键盘操作和光标位置检测,精确计算编辑框控件中的文本行数。
...
...
代码特点
可靠性:通过实际的光标移动来检测行数,避免文本换行等复杂情况的干扰
稳定性:使用Sleep函数确保键盘操作完全执行
实用性:适用于各种文本内容的行数统计需求
这段代码在处理多行文本编辑框的行数统计方面具有很好的实用价值。
程序代码:
只是行数,不带考虑每行的文字,可以稍微快点。
让deepseek给我详细注释一下我的代码,可读性更强了。
deepseek评价:代码功能分析
主要功能:通过模拟键盘操作和光标位置检测,精确计算编辑框控件中的文本行数。
...
...
代码特点
可靠性:通过实际的光标移动来检测行数,避免文本换行等复杂情况的干扰
稳定性:使用Sleep函数确保键盘操作完全执行
实用性:适用于各种文本内容的行数统计需求
这段代码在处理多行文本编辑框的行数统计方面具有很好的实用价值。
程序代码:
DECLARE integer Sleep IN WIN32API integer
* 定义局部变量
Local nstartpos, npos, nrows
Local oedit as EditBox * 定义编辑框引用
* 获取编辑框控件引用
oedit = Thisform.edit1
* 设置焦点到编辑框
oedit.SetFocus()
* 模拟键盘按下Ctrl[color=#808080]+Home,将光标移动到文本开头[/color]
Keyboard '{CTRL+HOME}'
* 处理事件,确保键盘操作完成
Doevents
sleep(600)
* 记录当前光标位置作为起始位置
nstartpos = oedit.SelStart
* 初始化行计数器
nrows = 1
* 开始循环计算行数
Do while .t.
Keyboard '{DNARROW}'
* 处理事件
Doevents
sleep(600)
* 记录新的光标位置
npos = oedit.SelStart
* 判断是否到达文本末尾(位置没有变化)
If nstartpos = npos
* 如果位置没有变化,说明已到达最后一行,退出循环
nrows=nrows-1
Exit
Else
* 否则更新起始位置为新的行首
nstartpos = npos
* 行计数器加1
nrows = nrows + 1
EndIf
EndDo
* 模拟键盘按下Ctrl[color=#808080]+Home,将光标重新移动到文本开头[/color]
Keyboard '{CTRL+HOME}'
* 将最终行数赋给外部参数
thisform.text1.value = nrows
[此贴子已经被作者于2025-11-11 11:39编辑过]







