| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2118 人关注过本帖
标题:怎么让报表中标签的文字变竖长
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 17楼 shenkj001
干脆不用报表文件输出,直接用GDI向打印机输出。
没打印机,试过向屏幕输出是可以的。
因GDI的输出与设备无关,将输出设备句柄改为打印设备句柄就可以。

图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:
CLEAR
#DEFINE FW_DONTCARE            0
#DEFINE FW_HEAVY               900
#DEFINE GB2312_CHARSET         134
#DEFINE OUT_DEFAULT_PRECIS     0
#DEFINE CLIP_DEFAULT_PRECIS    0
#DEFINE DEFAULT_QUALITY        0
#DEFINE DEFAULT_PITCH          0
#DEFINE FF_DONTCARE            0

DECLARE LONG GetDC        IN user32 LONG
DECLARE LONG ReleaseDC    IN user32 LONG, LONG

DECLARE LONG CreateDC     IN Gdi32 LONG
DECLARE LONG DeleteObject IN Gdi32 LONG
DECLARE LONG CreateFont   IN Gdi32 LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG,LONG,STRING
DECLARE LONG SelectObject IN Gdi32 LONG,LONG
DECLARE LONG TextOut      IN Gdi32 LONG,LONG,LONG,STRING,LONG

hDC   = GetDC(_SCREEN.hWnd)
hFont = CreateFont(48, 12,;                       && 高度20, 宽取0表示由系统选择最佳值
                   0, 0,;                         && 文本倾斜,与字体倾斜都为0
                   FW_HEAVY,;                     && 粗体
                   0, 0, 0,;                      && 非斜体,无下划线,无中划线
                   GB2312_CHARSET,;               && 字符集
                   OUT_DEFAULT_PRECIS,;           && 
                   CLIP_DEFAULT_PRECIS,;          &&         
                   DEFAULT_QUALITY,;              && 一系列的默认值
                   DEFAULT_PITCH + FF_DONTCARE,;  &&   
                   "宋体")                        && 字体名称
SelectObject(hDC, hFont)
sText = "汉字ABCD1234"
TextOut(hDC, 10, 10, sText, LEN(sText))
DeleteObject(hFont)
ReleaseDC(_SCREEN.hWnd, hDC)
CLEAR DLLS
RETURN


输出到打印机,用GDI的CreateDC()创建打印机设备句柄:
hDC = CreateDC(NULL, 打印机名, NULL, NULL)
同时使用StartDoc()、EndDoc()、StartPage()、EndPage()控制打印页的开始和结束。

[ 本帖最后由 吹水佬 于 2015-6-14 17:12 编辑 ]
收到的鲜花
  • shenkj0012015-06-14 18:02 送鲜花  3朵  
2015-06-14 16:50
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
收藏
得分:0 
回复 21楼 吹水佬
辛苦了,谢谢你这么热心!我该怎么应用到报表中的某个标签?
图片附件: 游客没有浏览图片的权限,请 登录注册


桌面试验表单.rar (1.27 KB)


[ 本帖最后由 shenkj001 于 2015-6-14 20:44 编辑 ]

shenkj001@
2015-06-14 18:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 22楼 shenkj001
这个可以直接向打印输出,与VFP的报表文件无关。
相当于把打印机当作屏幕一样在上面绘制,只是创建设备句柄(hDC)有所不同。
2015-06-14 21:02
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
收藏
得分:0 
回复 23楼 吹水佬
再次感谢你的热心帮助!我的用意是把处理过的文字用到报表的标签上,将来有可能在其它标签上也能应用。

shenkj001@
2015-06-14 21:19
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 24楼 shenkj001
那段代码的原理是没有“标签”的概念,只是将输出设备(如屏幕、打印机等)当作一块画布,在上面随意绘制。
2015-06-14 21:40
shenkj001
Rank: 3Rank: 3
来 自:河南安阳
等 级:论坛游侠
威 望:9
帖 子:340
专家分:147
注 册:2005-5-23
收藏
得分:0 
回复 25楼 吹水佬
如果修改这段代码的句柄,设法把处理过的文字用到报表的标签上,将来有可能在报表的其它地方也能应用,主要是解决VFP报表自身不能设计字体的缺陷。 谢谢吹水佬!

shenkj001@
2015-06-15 08:47
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 26楼 shenkj001
要应用在VFP的报表文件,按VFP的说法,可以在 REPORT FORM ... OBJECT 引用 ReportListener 类,通过 ReportListener类GDIPlusGraphics 属性提供的Graphics对象,可以调用 GDI+ API 来改变报表的输出状态。
GDI+ API 主要相关的内容:有兴趣的研究一下,期待分享。
GdipCreateSolidFill()          创建绘制文本的画笔(BRUSH)
GdipCreateFontFamilyFromName() 创建FontFamily对象
GdipCreateFont()               创建FONT并指定其格式
GdipCreateFontFamilyFromName()
GdipCreateFontFromDC()
GdipCreateFontFromLogfontA()
GdipCreateFontFromLogfontW()
GdipGetLogFontA()              获取FONT
GdipGetLogFontW()
GdipCreateStringFormat()       指定String格式
GdipDrawString()               绘制文字

LOGFONT结构:
LF_FACESIZE = 32

LOGFONTA           STRUC     ; OK
    lfHeight          DWORD ?   
    lfWidth           DWORD ?   
    lfEscapement      DWORD ?   
    lfOrientation     DWORD ?   
    lfWeight          DWORD ?   
    lfItalic          BYTE  ?   
    lfUnderline       BYTE  ?   
    lfStrikeOut       BYTE  ?   
    lfCharSet         BYTE  ?   
    lfOutPrecision    BYTE  ?   
    lfClipPrecision   BYTE  ?   
    lfQuality         BYTE  ?   
    lfPitchAndFamily  BYTE  ?   
    lfFaceName        BYTE  LF_FACESIZE dup(?)
LOGFONTA           ENDS

LOGFONTW           STRUC     ; OK
    lfHeight          DWORD ?   
    lfWidth           DWORD ?   
    lfEscapement      DWORD ?   
    lfOrientation     DWORD ?   
    lfWeight          DWORD ?   
    lfItalic          BYTE  ?   
    lfUnderline       BYTE  ?   
    lfStrikeOut       BYTE  ?   
    lfCharSet         BYTE  ?   
    lfOutPrecision    BYTE  ?   
    lfClipPrecision   BYTE  ?
    lfQuality         BYTE  ?
    lfPitchAndFamily  BYTE  ?   
    lfFaceName        WORD  LF_FACESIZE dup(?)     ; TODO: Spruce this up a bit ???
LOGFONTW           ENDS
2015-06-15 09:59
快速回复:怎么让报表中标签的文字变竖长
数据加载中...
 
   



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

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