Appearance
第十一篇:内置语言
第54章 脚本语言和对象
ReportMachine内置一种类似于Pascal的语言解释器。
Pascal语言元素:
- 操作符:
if...then...else,while...do,repeat...until,for..to..do,goto - 插入语句:
begin...end - 所有类型的变量、数组
- 通过点号访问ReportMachine对象的属性和方法
简化操作:
- 所有变量是Variant类型,不需要定义变量类型
- 所有变量是全局的,没有局部变量
- 没有类、记录、枚举等数据类型
- 不能写自己的过程或函数
- 没有循环的中断操作符(break、continue)
- 过程或函数不能有三个以上的参数
- 只能定义一维数组
第55章 编写代码
55.1 使用变量
pascal
begin
Cust := [CustomerData.RepQuery."CustNo"];
if FinalPass then
TotalSales := Arr[Cust]
else
TotalSales := 0;
end;额外定义中文变量,就可以在代码里面使用中文变量

调用系统变量使用方括号:
pascal
begin
a := [Page#];
end;55.2 使用数据库字段
- 完整路径:
[FormName.TableName."FieldName"] - 同一窗体:
[TableName."FieldName"] - Band中:
["FieldName"]
55.3 数组
只能使用一维数组:
pascal
begin
MyArr[0] := 'a';
MyArr[1] := 'b';
MyArr[2] := MyArr[0] + MyArr[1] + 'c' + MyArr[3];
end;55.4 常量
- 数字、字符和逻辑常量
- 颜色常量:clWhite、clBlack等
- 对话框返回值:mrNone、mrOk、mrCancel
- 系统常量:CRLF、Null
- 字体修饰:fsBold、fsItalic、fsUnderline
- 边框类型:frftNone、frftRight、frftBottom、frftLeft、frftTop
- 文本对齐:frtaLeft、frtaRight、frtaCenter、frtaVertical、frtaMiddle、frtaDown
- Band对齐:baNone、baLeft、baRight、baCenter、baWidth、baBottom
55.5 使用对象
使用点号访问属性和方法:
pascal
begin
Memo1.Font.Name := 'Courier New';
Memo1.Font.Size := 10;
Memo1.Font.Color := clRed;
Memo1.Font.Style := fsBold + fsItalic;
end;TStrings属性通过索引引用:
pascal
if Memo1.Lines[1] = 'a' then
Memo1.Lines[1] := 'b';55.6 对象修改
在脚本中可修改对象(大小、颜色、内容等),但不能修改已经创建好的对象。若需要修改已生成的对象,需设置扫描两遍报表。
第56章 内置函数
56.1 合计函数
Sum(<expression> [, band] [,1])—— 计算值的总和Avg(<expression> [, band])—— 算术平均值Min(<expression> [, band])—— 最小值Max(<expression> [, band])—— 最大值Count(<band>)—— 返回数据行的总数
56.2 字符处理函数
Str(<value>)—— 数值转换成字符Copy(<string>, <from>, <count>)—— 返回子串If(<expression>, <string1>, <string2>)—— 条件返回字符串FormatFloat(<formatstr>, <value>)—— 浮点数格式化FormatDateTime(<formatstr>, <value>)—— 日期时间格式化StrToDate(<value>)—— 字符转日期StrToTime(<value>)—— 字符转时间UpperCase(<value>)—— 转大写LowerCase(<value>)—— 转小写NameCase(<value>)—— 首字母大写Length(<string>)—— 返回长度Trim(<string>)—— 去除首尾空格Pos(<substring>, <string>)—— 返回子串位置
56.3 算术运算函数
Int(<value>)—— 整数部分Frac(<value>)—— 小数部分Round(<value>)—— 四舍五入value1 Mod value2—— 取余数MinNum(<value1>, <value2>)—— 最小值MaxNum(<value1>, <value2>)—— 最大值
56.4 其它函数
Input(<caption> [,<default>])—— 输入对话框Date—— 当前系统日期Time—— 当前系统时间Line#—— 当前行号(从每个新组开始计数)LineThrough#—— 当前行号(从报表开始计数)Column#—— 交叉报表中的当前栏数Page#—— 当前页码TotalPages—— 总页数(需两遍报表)DayOf(<date>)—— 天数(1..31)MonthOf(<date>)—— 月份YearOf(<date>)—— 年份MessageBox(<text>, <caption>, <buttons_and_icons>)—— 消息对话框
MessageBox按钮和图标值:
- 按钮:mb_Ok, mb_OkCancel, mb_YesNo, mb_YesNoCancel
- 图标:mb_IconError, mb_IconQuestion, mb_IconInformation, mb_IconWarning
56.5 报表生成期间可用的过程和函数
CurY—— 返回下一个Band打印的Y轴坐标(可读写)FreeSpace—— 页面上剩余的空白区域(点阵)FinalPass—— 两遍报表最后一遍返回TruePageHeight—— 页面高度(减去页脚Band高度)PageWidth—— 页面宽度StopReport—— 中止报表生成NewPage—— 开始新的页面NewColumn—— 多栏报表中开始新的栏ShowBand(<band>)—— 显示名为的Band
第57章 对象的属性和方法
57.1 通用属性(TRMView继承类)
| 属性 | 类型 | 描述 |
|---|---|---|
| BandAlign | Integer | 对象在Band中的位置(baNone, baLeft, baRight, baCenter, baWidth, baBottom) |
| Enabled | Boolean | 是否响应事件 |
| FillColor | Integer | 背景颜色 |
| FrameColor | Integer | 边框颜色 |
| FrameStyle | Integer | 边框类型(psSolid, psDash, psDot, psDashDot, psDashDotDot, psDouble) |
| FrameTyp | Integer | 边框类型集合(frftTop, frftBottom, frftLeft, frftRight) |
| FrameWidth | Double | 边框宽度 |
| Height | Integer | 对象高度 |
| Left | Integer | 水平左边位置 |
| Memo | String | Memo中的文本 |
| Memo.Count | Integer | Memo总行数 |
| Name | String | 对象名称 |
| Stretched | Boolean | 是否自动伸展 |
| Top | Integer | 顶边Y轴坐标 |
| Visible | Boolean | 是否显示 |
| Width | Integer | 对象宽度 |
通用方法:
Hide—— 隐藏对象Memo.Add(String)—— 增加新行Memo.Clear—— 删除所有文本Memo.Delete(Integer)—— 按索引删除行Show—— 显示对象
57.2 Text对象(TRMMemoView)
| 属性 | 类型 | 描述 |
|---|---|---|
| Alignment | Integer | 文本位置(frtaLeft, frtaRight, frtaCenter, frtaVertical, frtaMiddle, frtaDown) |
| AutoWidth | Boolean | 是否根据文本自动改变大小 |
| CharSpacing | Integer | 字符间距 |
| Font.Name | String | 字体名称 |
| Font.Size | Integer | 字体点阵大小 |
| Font.Style | Integer | 字体修饰(fsBold, fsItalic, fsUnderline) |
| Font.Color | Integer | 字体颜色 |
| GapX | Integer | 文本和边框间的水平间距 |
| GapY | Integer | 文本和边框间的垂直间距 |
| HideZeros | Boolean | 变量为零时隐藏 |
| LineSpacing | Integer | 文本行间距 |
| Suppress | Boolean | 是否禁止重复值 |
| TextOnly | Boolean | 是否为变量(True时变量不能生成) |
| WordBreak | Boolean | 是否在音节处换行(仅用于俄语) |
| WordWrap | Boolean | 是否换行 |
57.3 Band对象(TRMBandView)
| 属性 | 类型 | 描述 |
|---|---|---|
| Breaked | Boolean | Band分隔开头 |
| ChildBand | String | Band来自其它Band |
| ColumnGap | Integer | 水平栏间距 |
| Columns | Integer | Band中栏数 |
| ColumnWidth | Integer | 栏宽 |
| Condition | String | 分组条件(用于分组头) |
| DataSource | String | 数据源 |
| EOF | Boolean | 是否到数据集末尾 |
| FormNewPage | Boolean | 是否强制分页 |
| Master | String | 用于分组的Band |
| OnFirstPage | Boolean | 是否打印第一页 |
| OnLastPage | Boolean | 是否打印最后一页 |
| PrintChildIfInvisible | Boolean | 子Band不可见时是否打印 |
| PrintIfSubsetEmpty | Boolean | 子Band为空时是否打印 |
| RepeatHeader | Boolean | 是否在每页重复 |
Band方法:
First—— 移到第一条记录Next—— 移到下一条记录Prior—— 移到上一条记录
57.4 Picture对象(TRMPictureView)
| 属性 | 类型 | 描述 |
|---|---|---|
| BlobType | Integer | BLOB图像类型(btBMP, btJPG, btICO, btWMF) |
| Center | Boolean | 图像是否居中 |
| DataField | String | 包含图像的数据表字段 |
| KeepAspect | Boolean | 改变大小时是否保留比例 |
57.5 Barcode对象(TRMBarcodeView)
| 属性 | 类型 | 描述 |
|---|---|---|
| DataField | String | 包含数据的数据表字段 |
57.6 CheckBox对象(TRMCheckBoxView)
| 属性 | 类型 | 描述 |
|---|---|---|
| CheckColor | Integer | 叉号的颜色 |
| CheckStyle | Integer | 检查框类型(csCross, csCheck) |
| DataField | String | 包含数据的字段名 |
57.7 RichText对象(TRMRichView, TRMRXRichView)
| 属性 | 类型 | 描述 |
|---|---|---|
| GapX | Integer | 边框和文本的水平间距 |
| GapY | Integer | 边框和文本的垂直间距 |
| TextOnly | Boolean | 是否为变量 |
| DataField | String | 包含数据的BLOB字段名 |
57.8 带阴影矩形对象(TRMRoundRectView)
| 属性 | 类型 | 描述 |
|---|---|---|
| BeginColor | Integer | 过渡色的初始颜色 |
| EndColor | Integer | 过渡色的结束颜色 |
| Gradient | Boolean | 是否使用过渡色 |
| RoundRect | Boolean | 圆角还是直角 |
| RoundSize | Integer | 曲度 |
| ShadowColor | Integer | 阴影颜色 |
| ShadowWidth | Integer | 阴影宽度 |
| Style | Integer | 过渡类型(gsVertical, gsHorizontal, gsElliptic, gsRectangle, gsHorizCenter, gsVertCenter) |
57.9 Shape对象(TRMShapeView)
| 属性 | 类型 | 描述 |
|---|---|---|
| Shape | Integer | 图形对象(skRectangle, skRoundRectangle, skEllipse, skTriangle, skDiagonal1, skDiagonal2) |
57.10 对话框控件通用属性和方法
| 属性 | 类型 | 描述 |
|---|---|---|
| Color | Integer | 背景色 |
| Enabled | Boolean | 是否响应事件 |
| Font.Name | String | 字体名称 |
| Font.Size | Integer | 字体点阵大小 |
| Font.Style | Integer | 字体修饰 |
| Font.Color | Integer | 字体颜色 |
| Height | Integer | 对象高度 |
| Left | Integer | 水平左边位置 |
| Name | String | 对象名 |
| Top | Integer | 顶边Y轴坐标 |
| Visible | Boolean | 是否显示 |
| Width | Integer | 对象宽度 |
对话框控件方法:
Hide—— 隐藏对象SetFocus—— 设置输入焦点Show—— 显示对象
57.11 数据访问控件
BDELookupComboBox:
| 属性 | 类型 | 描述 |
|---|---|---|
| KeyField | String | 选择值的依据 |
| ListField | String | 列表中显示值的字段 |
| ListSource | String | 数据源 |
| Text | String | 选中的值 |
BDETable:
| 属性 | 类型 | 描述 |
|---|---|---|
| Active | Boolean | 是否激活 |
| DatabaseName | String | 数据库别名 |
| Fields | Variant | 可用字段列表 |
| FieldCount | Integer | 字段数 |
| Filter | String | 记录过滤表达式 |
| IndexName | String | 次要索引名 |
| MasterFields | String | 主数据集联接字段 |
| MasterSource | String | 主数据集 |
| TableName | String | 数据表名 |
| EOF | Boolean | 是否到记录集末尾 |
| RecordCount | Integer | 记录数 |
BDETable方法:
Open—— 打开数据表Close—— 关闭数据表First—— 移到第一条记录Last—— 移到最后一条记录Next—— 移到下一条记录Prior—— 移到上一条记录
BDEQuery:
| 属性 | 类型 | 描述 |
|---|---|---|
| Active | Boolean | 是否激活 |
| DatabaseName | String | 数据库别名 |
| DataSource | String | 主数据集 |
| Fields | Variant | 可用字段列表 |
| FieldCount | Integer | 字段数 |
| Filter | String | 记录过滤表达式 |
| SQL | String | 查询语句 |
| SQL.Count | Integer | 查询语句行数 |
| EOF | Boolean | 是否到记录集末尾 |
| RecordCount | Integer | 记录数 |
BDEQuery方法:
- 与BDETable相同,加:
SQL.Add,SQL.Clear,SQL.Delete
BDEDataBase:
| 属性 | 类型 | 描述 |
|---|---|---|
| AliasName | String | 连接数据库的别名 |
| Connected | Boolean | 是否激活连接 |
| DatabaseName | String | 加到别名列表中的名字 |
| DriverName | String | 驱动程序名 |
| LoginPrompt | Boolean | 是否要求用户输入口令 |
| Params | String | 连接参数 |
| Params.Count | Integer | 参数列表总行数 |
BDEDataBase方法:
Params.Add,Params.Clear,Params.Delete
第58章 解释器的使用示例
示例1:按条件改变颜色
pascal
if [Summa] < 2000 then
FillColor := clTransparent
else if [Summa] < 10000 then
FillColor := clGreen
else
FillColor := clRed示例2:只显示合计大于2000的数据行
pascal
if [Summa] > 2000 then
Visible := 1
else
Visible := 0示例3:使用FreeSpace和NewPage
pascal
if FreeSpace * 5/18 < 30 then
NewPage示例4:使用CurY移动当前位置
pascal
CurY := PageHeight - Height