Skip to content

第十一篇:内置语言

第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;

额外定义中文变量,就可以在代码里面使用中文变量

image.png

调用系统变量使用方括号:

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 —— 两遍报表最后一遍返回True
  • PageHeight —— 页面高度(减去页脚Band高度)
  • PageWidth —— 页面宽度
  • StopReport —— 中止报表生成
  • NewPage —— 开始新的页面
  • NewColumn —— 多栏报表中开始新的栏
  • ShowBand(<band>) —— 显示名为的Band

第57章 对象的属性和方法

57.1 通用属性(TRMView继承类)

属性类型描述
BandAlignInteger对象在Band中的位置(baNone, baLeft, baRight, baCenter, baWidth, baBottom)
EnabledBoolean是否响应事件
FillColorInteger背景颜色
FrameColorInteger边框颜色
FrameStyleInteger边框类型(psSolid, psDash, psDot, psDashDot, psDashDotDot, psDouble)
FrameTypInteger边框类型集合(frftTop, frftBottom, frftLeft, frftRight)
FrameWidthDouble边框宽度
HeightInteger对象高度
LeftInteger水平左边位置
MemoStringMemo中的文本
Memo.CountIntegerMemo总行数
NameString对象名称
StretchedBoolean是否自动伸展
TopInteger顶边Y轴坐标
VisibleBoolean是否显示
WidthInteger对象宽度

通用方法:

  • Hide —— 隐藏对象
  • Memo.Add(String) —— 增加新行
  • Memo.Clear —— 删除所有文本
  • Memo.Delete(Integer) —— 按索引删除行
  • Show —— 显示对象

57.2 Text对象(TRMMemoView)

属性类型描述
AlignmentInteger文本位置(frtaLeft, frtaRight, frtaCenter, frtaVertical, frtaMiddle, frtaDown)
AutoWidthBoolean是否根据文本自动改变大小
CharSpacingInteger字符间距
Font.NameString字体名称
Font.SizeInteger字体点阵大小
Font.StyleInteger字体修饰(fsBold, fsItalic, fsUnderline)
Font.ColorInteger字体颜色
GapXInteger文本和边框间的水平间距
GapYInteger文本和边框间的垂直间距
HideZerosBoolean变量为零时隐藏
LineSpacingInteger文本行间距
SuppressBoolean是否禁止重复值
TextOnlyBoolean是否为变量(True时变量不能生成)
WordBreakBoolean是否在音节处换行(仅用于俄语)
WordWrapBoolean是否换行

57.3 Band对象(TRMBandView)

属性类型描述
BreakedBooleanBand分隔开头
ChildBandStringBand来自其它Band
ColumnGapInteger水平栏间距
ColumnsIntegerBand中栏数
ColumnWidthInteger栏宽
ConditionString分组条件(用于分组头)
DataSourceString数据源
EOFBoolean是否到数据集末尾
FormNewPageBoolean是否强制分页
MasterString用于分组的Band
OnFirstPageBoolean是否打印第一页
OnLastPageBoolean是否打印最后一页
PrintChildIfInvisibleBoolean子Band不可见时是否打印
PrintIfSubsetEmptyBoolean子Band为空时是否打印
RepeatHeaderBoolean是否在每页重复

Band方法:

  • First —— 移到第一条记录
  • Next —— 移到下一条记录
  • Prior —— 移到上一条记录

57.4 Picture对象(TRMPictureView)

属性类型描述
BlobTypeIntegerBLOB图像类型(btBMP, btJPG, btICO, btWMF)
CenterBoolean图像是否居中
DataFieldString包含图像的数据表字段
KeepAspectBoolean改变大小时是否保留比例

57.5 Barcode对象(TRMBarcodeView)

属性类型描述
DataFieldString包含数据的数据表字段

57.6 CheckBox对象(TRMCheckBoxView)

属性类型描述
CheckColorInteger叉号的颜色
CheckStyleInteger检查框类型(csCross, csCheck)
DataFieldString包含数据的字段名

57.7 RichText对象(TRMRichView, TRMRXRichView)

属性类型描述
GapXInteger边框和文本的水平间距
GapYInteger边框和文本的垂直间距
TextOnlyBoolean是否为变量
DataFieldString包含数据的BLOB字段名

57.8 带阴影矩形对象(TRMRoundRectView)

属性类型描述
BeginColorInteger过渡色的初始颜色
EndColorInteger过渡色的结束颜色
GradientBoolean是否使用过渡色
RoundRectBoolean圆角还是直角
RoundSizeInteger曲度
ShadowColorInteger阴影颜色
ShadowWidthInteger阴影宽度
StyleInteger过渡类型(gsVertical, gsHorizontal, gsElliptic, gsRectangle, gsHorizCenter, gsVertCenter)

57.9 Shape对象(TRMShapeView)

属性类型描述
ShapeInteger图形对象(skRectangle, skRoundRectangle, skEllipse, skTriangle, skDiagonal1, skDiagonal2)

57.10 对话框控件通用属性和方法

属性类型描述
ColorInteger背景色
EnabledBoolean是否响应事件
Font.NameString字体名称
Font.SizeInteger字体点阵大小
Font.StyleInteger字体修饰
Font.ColorInteger字体颜色
HeightInteger对象高度
LeftInteger水平左边位置
NameString对象名
TopInteger顶边Y轴坐标
VisibleBoolean是否显示
WidthInteger对象宽度

对话框控件方法:

  • Hide —— 隐藏对象
  • SetFocus —— 设置输入焦点
  • Show —— 显示对象

57.11 数据访问控件

BDELookupComboBox:

属性类型描述
KeyFieldString选择值的依据
ListFieldString列表中显示值的字段
ListSourceString数据源
TextString选中的值

BDETable:

属性类型描述
ActiveBoolean是否激活
DatabaseNameString数据库别名
FieldsVariant可用字段列表
FieldCountInteger字段数
FilterString记录过滤表达式
IndexNameString次要索引名
MasterFieldsString主数据集联接字段
MasterSourceString主数据集
TableNameString数据表名
EOFBoolean是否到记录集末尾
RecordCountInteger记录数

BDETable方法:

  • Open —— 打开数据表
  • Close —— 关闭数据表
  • First —— 移到第一条记录
  • Last —— 移到最后一条记录
  • Next —— 移到下一条记录
  • Prior —— 移到上一条记录

BDEQuery:

属性类型描述
ActiveBoolean是否激活
DatabaseNameString数据库别名
DataSourceString主数据集
FieldsVariant可用字段列表
FieldCountInteger字段数
FilterString记录过滤表达式
SQLString查询语句
SQL.CountInteger查询语句行数
EOFBoolean是否到记录集末尾
RecordCountInteger记录数

BDEQuery方法:

  • 与BDETable相同,加:SQL.Add, SQL.Clear, SQL.Delete

BDEDataBase:

属性类型描述
AliasNameString连接数据库的别名
ConnectedBoolean是否激活连接
DatabaseNameString加到别名列表中的名字
DriverNameString驱动程序名
LoginPromptBoolean是否要求用户输入口令
ParamsString连接参数
Params.CountInteger参数列表总行数

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