【对 报表.FRX 文件的分析】

十豆三 2005-05-14 05:15:16
加精
【对 报表.FRX 文件的分析】

*-----------------------------
                 
 其实报表文件.FRX是一个表,其.FPT是一个备注库,其库结构和一般自由表没什么不同,都可以USE打开他的???.FRX,其字段总共有74项,分别介绍如下,希能给大家有所帮助:
 字段名称 类型 长度 小数 说明  
1 PLATFORM C 8 操作平台(_DOS或_WINDOWS)  
2 UNIQUEID C 10 唯一标识(当NAME合EXPR都为空时以_RHE开头, 否则以_RNR开头)  
3 TIMESTAMP N 10 时间标签(先后次序)  
4 OBJTYPE N 2 目标类型(1.环境; 2.数据库; 5.文字; 8.变量;9.TIMESTAMP为空; 23.TIMESTAMP为空)
5 OBJCODE N 3 目标代码(1.;4.;7.;53)  
6 NAME M 10 名称(数据库名称)  
7 EXPR M 10 表达式  
8 VPOS N 9 3 行座标  
9 HPOS N 9 3 列座标  
10 HEIGHT N 9 3 高度  
11 WIDTH N 9 3 宽度  
12 STYLE M 10 风格(透明,不透明)  
13 PICTURE M 10 格式或OLE文件名称  
14 ORDER M 10 索引排序  
15 UNIQUE L 1 唯一数据库(.F.,.T.,空)  
16 COMMENT M 10 注释  
17 ENVIRON L 1 是否报表运行环境(.T.时)  
18 BOXCHAR C 1 画框字符  
19 FILLCHAR C 1 表达式类型(C,N,D等,文字型的为空)  
20 TAG M 10 (当该记录为记录环境的记录时,该字段储存打印信息等;记录数据库时,储存数据库名称)  
21 TAG2 M 10 当该记录为记录环境的记录时,该字段储存打印控制等  
22 PENRED N 5 前景红  
23 PENGREEN N 5 前景绿  
24 PENBLUE N 5 前景蓝  
25 FILLRED N 5 填充红  
26 FILLGREEN N 5 填充绿  
27 FILLBLUE N 5 填充蓝  
28 PENSIZE N 5 划线宽度  
29 PENPAT N 5 指定填充图案(0.空;1.实体;2.水平;3.垂线;4.左  斜;5右斜;6.交叉;7.斜交叉)  
30 FILLPAT N 5 划线类型(0.无;1.点;2.虚线;3. 虚线-点;4. 虚线-点-点)  
31 FONTFACE M 10 字体类型  
32 FONTSTYLE N 3 字体风格  
33 FONTSIZE N 3 字体大小  
34 MODE N 3 模式  
35 RULER N 1 标尺(2-默认值,3-象素)  
36 RULERLINES N 1 标线宽度  
37 GRID L 1 是否显示网格线  
38 GRIDV N 2 垂直网格线刻度  
39 GRIDH N 2 水平网格线刻度  
40 FLOAT L 1 浮动  
41 STRETCH L 1 溢出时伸展  
42 STRETCHTOP L 1 相对于顶端伸展  
43 TOP L 1 相对于顶端固定  
44 BOTTOM L 1 相对于底端固定  
45 SUPTYPE N 1 控制类型  
46 SUPREST N 1 控制设置  
47 NOREPEAT L 1 每页都打印页标题  
48 RESETRPT N 2 重置报表  
49 PAGEBREAK L 1 每组从新的一页开始  
50 COLBREAK L 1 从新的一列开始  
51 RESETPAGE L 1 每组页号重新从1开始  
52 GENERAL N 3 通用  
53 SPACING N 3 空格  
54 DOUBLE L 1 是否加倍  
55 SWAPHEADER L 1 头互换  
56 SWAPFOOTER L 1 脚注互换  
57 EJECTBEFOR L 1 打印前走纸  
58 EJECTAFTER L 1 打印后走纸  
59 PLAIN L 1 指定只在报表开始位置出现页标题  
60 SUMMARY L 1 是否仅打印总计和分类总计信息  
61 ADDALIAS L 1 是否增加别名  
62 OFFSET N 3 偏移(0-左;1-右;2-居中)  
63 TOPMARGIN N 3 上边界高度  
64 BOTMARGIN N 3 下边界高度  
65 TOTALTYPE N 2 计算类型  
66 RESETTOTAL N 2 重置(1-表尾,2-页尾)  
67 RESOID N 3 源标识  
68 CURPOS L 1 是否显示当前位置  
69 SUPALWAYS L 1 是否打印重复值  
70 SUPOVFLOW L 1 当细节区数据溢出时到新页或新列打印  
71 SUPRPCOL N 1 当此列改变时打印  
72 SUPGROUP N 2 当此组改变时打印  
73 SUPVALCHNG L 1 若空行则删除  
74 SUPEXPR M 10 是否打印控制条件  
==============================  
Objtype Objcode Offset 含义  
5 0 文字  
8 0 表达式  
6 0 1 直线(水平线)  
6 0 0 直线(垂直线)  
7 4 矩形框(0~99椭圆)  
用于报表布局的控制的特征值列入下表:  
Objtype Objcode 含义  
9 0 页头高度  
9 1 页细节高度  
9 3 组标头高度  
9 4 组细节高度  
9 5 组脚注高度  
9 7 页脚注高度  
其他常用到的字段有:
①水平坐标(Hpos);
②宽度(Width);
③表达式类型(Fillchar);  
④字体(Fontface);
⑤对齐方式(Offset)。
...全文
366 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2005-05-14
  • 打赏
  • 举报
回复
《报表.frx字段及内容解释》

platform=”WINDOWS”
objtype = 8 且 objcode = 0 表示这是一个字段对象(expr为表达式)
objtype = 5 且 objcode = 0 表示这是一个标签对象(expr为标签内容)
objtype = 6 且 objcode = 0 表示这是一个线条对象
objtype = 7 且 objcode = 4 表示这是一个方框对象
objtype =17 且 objcode = 0 表示这是一个OLE
objtype = 9 且 objcode = 3 表示这是一个分组表达式
objtype = 9 且 objcode =0 增加标题带区
objtype = 9 且 objcode =8 增加总结带区
objtype=18 时 name=定义的变量名,expr=变量初始值
vpos 字段的纵向位置
hpos 字段的横向位置
height 字段的高度
width 字段的宽度(在组表达式中,表示小于这个值时从新的一页上开始)
fillchar 字段的类型
picture存放格式,例如”@Z”
comment存放备注
penred、pengreen、penblue、fillred、fillgreen、fillblue为颜色显示,一般值为-1
pensize=0、1、2、4、6表示细线、1、2、4、6磅
penpat值0、1、2、3、4、8,表示无、点线、虚线、点划线、双点划线、直线
fillpat值为方框的填充图形号
fontface 字体
fontstyle的数值从0到4,分别为(常规、粗体、斜体、粗斜体、下划线)128表示删除线
fontsize 字号
mode=1表示透明,mode=0表示不透明
folat=t 代表域控件位置为浮动
stretch=t 表示溢出时伸展
top=t 代表域控件位置为相对带区顶端固定
bottom=t代表域控件位置为相对带区底端固定
norepeat=t表示若是空白行则删除(在组表达式中表示每页都打印组标头)
pagebreak=t表示每组从新的一页上开始
resetpage=t表示每组的页号重新从1开始
resettotal值为1、2、5+I(I表示组编号,如组1为1)分别表示计算时重置到报表尾、页尾、组尾
offset值为0至2,表示格式为(左、右、中对齐)
offset为0、12、16、24、32、99分别表示矩形、圆角矩形1、2、3、4、5
totaltype的数值从0到7,分别为(不计算、计数、总和、平均值、最小值、最大值、标准误差、方差
supalways=t 且supvalchng=f打印重复值
supovflow=t表示当细节区数据溢出到新页/列时打印
suprpcol=3表示“在新页/列的第一个完整信息带内打印”,suprpcol=0表示否
supexpr存放打印条件表达式


------------------------------------------

《以下两个函数,用于求串的打印宽度、高度(都是近似值)。用于确定报表中文本框的大小》
************************************************
function strwidth(strlen,fontsize,maxwidth)
local r
r = fontsize/9*1.7*strlen
if r>maxwidth
r=maxwidth
endif
return r
************************************************
function strheight(strlen,fontsize,maxwidth)
local r
if strwidth(strlen,fontsize,maxwidth+1)>maxwidth
r = strwidth(strlen,fontsize,maxwidth*100)
r= (int(r/maxwidth) + iif((r%maxwidth)>0,1,0))
else
r= 1
endif
r = r*(fontsize/9)*4.5
return r
************************************************

------------------------------------------

《Visual FoxPro中实现报表双面打印》


在Visual FoxPro中,除了表文件以外,其他类型的文件,如数据库文件、表单文件、报表文件等也均可以以表的形式打开。例如,对于某报表文件R1,执行下列命令:
USE r1.frx
BROWSE

报表文件是有75个字段构成的,以.frx为扩展名的是“表”文件,扩展名为.frt的文件是相应的备注文件。报表“表”文件的部分字段的说明如表1所示。

其中,Vpos、Hpos、Height和Width字段值的单位为万分之一英寸; ObjType和ObjCode的值确定了报表中的对象类型。对于主要的报表对象来说,ObjType和ObjCode字段的取值如表2所示(注: 对于矩形控件,当OffSet字段的值大于0、小于81时,该控件为圆角矩形)。

在Visual FoxPro中,报表的双面打印主要要解决2个问题: 报表的分页与报表左边距的控制。
在设计时可以分为3步进行。
1.利用报表设计器设计一个报表(例如r1),用于打印奇数页(正面)。这时报表左边距等于装订线边距加报表右边距。
2.在同一张纸上,利用已设计的报表打印报表的第1、2页,测量出正反页的报表偏差(例如为0.8cm)。
3.利用如下形式的程序控制报表的打印。

LOCAL n, i, j
USE kmdm
&&假设报表数据环境为表kmdm.dbf
n=18
&&假设报表每页打印18条记录
GOTO BOTTOM
DO WHILE !MOD(RECNO(),n)=0
APPEND BLANK &&补齐报表
ENDDO
j= RECNO()/n
&&报表的页数
FOR i=1 TO j
IF MOD(i,2)=1 &&奇数页
REPORT FORM r1 PREV RANGE i, i
ELSE
SELECT 0
USE r1.frx
REPL hpos with hpos-0.8*3937 FOR InList(OBJTYPE,'5','6','7','8','17')
&&1cm=0.3937英寸
USE
REPORT FORM r1 PREV RANGE i,i
SELECT 0
USE r1.frx
REPL hpos with hpos-0.8*3937 FOR InList(OBJTYPE,'5','6','7','8','17')
USE
ENDIF
ENDFOR

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧