标题:请教edit编辑框如何读出当前光标所在行(段)的内容
只看楼主
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:680
专家分:1287
注 册:2009-3-1
得分:0 
为什么下载,下来不是压缩包?
2019-02-28 18:27
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 30楼 csyx
等找台互联网电脑下来试试,有问题再反馈。非常感谢您。
2019-02-28 19:20
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 30楼 csyx
非常感谢您,又学习了一天,修改了两个地方,基本可以使用了。
一、在command1的click中把:
IF !('=' $ c表达式)
   RETURN
ENDIF
修改为:
IF EMPTY(c表达式)
   RETURN
ENDIF
这样只要表达式不空就进行计算操作并显示结果。

二、把edit1的keypress修改为:
IF nkeycode = 32    &&&& 按下空格键计算
   KEYBOARD '{backspace}'    &&&& 删除刚按下的空格键产生的空格
   ()
ENDIF
这样做是想按空格键就执行计算,而且不改变光标的位置,以利于继续不停手的输入表达式。
编辑框.rar (2.82 KB)
2019-03-02 15:10
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 30楼 csyx
发现个小问题,稍显不完美,不知能不能解决。
一、运行程序,按command1是没有发现问题。
二、按空格键会有点问题。程序一启动刚运行,光标如果放在第一行而外的别的行,按空格键时光标会回退几位(不在当前位置了)。而运行几次后就没这情况了。
三、应该也是第二个问题产生的,比如程序一启动刚运行(必须是第一次运行),光标放在第三行的2和1之间,按空格键就会产生显示错误情况(图二)。而直接按command1是没问题的(图一)。按过command1以后,显示都会正常了,就是程序一启动第一次运行时按空格键不正常。


[此贴子已经被作者于2019-3-2 15:18编辑过]

2019-03-02 15:11
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
KeyPress改为
IF nkeycode = 32    &&&& 按下空格键计算
    ()
    Keyboard '{END}'
    NoDefault
ENDIF
-------------
另外,既然用空格代替等号做计算操作符
c表达式 = GETWORDNUM(c表达式, 1, '=')        && 取选中行左边的计算表达式
就要删掉,或改为
c表达式 = Rtrim(c表达式, '=')
以便用户在表达式右边输入等号时也能计算
--------------
这个
ALINES(arows, STRTRAN(THISFORM.edit1.TEXT, CHR(13)+CHR(10), CHR(1)+CHR(10)))
也改为
ALINES(arows, STRTRAN(THISFORM.edit1.TEXT+Chr(13), CHR(13)+CHR(10), CHR(1)+CHR(10)))
防止最后一行为空时,取到第一行


[此贴子已经被作者于2019-3-2 21:28编辑过]

2019-03-02 21:24
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 35楼 csyx
按照您的指点,将KeyPress第一行改为
IF nkeycode = 32 .OR. nkeycode = 61   &&&& 按下空格键或者等号键计算
就可以达到空格键和等号键都能计算的目的
-------------
c表达式 = GETWORDNUM(c表达式, 1, '=')        && 取选中行左边的计算表达式
这行不能删也不能改,否则在同一行连续按空格键和等号键就显示出错,
-------------
--------------
现在程序已接近完美了,但还有个小问题,
就是每计算一行,editbox后面就会多一空行,计算多了,空行也很多,拉动滚动条时不好操作,不知能不能进一步完善。

[此贴子已经被作者于2019-3-2 23:58编辑过]

2019-03-02 23:56
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
以下是引用丁春秋yxp在2019-3-2 23:56:30的发言:
就是每计算一行,editbox后面就会多一空行,计算多了,空行也很多,拉动滚动条时不好操作,不知能不能进一步完善。


这还不简单
FOR ii = n选中行+1 TO ALEN(arows)
    c后 = c后 + arows[ii] + CHR(13)+CHR(10)
ENDFOR
后面加一行代码,去掉最后的回车换行就好
c后 = Rtrim(c后, Chr(10), Chr(13))
2019-03-03 00:39
丁春秋yxp
Rank: 4
等 级:贵宾
威 望:10
帖 子:239
专家分:287
注 册:2017-10-31
得分:0 
回复 37楼 csyx
问题解决,程序已完美运行。
非常感谢您在这过程中的无私帮助。

[此贴子已经被作者于2019-3-3 09:29编辑过]

2019-03-03 09:05
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
得分:0 
*-通过回车符截取字符串方法
**** 提取当前行
aaa = ThisForm.edit1.Value
npos = thisform.edit1.SelStart
bbb1 = LEFT(aaa,npos)
ccc1 = ALLTRIM(RIGHT(bbb1,LEN(bbb1)-RAT(CHR(13),bbb1)),CHR(13),CHR(10))
bbb2 = RIGHT(aaa,LEN(aaa)-npos)
ccc2 = IIF(ATC(CHR(13),bbb2) = 0,bbb2,ALLTRIM(LEFT(bbb2,ATC(CHR(13),bbb2)),CHR(13),CHR(10)))
cc = ccc1+ccc2

**** 计算当前行并显示
c1 = LEFT(bbb1,RAT(CHR(13),bbb1))    &&& 前面块
c2 = IIF(AT(CHR(13),bbb2) = 0,"",CHR(13)+CHR(10)+LTRIM(RIGHT(bbb2,LEN(bbb2)-AT(CHR(13),bbb2)),CHR(13),CHR(10)))  &&& 后面块

[此贴子已经被作者于2019-3-11 22:47编辑过]

2019-03-11 21:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493240-1-1.html




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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071070 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved