| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1151 人关注过本帖
标题:整屏显示1条记录并且选择合适的字体大小
只看楼主 加入收藏
a1999zqw
Rank: 1
等 级:新手上路
帖 子:186
专家分:0
注 册:2009-4-3
结帖率:78.95%
收藏
已结贴  问题点数:20 回复次数:10 
整屏显示1条记录并且选择合适的字体大小
整屏显示1条记录并且选择合适的字体大小,要一条一条记录显示,要显示在1024*768屏幕的居中位置,尽可能大,并且如果字段值中有空格,则空格之间的字符要显示在一行上,整个字段值要使用相同的字体和大小,谢谢
11.rar (780 Bytes)
搜索更多相关主题的帖子: 记录 
2013-09-06 20:25
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:4 
用报表?还是。。。
2013-09-06 21:27
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:4 
问题不明

坚守VFP最后的阵地
2013-09-07 02:32
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:4 
老师布置作业了

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-09-07 07:44
a1999zqw
Rank: 1
等 级:新手上路
帖 子:186
专家分:0
注 册:2009-4-3
收藏
得分:0 
以下是引用tlliqi在2013-9-6 21:27:30的发言:

用报表?还是。。。
prg,报表也可以吧,只要能实现就可以了


不是老师作业,年龄都老大不小了...................
2013-09-07 09:10
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:4 
这样子的话,只能直接写屏了,把你的字段文取出来直接写屏。
测试中drawtext函数的最后一个参数取值为0x400(10进制1024)时返文本的尺寸,你要求是1024*768(横向1024点,纵向768点),可自行计算每行可显示多少字符。附测试附件。
drawtext.rar (1.34 KB)

源码:
Declare Integer GetDC In user32 Integer HWnd
Declare Integer CreateFont In gdi32;
    INTEGER nHeight,;
    INTEGER nWidth,;
    INTEGER nEscapement,;
    INTEGER nOrientation,;
    INTEGER fnWeight,;
    INTEGER fdwItalic,;
    INTEGER fdwUnderline,;
    INTEGER fdwStrikeOut,;
    INTEGER fdwCharSet,;
    INTEGER fdwOutputPrecision,;
    INTEGER fdwClipPrecision,;
    INTEGER fdwQuality,;
    INTEGER fdwPitchAndFamily,;
    STRING  lpszFace
Declare Integer SelectObject In gdi32;
    INTEGER hdc,;
    INTEGER hObject
Declare Integer DrawText In user32;
    INTEGER   hDC,;
    STRING    lpString,;
    INTEGER   nCount,;
    STRING  @ lpRect,;
    INTEGER   uFormat
Local nhdc,nhobj
*start of font define
Local nheight,nwidth,nescapement,norientation,nweight,bltalic,bunderline,cstrikeout,ncharset,noutprecision,nclipprecision,nquality,npitchandfamily,lpszface
nheight=300
nwidth=0
nescapement=0
norientation=0
nweight=700&&FW_BOLD
bltalic=.F.
bunderline=.F.
cstrikeout=0
ncharset=134&&GB2312_CHARSET
noutprecision=0&&OUT_DEFAULT_PRECIS
nclipprecision=0&&CLIP_DEFAULT_PRECIS
nquality=0&&DEFAULT_QUALITY
npitchandfamily=0x0+0x32&&DEFAULT_PITCH | FF_SWISS
lpszface="宋体"
*end of font define
nhdc=getdc(0)
nhobj=createfont(nheight,nwidth,nescapement,norientation,nweight,bltalic,bunderline,cstrikeout,ncharset,noutprecision,nclipprecision,nquality,npitchandfamily,lpszface)
Local hfont
hfont=selectobject(nhdc,nhobj)
*start to draw text
Local rec,nlen,cstring,nstyle
*start of drawtext setting
rec=num2dword(0)+num2dword(768/2-nheight/2)+num2dword(1024)+num2dword(768)&&structure to save the area to draw
cstring="测试"+Chr(0)&&text to draw
nlen=Len(cstring)
nstyle=0x1+0x4&&the way to draw.DT_CENTER|DT_VCENTER,水平垂直居中
=drawtext(nhdc,@cstring,nlen,@rec,nstyle)


*user defined function
Function  num2dword (lnValue)
    #Define m0       256
    #Define m1     65536
    #Define m2  16777216
    Local b0, b1, b2, b3
    b3 = Int(lnValue/m2)
    b2 = Int((lnValue - b3 * m2)/m1)
    b1 = Int((lnValue - b3*m2 - b2*m1)/m0)
    b0 = Mod(lnValue, m0)
    Return Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)

Function  num2word (lnValue)
    Return Chr(Mod(m.lnValue,256)) + Chr(Int(m.lnValue/256))
2013-09-07 11:28
a1999zqw
Rank: 1
等 级:新手上路
帖 子:186
专家分:0
注 册:2009-4-3
收藏
得分:0 
感谢whinda,但好像不对,不管字符多少,显示的字体都一样,字符多的话就显示不完整了,谢谢
2013-09-07 19:10
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
createfont中的nheight用于控制字体的大小,因为创建的是临时逻辑字体,尽量固定字体的大小。drawtext中nstyle取值1-5时默认为单行显示去掉了字串中的空格及回车符,你可以选用其它的值让它支持多行显示。示例中是左右上下都居中显示,当然你的字串过长就显示到屏幕外面去了。选用多行显示吧,自己参阅drawtex函数的参数,这里不多说了。
2013-09-07 20:10
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
在1024*768屏的话,如果字体高是300,每行仅显示得了三个半汉字或七个ANSI字符(1024/300=3.41),根据nheight的取值多少和你字段中的字符多少可以确定用多少行显示。
设要显示的字段是cfield
local cstring,nheight,nrow,nstyle,npos
cstring=""
nstyle=0
npos=1
nheigth=150&&字体大小
nrow=int(1024/nheight)&&每行显示多少个字符
for a=1 to int(len(cfield)/nrow)+1
cstring=cstring+substr(cfield,npos,nrow)+chr(13)
npos=nrow*a+1
endfor
=drawtext(nhdc,@cstring,nlen,@rec,nstyle)&&nhdc和rec是预先就定义和获取好的
作如此修改就可以多行显示了,其中nstyle为0表示在规定的区域从最上一行最左边开始显示直到字串显示完毕。
2013-09-07 20:33
超神级
Rank: 2
等 级:论坛游民
帖 子:16
专家分:14
注 册:2013-7-25
收藏
得分:4 
用不了那么长的!太麻烦
2013-09-07 21:07
快速回复:整屏显示1条记录并且选择合适的字体大小
数据加载中...
 
   



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

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