| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 880 人关注过本帖
标题:求助!如何自动调整编辑框的字号以使其容纳不同字数的内容?
只看楼主 加入收藏
hepingfly
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:195
专家分:657
注 册:2015-5-21
收藏
得分:3 
这不是一个简单问题。有限度的个别解决,可能好办一点,但是,通用的办法几乎没有的。不相信的可试试,我们也学习一下。

星际花草
2015-06-30 20:44
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
大家看清楚楼主的要求:
1、固定大小的编辑框中显示备注字段的内容,有时字数多些,有时字数少些。
2、要求在显示全部内容的情况下尽量用比较大的字号显示。
3、字数少时就增大字号,以使得编辑框不显得那么空,字数多的时候又要减小字号,以使得编辑框能显示出全部内容。
分析:
1、楼主告诉我们,编辑框EDIT的宽度和高度是固定的,也就是说,对于某种大小的字体,他能容纳的字数是固定的,比如高度=300,宽度=400,字号=12号,假如能放200个字,就满。
2、要求显示全部内容?要求内容少时,用大号字,内容多时,用小号字。
3、目的就是为了编辑框好看,基本上满框显示?注意是,基本上满框,不是100%满框。
看到很多前辈,都是考虑怎么计算,字宽和像素的关系?还有的是说,怎么判断英文单词,是不是折行显示?你们想的太多了,VFP的编辑框,没WORD功能的,不会智能判断一串字符是不是一个单词?
其实,楼主在2楼,已经告诉大家,
换个简单的问法:怎样判断编辑框中的文本没有全部显示出来呢?
只要你告诉他,怎么判断编辑框的中文字,是不是全部显示出来,就可以了?
我的观点,很简单,就是判断EDIT中的文字长度,如果长度大于默认值,比如默认值是字体大小12号,能大概容纳200个字,整个EDIT框就差不多满了。如果EDIT的文字长度大于这个默认值,我们就改变字体大小,比如改为11号,此时,EDIT框,可能容纳250字,就基本满了,如果EDIT框的文字长度大于250个,我们再次改变字体大小,比如改为10号字。
就可以解决,楼主问的问题3?
你们太在意,在意在,怎么计算,怎么做到100%满框?
其实,楼主的目的是为了基本上满框显示的效果,又要把文字全部显示出来。。。。。。。
2015-07-01 09:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:3 
感觉编辑框没想象的那么简单,一定高宽的编辑框,字体字号一定时显示相同长度的字符串,其显示的效果也有不一样的时候,尤其是汉字数字字母混合的情况,会出现不规则的换行显示。因此,要满足需要,必需算出要显示的内容在编辑框里实际显示的行数和一行最多显示几个字符,单从VFP和编辑框本身提供的属性方法去解决真不容易。
2015-07-01 12:05
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:3 
TO 13楼
你考虑了内容分行问题,这个我没考虑到。。
如果不分行的话,应该很好处理。
2015-07-01 12:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
可以做到的,也不至于太复杂,弄点小手段即可。不过这种方案其实不是好主意,字体忽大忽小或界面尺寸突变,是UI设计中很忌讳的事。

授人以渔,不授人以鱼。
2015-07-01 14:38
jinjoxie
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:61
注 册:2015-6-3
收藏
得分:3 
回复 10楼 mywisdom88
你的想法并非楼主想要的结果吧,“111”和“壹壹壹”的长度一样,但所占框里的宽度不一样,按字的长度算只能是一个大概算法。
2015-07-01 14:48
w7802672
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2015-5-20
收藏
得分:0 
实际上我的编辑框的大小也不是固定的,之所以说是固定的,只是为了更好地搞清主要问题。至于用计算字数的方法,我认为不可取,备注字段内容假如是:程序实例
这是4个汉字。如果内容是:
程序
实例
这也是4个汉字,但显示出来的结果就完全不同了。
另外,如果加下英文单词,会有若干种折行的可能,因此用计算字数的方法是行不通的。
我现在已经找到了一个非常好的方法:
1、将内容送到EDIT1中,然后在键盘缓冲区中加入翻页,使光标定位到文字最后。
2、在内容中追加一个字符,然后在键盘缓冲区中加入退格键删除加入的字符,触发INTERACTIVECHANG事件
3、读取行数,将焦点送到另一个控件
4、在另一个控件中加入thisform.edit1.fontsize=thisform.edit1.fontsize+1,使字号加1
5、将焦点送回EDIT1,读取行数(眼睛看到的行数可能没有发生变化,但读取的行数可能已经发生了变化)
6、使1-5步循环,当EDIT1的大小容纳不下所有的内容时,读取到的行数会忽然变成一个很小的数,此时表明EDIT1刚好无法容纳整个内容了,这个时候将字号-1,这个字号就是当前EDIT1即能容纳全部内容,又是最大的字号了。
这样无论用户是否随时改变了EDIT1的大小,都能做到在显示全部内容的同时,字号是最大的。这个已经通过测试了。
----------------------------------------------------------------
现在问题又来了,我想让EDIT控件是透明的,但是EDIT在获得焦点后就不是透明的了,失去焦点后才会恢复透明,如何能使EDIT控件在获得焦点的时候也是透明的呢?请哪位指教一下,谢谢啦!
2015-07-01 16:49
w7802672
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2015-5-20
收藏
得分:0 
或者问个简单的问题:如何获取某个像素点的颜色值?我记得好象看过有这个函数,但是找了好几个小时也没有找到。
只是找到了一个PSET方法,它能够将某个点的颜色设置成表单的前景色,然后我再读表单的前景色,但是我在屏幕中不同颜色的位置取点,将其设置成表单的前景色,但是读出来的前景色都是一个值,并没有发生变化,不知道怎么回事?
2015-07-01 17:09
w7802672
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2015-5-20
收藏
得分:0 
实践证明:同一字号,如果字体不同,其折行或每个字所占的像素点数是不一样的。
2015-07-03 14:47
快速回复:求助!如何自动调整编辑框的字号以使其容纳不同字数的内容?
数据加载中...
 
   



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

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