注册 登录
编程论坛 VFP论坛

请教编辑框自动通过改变字号显示全部文字,不出现滚动条,如何实现?辛苦老师给段代码

wxzd123 发布于 2025-05-13 19:39, 496 次点击
有几个自然段文字,用编辑框来显示,要全部显示则可视编辑框内不出现滚动条,字号尽量大,如何用代码实现?请老师执教,谢谢
10 回复
#2
wxzd1232025-05-13 20:08
请教能返回一共有多少行吗
#3
wcx_cc2025-05-13 23:02
这种情况,是不是说:根据编辑框的尺寸大小,无论文章字数有多少,都要填满整个编辑框,这实际上就是总字数决定了字号,每行的字数和总行数。好像首先必须从手工测试开始,多次测试后总结结果,然后再考虑代码吧!
#4
sam_jiang2025-05-14 01:14
鍥炲 2妤
aline
#5
wxzd1232025-05-14 05:51
回复 4楼 sam_jiang
老师您好,是用ALINES( ) 函数函数吗,这个没用过,这样写对面
nLineCount = ALINES(laLines, Thisform.Edit1.Value)
MESSAGEBOX("编辑框中共有 " + ALLTRIM(STR(nLineCount)) + " 行文本。")
只有本站会员才能查看附件,请 登录
#6
sam_jiang2025-05-14 20:24
回复 5楼 wxzd123
程序代码:

LOCAL ARRAY laLines[1]
nLineCount = ALINES(laLines, Thisform.Edit1.Value) &&wordwrap属性会影响这个值

* 显示总行数
MESSAGEBOX("总行数: " + TRANSFORM(nLineCount))

* 显示每行长度
FOR i = 1 TO nLineCount
    ? "第 " + TRANSFORM(i) + " 行长度: " + TRANSFORM(LEN(laLines[i]))
ENDFOR

如果不能运行,你尝试一下,memlines(),mline(),atline()等函数在试试看

integralheight属性 .t. 可以动态改变edit控件的高度,你也试试看。

 
#7
csyx2025-05-16 19:29
建议改用 Forms.TextBox 替换 vfp.EditBox,Forms.TextBox 提供的 LintCount 属性,就是你需要的自动换行后总行数。
另外,vfp 编辑框的自动换行算法与 windows 标准编辑框换行算法有少许不同,如果你将一段文字分别赋值给 vfp.editbox 和 Forms.TextBox,你会看到 Forms.TextBox 的换行算法更符合公文的行文规范,例如:vfp 经常会把标点符号放在新行的首位,遇到E文单词时,明明后面还有足够空间它也会另起一行。。。同时,这也导致无法利用 win32api 函数精确计算出自动换行后的绘制矩形高度,如果夹杂的E文不多到也近似可用
待我抽空从老代码中简化出一个函数供你参考

[此贴子已经被作者于2025-5-16 19:32编辑过]

#8
wxzd1232025-05-17 05:49
谢谢两位老师的帮助,知道行数也不能准确调整字号大小,只能大体调整。Forms.TextBox不能实现背景透明。
#9
csyx2025-05-17 08:53
示例中也演示了 vfp 与 windows 自动换行的差别,也就解释了为何无法精确计算出 vfp.editbox 最佳字体大小的原因,如果换成 Forms.TextBox,换行规则一致就可精确计算。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2025-5-17 08:58编辑过]

#10
wxzd1232025-05-17 10:44
谢谢csyx老师,学习一下,有不明白的在请教
#11
hsfisher2025-05-18 12:56
1