| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 323 人关注过本帖
标题:如何获取编辑框内容有多少行
只看楼主 加入收藏
easyppt
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:391
专家分:955
注 册:2021-11-24
收藏
得分:0 
感谢版主及各位老师们一直在持续关注和分享研究成果,我的水平实在太菜,没法和你们互动,惭愧!


前天 09:27
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1054
专家分:1581
注 册:2021-10-13
收藏
得分:0 
已经搞清楚产生那些莫名其妙的错误的原因,问题就在于循环的速度太快,导致我们在循环中模拟的键盘输入没有被执行(被丢弃了)。
另外代码中有一句 keyboard “HOME DNARROW”,这句两个键的模拟键入时间间隔太短,导致系统无法识别!我把它们分开了。
最后是把lockscreen代码删除,那语句会影响光标的移动,
我在程序里加入了sleep函数,以便让模拟键盘输入能够有足够的时间去运行,从100毫秒到1000毫秒一一试验,发现小于600毫秒就出错。

试运行了一下,完美解决。。。
图片附件: 游客没有浏览图片的权限,请 登录注册

附上修改后的代码ttt1
程序代码:
Lparameters aRows
DECLARE integer Sleep IN WIN32API integer
External array aRows

Local beg, end, tmp, rows, pt, ii
Local ed as EditBox

*Thisform.LockScreen = .t.
ed = This.edit1
ed.SetFocus()

Keyboard '{CTRL+HOME}'
DOEVENTS
sleep(600)
beg = ed.SelStart
rows = 1

Do while .t.
    Keyboard '{END}'
    DOEVENTS
    sleep(600)
    end = ed.SelStart
    ed.SelStart = beg
    ed.SelLength = Max(0, end - beg)
    Dimension aRows[rows]
    aRows[rows] = ed.SelText
    
    Keyboard '{HOME}'
    DOEVENTS
    sleep(600)
    Keyboard '{DNARROW}'
    DOEVENTS
    sleep(600)    
    tmp = ed.SelStart
    If beg = tmp
        Exit
    Else
        beg = tmp
        rows = rows + 1
    EndIf
EndDo
Keyboard '{CTRL+HOME}'
sleep(600)
*Thisform.LockScreen = .f.

rows = Max(1, Alen(aRows)-1)
Dimension aRows[rows]

昨天 10:52
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1054
专家分:1581
注 册:2021-10-13
收藏
得分:0 
上面这个方法有个弊端,一旦这个编辑框里有很多行数,用程序数,可能要好长时间。。。
昨天 11:01
快速回复:如何获取编辑框内容有多少行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.464572 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved