如何获得edit框的行数问题
前一段时间有人提问如何获得编辑框里文字的行数,今天就试着写了一段代码,好像还能正确运行,特分享给大家。运行效果图:
10/5 晚更新代码,符合微软雅黑20号字体。
源代码:
程序代码:
**************************************************
*-- Form: form1 (d:\documents\visual foxpro 项目\edittest.scx)
*-- 父类: form
*-- 基类: form
*-- 时间戳: 11/05/25 09:38:11 PM
*
DEFINE CLASS form1 AS form
Top = 0
Left = 0
Height = 559
Width = 712
DoCreate = .T.
Caption = "Form1"
Name = "Form1"
ADD OBJECT edit1 AS editbox WITH ;
Height = 552, ;
Left = 0, ;
Top = 0, ;
Width = 421, ;
Name = "Edit1"
ADD OBJECT text1 AS textbox WITH ;
Height = 20, ;
Left = 509, ;
Top = 12, ;
Width = 100, ;
Name = "Text1"
ADD OBJECT text2 AS textbox WITH ;
Height = 20, ;
Left = 509, ;
Top = 48, ;
Width = 100, ;
Name = "Text2"
ADD OBJECT command1 AS commandbutton WITH ;
AutoSize = .T., ;
Top = 96, ;
Left = 552, ;
Height = 25, ;
Width = 84, ;
Caption = "计算字数与行", ;
Name = "Command1"
ADD OBJECT label1 AS label WITH ;
AutoSize = .T., ;
Caption = "每行字数:", ;
Height = 16, ;
Left = 432, ;
Top = 16, ;
Width = 62, ;
Name = "Label1"
ADD OBJECT label2 AS label WITH ;
Caption = "行数:", ;
Height = 16, ;
Left = 434, ;
Top = 50, ;
Width = 38, ;
Name = "Label2"
ADD OBJECT command2 AS commandbutton WITH ;
AutoSize = .T., ;
Top = 144, ;
Left = 480, ;
Height = 25, ;
Width = 156, ;
Caption = "生成一串随机字符再次测试", ;
Name = "Command2"
PROCEDURE Init
this.edit1.Value="SHA-1(Secure Hash Algorithm 1)是一种广泛使用的密码散列函数"+;
",由美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)"+;
"发布为联邦信息处理标准(FIPS PUB 180-1)。它能够将任意长度的"+;
"数据(消息)映射为固定长度(160位/20字节)的哈希值,通常用于数据"+;
"完整性校验、数字签名和密码存储等领域。"
ENDPROC
PROCEDURE command1.Click
nhead=4 && 首字符距编辑框的距离
*ntail=6 && fontname="宋体",fontsize=9的情况下 尾字符距滚动条的距离
ntail=2 && fontname="雅黑",fontsize=20的情况下 尾字符距滚动条的距离
nscollbar=21 &&滚动条的宽度
*!*上面3个数据可能根据编辑框的不同字体会有不同结果
*!*我的编辑框是宋体,9号字体,普通字体
*!* 设置不同的字体和大小看看
thisform.edit1.FontName=("微软雅黑")
thisform.edit1.FontSize=20
*!*
nwidth=0
i=0
cchar=""
cstr=""
nevenwidth=FONTMETRIC(6,thisform.edit1.FontName,thisform.edit1.FontSize,"N")
ctemp=thisform.edit1.Value
PUBLIC lines
DIMENSION lines[1]
nindex=0
DO WHILE .t.
i=i+1
IF i>LEN(ctemp)
nindex=nindex+1
DIMENSION lines[nindex]
lines[nindex]=ctemp
EXIT
ENDIF
cchar=SUBSTR(ctemp,i,1)
IF ASC(cchar)>128
i=i+1
ENDIF
cstr=SUBSTR(ctemp,1,i)
nstrwidth=TXTWIDTH(cstr,thisform.edit1.FontName,thisform.edit1.FontSize,"N")
nwidth=nhead+ntail+nscollbar+nstrwidth*nevenwidth
IF nwidth>thisform.edit1.Width
*!* i=i-1
IF ASC(cchar)>128
i=i-2 &&判断该行最后一个字符为汉字
ELSE
i=i-1 &&英文字母
ENDIF
nindex=nindex+1
DIMENSION lines[nindex]
lines[nindex]=SUBSTR(ctemp,1,i)
ctemp=STRTRAN(ctemp,lines[nindex],"")
IF EMPTY(ctemp)
EXIT
ELSE
i=0
LOOP
ENDIF
ELSE
LOOP
ENDIF
ENDDO
thisform.text1.Value=LEN(lines[1])
thisform.text2.Value=ALEN(lines)
ENDPROC
PROCEDURE command2.Click
tnlength=256
Rand(-1)
lctext = ''
i = 0
Do While i < tnlength
kb = 48 + Rand() * 80
If kb <= 57 And kb >= 48 Or kb <= 122 And kb >= 97 Or kb <= 90 And kb >= 65
i = i + 1
lctext = lctext + Chr(kb)
Endif
Enddo
thisform.edit1.value=lctext
ENDPROC
ENDDEFINE
*
*-- EndDefine: form1
**************************************************
[此贴子已经被作者于2025-11-5 21:51编辑过]










