自定函数
  # Smart 自定函数
# 1. DM类函数
# 1.1. CheckFieldEmpty
function CheckFieldEmpty(QField: TField): Boolean;
 说明: 判断字段是否为空。 返回值: 布尔Boolean类型。
- CheckFieldEmpty函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QDataSet | 数据集对象 | 
- 示例
 
Begin
	If DM.CheckFieldEmpty (FThis.dts0.FieldByName('FBiller')) then
Begin
	Showmessage('数据集字段FBiller 内容为空。');
End;
end;
 2
3
4
5
6
# 1.2. DataSetIsEdit
function DataSetIsEdit(const QDataSet: TRFDataSet): Boolean;
 说明: 判断数据集是否处理编辑状态。 返回值: 布尔Boolean类型。
- DataSetIsEdit函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QDataSet | 数据集对象 | 
- 示例
 
Begin
	If DM.DataSetIsEdit(FThis.dts0) then
Begin
	Showmessage('数据集dts0处理编辑状态。');
End;
end;
 2
3
4
5
6
# 1.3. ExecProcedureFast
function ExecProcedureFast(const QstoreName: string; QParams: String): Boolean;
 说明: 执行存储过程。 返回值: 布尔Boolean类型。
- ExecProcedureFast函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QstoreName | 存储过程名称 | 
| QParams | 存储过程参数 | 
- 示例
 
var
  tempVar: String;
begin
  //通过提示对话框询问用户
  if not PaxFunc.YesNoMsg ('提示','确定删除资料吗?') then Abort();
//存储过程参数赋值
tempVar:='10001,Delete,,';
//执行存储过程
If DM.ExecProcedureFast ('sp_Basic_Item',tempVar) then 
Begin
  Msg('执行成功!')
End;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
# 1.4. ExecProcedureRStr
function ExecProcedureRStr(const QstoreName: string; QParams: String): string;
 说明: 执行存储过程。 返回值: 字符串Srtring类型。
- ExecProcedureRStr函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QstoreName | 存储过程名称 | 
| QParams | 存储过程参数 | 
- 示例
 
var
  tempVar:String;
  vResult:String;
begin
  //通过提示对话框询问用户
  if not PaxFunc.YesNoMsg ('提示','确定删除资料吗?') then Abort();
//存储过程参数赋值
tempVar:='10001,Delete,,';
//执行存储过程
vResult := DM.ExecProcedureRStr('sp_Basic_Item',tempVar);
if vResult <> '' then
  begin
    //显示返回值内容
	Showmessage(vResult);
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1.5. OpenData
function OpenData(QDataSet: TRFDataSet): Boolean;
 说明: 打开数据集。 返回值: 布尔Boolean类型。
- OpenData函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QDataSet | 数据集对象 | 
- 示例
 
var
 vDataSet:TRFDataSet;
begin
    //创建数据集对象
DM.CreateDataSet(vDataSet);
Try
  //对数据集SQL赋值
vDataSet.SQL.Text := 'Select * from Baisc_Whs';
//打开数据集,以下二种方法都可行
//打开方式1
vDataSet.Open;
//打开方式2
DM.OpenData(vDataSet);
If vDataSet.RecordCount > 0 then
Begin
	Showmessage('数据集不为空!');
End;
Finally
  vDataSet.Free;
End;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1.6. OpenDatas
function OpenDatas(QDataSetList: TList<TRFDataSet>): Boolean;
 说明: 批量打开数据集。 返回值: 布尔Boolean类型。
- OpenDatas函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QDataSetList | 数据集对象 | 
- 示例
 
脚本中暂不支持TList<>对象。
 # 1.7. QueryValue
function QueryValue(const SQLStr: string; SQLParams: string): Variant;
 说明: 执行SQL获取返回值。 返回值: 变体Variant类型。
- QueryValue函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| SQLStr | SQL语句 | 
| SQLParams | SQL参数 | 
- 示例
 
 # 1.8. SaveData
function SaveData(QDataSet: TRFDataSet): Boolean;
 说明: 数据集提交。 返回值: 布尔Boolean类型。
- SaveData函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QDataSet | 数据集对象 | 
- 示例
 
var
    vDataSet: TRFDataSet;
begin
    //创建数据集对象
    DM.CreateDataSet(vDataSet ,nil);
Try
    //对数据集SQL赋值
    vDataSet.SQL.Text := 'Select Top 0 * from Baisc_Whs';
    //打开数据集
    vDataSet.Open;
    //新增一条数据
    vDataSet.Append;
    vDataSet.FieldByName('FInterID').asInteger := DM.GetNodeID;
    vDataSet.FieldByName('FWhsCode').asString := '0101';
    vDataSet.FieldByName('FWhsName').asString := '白坯仓库';
    vDataSet.Post;
    If DM.SaveData(vDataSet) then
    Begin
	    Showmessage('数据提交成功!');
    End;
Finally
    vDataSet.Free;
End;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1.9. SaveDatas
function SaveDatas(QDataSetList: TList<TRFDataSet>): Boolean;
 说明: 批量提交数据集。 返回值: 布尔Boolean类型。
- SaveDatas函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QDataSetList | 数据集对象 | 
- 示例
 
脚本中暂不支持TList<>对象。
 # 1.10. GetBillNo
function GetBillNo(QBillID: string; QDate: TDateTime; QPreview: Boolean): string;
 说明: 获取单据流水号。 返回值: 字符String类型。
- GetBillNo函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QBillID | 单据流水号规则编号 | 
| QDate | 日期 | 
| QPreview | 是否预览模式 | 
- 示例
 
//数据集dts1新增记录时,生成流水号
// 参数QPreview为true时,流水号生成只是预览模式,还未正式产生
procedure TMyHandler.dts1OnNewRecord(DataSet: TDataSet);
begin
   FThis.dts1.Edit;
   FThis.dts1FBatchNo.AsString := DBFUN.GetBillNo ('17020004',Now(),false);
end;
 2
3
4
5
6
7
# 1.11. GetGUID
function GetGUID: String;
 说明: 获取唯一ID。 返回值: 字符String类型。
- 示例
 
  ShowMessage(DM.GetGUID);
 # 1.12. GetNodeID
function GetNodeID: Integer;
 说明: 获取唯一ID **返回值: ** 整型Integer类型。
- 示例
 
//数据集dts1新增记录时,生成唯一ID
procedure TMyHandler.dts1OnNewRecord(DataSet: TDataSet);
begin
   FThis.dts1.Edit;
FThis.dts1FInterID.AsInteger := DM.GetNodeID;
end;
 2
3
4
5
6
# 1.13. GetNewID
function GetNewID:String;
 说明: 获取64位唯一ID 雪花算法 返回值: 字符String类型。
- 示例
 
//数据集dts1新增记录时,生成唯一ID
procedure TMyHandler.dts1OnNewRecord(DataSet: TDataSet);
begin
   FThis.dts1.Edit;
FThis.dts1FInterID.AsString := DM.GetNewID;
end;
 2
3
4
5
6
# 1.14. GetServerDate
function GetServerDate:String;
 说明: 获取服务器日期。 返回值: 字符String类型。
- 示例
 
//数据集dts1新增记录时,获取服务器日期
procedure TMyHandler.dts1OnNewRecord(DataSet: TDataSet);
begin
FThis.dts1FDate.AsString := DM.GetServerDate;
end;
 2
3
4
5
# 1.15. GetServerDateTime
function GetServerDateTime:String;
 说明: 获取服务器日期时间。 返回值: 字符String类型。
- 示例
 
//数据集dts1新增记录时,获取服务器日期时间
procedure TMyHandler.dts1OnNewRecord(DataSet: TDataSet);
begin
FThis.dts1FCeateDateTime.AsString := DM.GetServerDateTime;
end;
 2
3
4
5
# 1.16. GetDBConnection
function: GetDBConnection(const ADefName: UnicodeString): TFDConnection; 
 说明: 获取数据库连接设置。 返回值: TFDConnection 类型,可用于 TFDQuery 的连接。
- GetDBConnection函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADefName | 数据库连接设置的名称 | 
- 示例
 
  FThis.FDQUery1.Connection := DM.GetDBConnection('Smart');
  FThis.FDQuery1.SQL.Text := 'SELECT * FROM Table_Test';
  FThis.FDQuery1.Open;
 2
3
# 2. PaxFunc类函数
  该章节中的函数需以PaxFunc.开头。
# 2.1. AddMarker
function AddMarker(AMapView:TVCLCCAMapView):TCCAMapMarker;
 说明: 增加一个地图标记 返回值: 地图标记TCCAMapMarker对象
- AddMarker函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AMapView | 高德地图控件 | 
- 示例
 
procedure TMyHandler.VCLCCAMAPVIEW1MAPCLICKEVENT(ASender: TObject; APos: TCCLngLat);
var
 vTCCAMapMarker:TCCAMapMarker;
begin
  //点击地图时的经纬坐标
  FPos:=APos;   
  //显示经纬度到标签上
  FThis.lbJW.Caption := FloatToStr(APos.Longitude)+','+ FloatToStr(APos.Latitude);  
  FThis.TagString := '';
  //获取经纬度的地址
  paxfunc.GetMarkerAddress(FThis.VCLCCAMapView1,APos,FThis);   
  //清除地图标记
  FThis.VCLCCAMapView1.Markers.Clear;
  //增加一个标记到地图上
  vTCCAMapMarker := paxfunc.AddMarker(FThis.VCLCCAMapView1); 
    if FThis.VCLCCAMapView1.MapLoadCompleted then
	begin  
	  with vTCCAMapMarker do
	  begin
            //标记地图信息
		Title := FThis.TagString;
		Position.Longitude := APos.Longitude;
		Position.Latitude := APos.Latitude;
		// 设置了Content属性Icon属性失效。要自定义丰富的标记就用Content属性吧
		Content:='<div>';
		Content:=Content+'<image src="http://webapi.amap.com/theme/v1.3/markers/n/mark_r.png"></image>';
	   //Content:=Content+'<span style="white-space: nowrap;border:1px solid #fff;background-color:#ff0000;font-size: 12px;color:white;  padding: 4px 10px;">'+FThis.TagString+'</span>';
		// 图片19   x   31   pixels
		Content:=Content+'</div>'; // 必须有根div元素 不然缩放时图标位置不会更新
            // 绘制
		draw;
	  end; 
    end;  
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 2.2. Base64Get
function  Base64Get(FileName:String):String;
 说明: 文件转Base64 返回值: String支付类型
- Base64Get函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| FileName | 文件路径包含文件名称 | 
- 示例
 
 # 2.3. BIG2cn
function BIG2cn(bigStr: string): string;
 说明: 繁体转简体 返回值: 字符string类型
- BIG2cn函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| bigStr | 指定繁体内容字符串 | 
- 示例
 
var
 s:String;
Begin 
   s := PaxFunc.BIG2cn('我是中國人!我自豪!我驕傲!');
End;
 2
3
4
5
- 运行结果: 我是中国人!我自豪!我骄傲!
 
# 2.4. Cn2Big
function Cn2Big(CnStr: string): string;
 说明: 简体转繁体 返回值: 字符string类型
- Cn2Big函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| CnStr | 指定简体内容字符串 | 
- 示例
 
var
 s:String;
Begin 
   s := PaxFunc.Cn2Big('我是中国人!我自豪!我骄傲!');
End;
 2
3
4
5
- 运行结果: 我是中國人!我自豪!我驕傲!
 
# 2.5. CreateStringStream
function CreateStringStream(Encoding:String='UTF8'):TStringStream;
 说明: 指定编码类型创建字符串流 返回值: TStringStream 字符串流
- CreateStringStream函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Encoding | 编码类型 | 
- 示例
 
procedure TMyHandler.IdHTTPServer1CommandGet;
var
  aRequestContent: string;
  reqstream:TStringStream;
  APathInfo :String;
begin
    AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Origin:*');
    AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Headers:*');
    AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Method:*');
    AResponseInfo.ContentType := 'application/json;charset=utf-8'; //解决 AResponseInfo 返回中文乱码问题
  APathInfo := ARequestInfo.Document;
  if ARequestInfo.Command.ToLower = ('POST').ToLower then
  begin
    if APathInfo = '/api/dvrs' then
    begin
      if (ARequestInfo.PostStream <> nil) and (ARequestInfo.PostStream.Size > 0) then
      begin
        ARequestInfo.PostStream.Position := 0;
        //创建UTF8编码的字符串流
        reqstream:=paxfunc.CreateStringStream('UTF8');
        try
         ARequestInfo.PostStream.Position := 0;
         reqstream.LoadFromStream(ARequestInfo.PostStream);
         aRequestContent := reqstream.DataString;
         FThis.Memo1.Lines.Insert(0, FormatDateTime('HH:NN:SS.ZZZ ', now) + '/api/dvrs->' + aRequestContent);
        finally
          reqstream.Free;
        end;
       AResponseInfo.ContentText := aRequestContent; //成功 响应201
       AResponseInfo.WriteContent;
      end;
    end;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 2.6. DigitToEn
function DigitToEn(strDigits: String; intRMB: Boolean): String;
 说明: 转换成英文金额 返回值: 字符string类型
- DigitToEn函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| strDigits | 数字字符串 | 
| intRMB | 是否RMB | 
- 示例
 
var
 s:String;
Begin 
   s := DigitToEn('10058.5',false);
End;
 2
3
4
5
- 运行结果: TEN THOUSAND FIFTY-EIGHT DOLLARS AND FIVE CENTS ONLY
 
# 2.7. GetBarcode
function GetBarcode(Graphic: TGraphic): string;
 说明: 获取图片中的条码内容 返回值: string字符串类型
- GetBarcode函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Graphic | 图片中的图形对象 | 
- 示例
 
var
 v:string;
begin
  v:=paxfunc.GetBarcode(FThis.image1.Picture.Graphic);
  FThis.memo1.Lines.Add(v);
end;
 2
3
4
5
6
# 2.8. GetChinaMoney
function GetChinaMoney(small: Variant): string;
 说明: 将数字金额转成中文大写金额 返回值: 字符string类型
- GetChinaMoney函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| small | 数字金额 | 
- 示例
 
var
 s:String;
Begin
   s := PaxFunc.GetChinaMoney('10058.56');
End;
 2
3
4
5
- 运行结果: 壹万零仟零佰伍拾捌元伍角陆分
 
# 2.9. GetControlsImage
function GetControlsImage(ACtrl: TWinControl;AFile:string=''): TBitmap;
 说明: 截取当前运行界面存为图片文件 返回值: TBitmap类型
- GetControlsImage函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ACtrl | 需要截屏的窗体 | 
| AFile | 输出文件名称带路径 | 
- 示例
 
Begin
	PaxFunc.GetControlsImage(FThis,'c:\123.bmp');
end;
 2
3
# 2.10. GetFirstDayofMonth
function GetFirstDayofMonth(const DT: TDateTime): TDateTime;
 说明: 获取指定日期所在月份的第一天。 返回值: 日期TDateTime类型。
- GetFirstDayofMonth函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| DT | 指定的一个日期类型 | 
- 示例
 
Var
vMonthFirstDay:TDateTime;
Begin
   vFirstEndDay  := PaxFunc.GetFirstDayofMonth('2019-07-10');
end;
 2
3
4
5
- 运行结果: 2019-07-01
 
# 2.11. GetHostIP
function GetHostIP: string;
 说明: 获取计算机IP地址 返回值: 字符String类型
- 示例
 
var
 vHostIP:string;
Begin
	vHostIP:= PaxFunc.GetHostIP;
End;
 2
3
4
5
- 运行结果: 192.168.1.100
 
# 2.12. GetHostName
function GetHostName: string;
 说明: 获取计算机名称 返回值: 字符string类型
- 示例
 
var
 vHostName:string;
Begin
	vHostName := PaxFunc.GetHostName;
End;
 2
3
4
5
- 运行结果: I-PC
 
# 2.13. GetLastDayofMonth
function GetLastDayofMonth(const DT: TDateTime): TDateTime;
 说明: 获取指定日期所在月份的第后一天。 返回值: 日期TDateTime类型。
- GetLastDayofMonth函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| DT | 指定的一个日期类型 | 
- 示例
 
Var
vMonthEndDay:TDateTime;
Begin
   vMonthEndDay  := PaxFunc.GetFirstDayofMonth('2019-07-10');
end;
 2
3
4
5
- 运行结果: 2019-07-31
 
# 2.14. GetMacAddress
function GetMacAddress: string;
 说明: 获取计算机网卡地址 返回值: 字符String类型
- 示例
 
var
 vHostMacAddress:string;
Begin
	vHostMacAddress:= GetMacAddress;
End;
 2
3
4
5
- 运行结果: 01:1A:1B:EF:0A:BC
 
# 2.15. GetPropValue
function GetPropValue(QControl:TComponent; QControlProp: string): Variant;
 说明: 获取控件属性值 返回值: 变体Variant 类型
- GetPropValue函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QControl | 需要获取属性的控件 | 
| QControlProp | 控件属性名称 | 
- 示例
 
var
  vPropValue:variant;
begin
  //获取窗体FThis.dbdts0FItemName对象的Name名称
  vPropValue := PaxFunc.GetPropValue(FThis.dbdts0FItemName,'Name');
  Showmessage(vPropValue);
end;
 2
3
4
5
6
7
# 2.16. GetNumber
function GetNumber(S: string): string;
 说明: 截取字符串中的数字 返回值: 字符String类型
- GetNumber函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| S | 指定一个包含数字的字符串 | 
- 示例
 
var
    v:string;
begin
    v:= PaxFunc.GetNumber ('12A56B.A11');
    //显示返回的SQL内容
    Showmessage(v);
end;
 2
3
4
5
6
7
- 运行结果: 125611
 
# 2.17. GetJSONObject
function GetJSONObject(const QJSONObject: TJSONValue; const QPath:String):TJSONObject;
 说明: 获取JSON对象中指定的嵌套对象。 返回值: TJSONObject类型。
- GetJSONObject 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
- 示例
 
假设需要对以下JSON进行解析。
{
    "status": "OK",
    "Language":{
        "DefaultLanguage": 1
    }
}
 2
3
4
5
6
//PasScript
Var 
  J:TJSONObject;
  s: String;
begin
  J:=TJSONObject.Create;
  s:= '{"status": "OK","Language":{"DefaultLanguage": 1}}';
  Try
     j := TJSONObject(paxfunc.ParseJSONValue(s));
     j := paxfunc.GetJSONObject(j,'Language');
     ShowMessage(paxfunc.GetJSONNumber(j,'DefaultLanguage'));
     //上述两句程序也可改写为
     //ShowMessage(paxfunc.GetJSONNumber(j,'Language.DefaultLanguage'));
  Finally
    j.Free;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
以上程序运行后获取到的值为1。
# 2.18. GetJSONArray
function GetJSONArray(const QJSONObject: TJSONValue; const QPath:String):TJSONArray;
 说明: 获取JSON对象中指定的数组列。 返回值: TJSONArray类型。
- GetJSONArray 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
- 示例
 
假设需要对以下JSON进行解析。
{
    "status": "OK",
    "Language":{
        "DefaultLanguage": 1,
        "options":[
            {"options":1},
            {"options":2}
        ]
    }
}
 2
3
4
5
6
7
8
9
10
//PasScript
Var 
  J:TJSONObject;
  A:TJSONArray;
  s: String;
begin
  J:= TJSONObject.Create;
  A:= TJSONArray.Create;
  s:= '{"status": "OK","Language":{"DefaultLanguage": 1,"options":[{"options":1},{"options":2}]}}';
  Try
     j := TJSONObject(paxfunc.ParseJSONValue(s));
     A := paxfunc.GetJSONArray(j,'Language.options');
     J := TJSONObject(A.Items[1]);
     ShowMessage(paxfunc.GetJSONNumber(j,'options'));
  Finally
    j.Free;
    A.Free;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
以上程序运行后获取到的值为2。
# 2.19. GetJSONString
function GetJSONString(const QJSONObject: TJSONValue; const QPath:String):String;
 说明: 获取JSON对象中指定键值的字符串。 返回值: String类型。
- GetJSONString 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
假设需要对以下JSON进行解析。
{
    "status": "OK",
    "Language":{
        "DefaultLanguage": 1
    }
}
 2
3
4
5
6
//PasScript
Var 
  J:TJSONObject;
  s: String;
begin
  J:=TJSONObject.Create;
  s:= '{"status": "OK","Language":{"DefaultLanguage": 1}}';
  Try
     j := TJSONObject(paxfunc.ParseJSONValue(s));
     ShowMessage(paxfunc.GetJSONString(j,'status'));
  Finally
    j.Free;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
以上程序运行后获取到的值为OK。
# 2.20. GetJSONNumber
function GetJSONNumber(const QJSONObject: TJSONValue; const QPath:String):String;
 说明: 获取JSON对象中指定的键值中的数值。 返回值: String类型。
- GetJSONNumber 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
- 示例
 
假设需要对以下JSON进行解析。
{
    "status": "OK",
    "Language":{
        "DefaultLanguage": 1
    }
}
 2
3
4
5
6
//PasScript
Var 
  J:TJSONObject;
  s: String;
begin
  J:=TJSONObject.Create;
  s:= '{"status": "OK","Language":{"DefaultLanguage": 1}}';
  Try
     j := TJSONObject(paxfunc.ParseJSONValue(s));
     j := paxfunc.GetJSONObject(j,'Language');
     ShowMessage(paxfunc.GetJSONNumber(j,'DefaultLanguage'));
     //上述两句程序也可改写为
     //ShowMessage(paxfunc.GetJSONNumber(j,'Language.DefaultLanguage'));
  Finally
    j.Free;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
以上程序运行后获取到的值为1。
# 2.21. GetJSONInteger
function GetJSONInteger(const QJSONObject: TJSONValue; const QPath:String):Integer;
 说明: 获取JSON对象中指定的键值中的整数数值,并以整数的形式返回。 返回值: Integer类型。
- GetJSONInteger 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
- 示例
 
假设需要对以下JSON进行解析。
{
    "status": "OK",
    "Language":{
        "DefaultLanguage": 1
    }
}
 2
3
4
5
6
//PasScript
Var 
  J:TJSONObject;
  s: String;
  i: Integer;
begin
  J:=TJSONObject.Create;
  s:= '{"status": "OK","Language":{"DefaultLanguage": 1}}';
  Try
     j := TJSONObject(paxfunc.ParseJSONValue(s));
     i := paxfunc.GetJSONInteger(j,'Language.DefaultLanguage');
     ShowMessage(IntToStr(i));
  Finally
    j.Free;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
以上程序运行后获取到的值为1。
# 2.22. GetJSONFloat
function GetJSONFloat(const QJSONObject: TJSONValue; const QPath:String):Double;
 说明: 获取JSON对象中指定的键值中的浮点数数值,并以浮点数的形式返回。 返回值: Double类型。
- GetJSONFloat 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
- 示例
 
假设需要对以下JSON进行解析。
{
    "status": "OK",
    "Language":{
        "DefaultLanguage": 1.1
    }
}
 2
3
4
5
6
//PasScript
Var 
  J:TJSONObject;
  s: String;
  i: Double;
begin
  J:=TJSONObject.Create;
  s:= '{"status": "OK","Language":{"DefaultLanguage": 1.1}}';
  Try
     j := TJSONObject(paxfunc.ParseJSONValue(s));
     i := paxfunc.GetJSONFloat(j,'Language.DefaultLanguage');
     ShowMessage(FloatToStr(i));
  Finally
    j.Free;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
以上程序运行后获取到的值为1.1。
# 2.23. GetJSONBool
function GetJSONBool(const QJSONObject: TJSONValue; const QPath:String):Boolean;
 说明: 获取JSON对象中指定的键值中的布尔数值,并以布尔值的形式返回。 返回值: Boolean类型。
- GetJSONBool 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
假设需要对以下JSON进行解析。
{
    "status": true,
    "Language":{
        "DefaultLanguage": 1
    }
}
 2
3
4
5
6
//PasScript
Var 
  J:TJSONObject;
  s: String;
begin
  J:=TJSONObject.Create;
  s:= '{"status": true,"Language":{"DefaultLanguage": 1}}';
  Try
     j := TJSONObject(paxfunc.ParseJSONValue(s));
     if (paxfunc.GetJSONBool(j,'status')) then
       ShowMessage('{"status": true}');
  Finally
    j.Free;
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
  以上程序运行后获取到的值为{"status": true}。
# 2.24. GetJSONValue
function GetJSONValue(const QJSONObject: TJSONValue; const QPath:String):TJSONValue;
 说明: 获取JSON对象中指定的键值中的值。 返回值: TJSONValue类型。
- GetJSONBool 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
# 2.25. JSONArray_AddJSONObject
function JSONArray_AddJSONObject(QJSONArray:TJSONArray;const QJSONObject: TJSONValue):TJSONArray;
 说明: 在原有的JSON队列中添加一个新的JSON对象 返回值: TJSONArray类型。
- GetJSONBool 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONArray | 要进行获取对象操作的JSON队列名称 | 
| QJSONObject | 要添加的JSON对象名称 | 
假设有以下的队列:
[{"status":"ok"}]
 需要向其中添加以下的json对象:
{"status":"no"}
 Var 
  J:TJSONValue;
  A:TJSONArray;
  s1,s2: String;
begin
  s1:= '[{"status":"ok"}]';
  s2:= '{"status":"no"}';
  A := TJSONArray(paxfunc.ParseJSONValue(s1));
  J := paxfunc.ParseJSONValue(s2);
  A := paxfunc.JSONArray_AddJSONObject(A,J);
  ShowMessage(A.ToString);
end;
 2
3
4
5
6
7
8
9
10
11
12
  执行以上程序,输出的结果为 [{"status","ok"},{"status":"no"}]
# 2.26. JSONObject_AddJSONArray
function JSONObject_AddJSONArray(QJSONObject: TJSONObject; const Str: string; const Val: TJSONValue):TJSONObject;
 说明: 在原有的JSON对象中添加一个新的JSON值以获取一个新的JSON对象 返回值: TJSONObject类型。
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要获取的JSON对象名称 | 
| Str | 要添加的键名 | 
| Val | 要添加的键值 | 
假设有以下的json对象:
{"status":"ok"}
 需要合并以下的json队列作为子对象
[{"status":"no"}]
 Var 
  J1:TJSONValue;
  J2:TJSONValue;
  A: TJSONValue;
  s1,s2: String;
begin
  s1:= '{"status":"ok"}';
  s2:= '[{"status":"no"}]';
  J1 := paxfunc.ParseJSONValue(s1);
  A := paxfunc.ParseJSONValue(s2);
  J2 := paxfunc.JSONObject_AddJSONArray(TJSONObject(J1),'array',A);
  ShowMessage(j2.ToString);
end;
 2
3
4
5
6
7
8
9
10
11
12
13
  执行以上程序,输出的结果为 [{"status","ok"},"array":[{"status":"no"}]}
# 2.27. JSONParse
function JSONParse(QType, QPath, QJson: string): string;
 说明: 解析JSON,获取JSON中的单元的取值。 返回值: string类型。
| 部分 | 说明 | 
|---|---|
| QType | 要获取的JSON对象类型 GetJSONObject,GetJSONArray,GetJSONNumber、GetJSONObject、GetJSONValue、GetJSONBool、GetJSONPair | 
| QPath | 获取的JSON对象的路径名称 | 
| QJSON | 要解析的JSON对象文本 | 
- 示例
 
```JSON
{
    "status": true,
    "Language":{
        "DefaultLanguage": 1
    }
}
 2
3
4
5
6
7
//PasScript
Var 
  s: String;
begin
  s:= '{"status": "OK","Language":{"DefaultLanguage": 1}}';
  ShowMessage(paxfunc.JSONParse('GetJSONString','status',s));
end;
 2
3
4
5
6
7
# 2.28. ParseJSONValue
function ParseJSONValue(QJson: string): TJSONValue;
 说明: 获取字符串形式的JSON对象中指定的键值中的值。 返回值: TJSONValue类型。
- GetJSONBool 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJSONObject | 要进行获取对象操作的JSON对象名称 | 
| QPath | 对象在JSON中的路径名称,路径的名称之间以"."作为分隔标志 | 
# 2.29. InputNumber
function InputNumber(AField: TField; ACantion: string = ''): Boolean;
 说明: 显示数字输入小键盘 返回值: 布尔Boolean类型
- InputNumber函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AField | 指定数据集字段,数值型的字段 | 
| ACantion | 小键盘标签 | 
- 示例
 
Begin
   PaxFunc.InputNumber(FThis.RFDataSet1.FieldByName('FInterID'),'请输入一个数字');
End;
 2
3
- 运行结果:

 
# 2.30. InputNumberR
function InputNumberR(var vStr: string; ACantion: string = ''): Boolean;
 说明: 显示字符型变量输入小键盘 返回值: 布尔Boolean类型
- 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| vStr | 一个字符型变量 | 
| ACantion | 小键盘标签 | 
- 示例
 
Var
 vStr:String;
Begin
   //带变量
   vStr := '1234';
   PaxFunc.InputNumberR(vStr,'请输入字符串');
End;
 2
3
4
5
6
7
- 运行结果:

 
# 2.31. InputNumberStr
function InputNumberStr(AField: TField; ACantion: string = ''): Boolean;
 说明: 显示用于数据库字符串输入的小键盘 返回值: 布尔Boolean类型
- InputNumberStr函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AField | 指定数据集字段,字段需要是字符型的 | 
| ACantion | 小键盘标签 | 
- 示例
 
Begin 
   //字符型字段
   PaxFunc.InputNumberStr (FThis.dts0.FieldByName('FItemCode'),'请输入字符串');
End;
 2
3
4
- 运行结果:

 
# 2.32. MACToStr
function MACToStr(ByteArr: PByte; Len: Integer): String;
 说明: MAC地址转字符串 返回值: 字符Srting类型
- MACToStr函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ByteArr | MAC地址 | 
| Len | 长度 | 
# 2.33. NetHttpDelete
function NetHttpDelete(const Qurl: string; const QSource:string = ''): string;
 说明 获取Http请求(Delete方法)。 返回值 字符string类型
- NetHttpDelete函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Qurl | Http URL内容 | 
| QSource | Http请求体的内容 | 
# 2.34. NetHttpGet
function NetHttpGet(Qurl: string; QSource: string = ''): string;
 说明: 获取Http请求 返回值: 字符string类型
- NetHttpGet函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Qurl | Http URL内容 | 
| QSource | Http请求体的内容 | 
- 示例
 
var
  vValue:string;
begin
  //获取一个64位唯一ID
  vValue := PaxFunc.NetHttpGet('http://192.168.1.100:8809/system/newid','');
  Showmessage(vValue) ;
end;
 2
3
4
5
6
7
- 运行结果:
 
# 2.35. NetHttpPut
function NetHttpPut(const Qurl: string; const QSource: string = ''; const QResponseContent: string = ''; const QContentType: string = ''; const QHeaders:TStringList = nil): string;
 说明: 提交Http请求 返回值: 字符string类型
- NetHttpPut函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Qurl | Http 内容 | 
| QSource | 请求体内容 | 
| QResponseContent | 响应的内容的格式类型 | 
| QContentType | Http请求的内容类型 4种 application/json,application/xml, multipart/form-data,application/x-www-form-urlencoded | 
| QHeaders | Http请求头 | 
# 2.36. NetHttpPost
function NetHttpPost(const Qurl: string; const QSource: string = ''; const QResponseContent: string = ''; const QContentType: string = ''; const QHeaders:TStringList = nil): string;
 说明: 提交Http请求 返回值: 字符string类型
- NetHttpPost函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Qurl | Http 内容 | 
| QSource | 请求体内容 | 
| QResponseContent | 响应的内容的格式类型 | 
| QContentType | Http请求的内容类型 4种 application/json,application/xml, multipart/form-data,application/x-www-form-urlencoded | 
| QHeaders | Http请求头 | 
- 示例
 
var
JsonObject:TJSONObject;
vJson:String;
begin
  //通过Http请求,提交数据,JSon格式
  JsonObject := TJSONObject.Create
    .AddPair('customerName', 'XX科技有限公司')
    .AddPair('documentDate', '2019-07-30 00:00:00')
    .AddPair('documentNo', 'WUR20190730001')
    .AddPair('makerPeople', '小王')
    .AddPair('makerDate', '2019-07-30 23:01:01')
    .AddPair('materialCode', '01001')
    .AddPair('materialName', '牛津布')
    .AddPair('piece', '12')
    .AddPair('quantity','122' )
    .AddPair('remark', '备注1')
    .AddPair('status', '审核')
    .AddPair('specification', '180D')
    .AddPair('makerPeople', '小王')
    .AddPair('storehouse', 'A-12')
    .AddPair('unit', '米')
.AddPair('warehouse', '白坯仓库');   
vJson:= '['+JsonObject.ToString+']';
PaxFunc.NetHttpPost('http://127.0.1.1/printing/tofoProdUse/add',vJson ,
'application/json','application/json',nil);
End;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 2.37. NextMonth
Function NextMonth(ADateTime: Variant): string;
 说明: 获取指定日期下一个月第一天 返回值: 字符string类型
- NextMonth函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADateTime | 指定的一个变体类型 | 
- 示例
 
Var
vNextMonth:String;
Begin
   vNextMonth:= PaxFunc.NextMonth ('2019-07-10');
end;
 2
3
4
5
- 运行结果: 2019-08-01
 
# 2.38. OpenForm
function OpenForm(QFormName: string) :TBaseForm;
 说明: 打开Smart项目中的窗体 返回值: TBaseForm窗体类型
- OpenForm函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QFormName | 窗体Name名称 | 
- 示例
 
begin
  paxfunc.OpenForm('Frm002');
end;
 2
3
# 2.39. ParseJSONObject
function ParseJSONObject(QJsonStr:string):TJsonObject;
 说明: 解析Json对象 返回值: TJsonObject对象类型
- ParseJSONObject函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QJsonStr | Json格式字符串 | 
- 示例
 
var
  v:string;
  JSONObject: TJSONObject;
  LItem: TJSONValue;
  LJPair: TJSONPair;
  LJSONArray: TJSONArray;
  StrJson: string;
  result: string;
  i: Integer;
begin
  FThis.Memo1.Lines.Add(paxfunc.urlDecode(APAYLOAD));
   
  StrJson := paxfunc.urlDecode(APAYLOAD); //假定是上面那个json
  JSONObject := paxfunc.ParseJSONObject(StrJson);
  LJSONArray := JSONObject.GetValue('data') as TJSONArray;
  FTHis.cbb_PrinterS.Items.Clear;
  
  for i := 0 to LJSONArray.size - 1 do 
  begin
    LItem := (LJSONArray.Get(i) as TJSONObject).GetValue('name'); //得到LJSONArray的值 
    FTHis.cbb_PrinterS.Items.Add(LItem.Value);
  end; 
  FTHis.cbb_PrinterS.ItemIndex := 0;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 2.40. RoundToCH
function RoundToCH(const AValue: Double; const ADigit: Integer): Double;
 说明: 四舍五入函数 返回值: 双精度Double类型
- 函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AValue | 指定一个Double类型的数值 | 
| ADigit | 指定一个小数点保留位数 | 
- 示例
 
Var
 vValue: Double;
Begin
   vValue:= PaxFunc.RoundToCH (12.357,2);
end;
 2
3
4
5
- 运行结果: 12.36
 
# 2.41. SendArticleMessage
function SendArticleMessage(const AccountName, AOpenID: string; AContent: String): Boolean;
 说明: 发送图文信息 返回值: 布尔Boolean类型
- SendArticleMessage函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AccountName | 微信公众号 | 
| AOpenID | 微信用户AOpenID,OpenID为微信用户唯一标识ID | 
| AContent | 微信消息内容 | 
- 示例
 
var
  j: TJSONObject;
  WechatArticle:TWechatArticle;
  i:integer;
begin
  //组装JSON
  j := TJSONObject.Create;
  j.Addpair('title', '爱招飞是什么?');
  j.AddPair('description', '爱招飞是信息化与物联网整合专家。');
  j.AddPair('URL', 'https://www.isoface.cn');
  j.AddPair('picurl', 'http://ppic.meituba.com/uploads/allimg/2019/04/15/92_9257.jpg');
//发送模板消息 
  if paxfunc.SendArticleMessage('测试号','oTpfe0VB-9vClZ4uSpTD05XbBNyI',j.ToJson) Then
      showmessage('发送成功!');
  j.free;
End;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2.42. SendCustomMessage
function SendCustomMessage(const AccountName, AOpenID, AContent: string): Boolean;
 说明: 发送文本消息 返回值: 布尔Boolean类型
- SendCustomMessage函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AccountName | 微信公众号 | 
| AOpenID | 微信用户AOpenID,OpenID为微信用户唯一标识ID | 
| AContent | 微信消息内容 | 
- 示例
 
Begin
   if paxfunc.SendCustomMessage ('测试号','oTpfe0VB-9vClZ4uSpTD05XbBNyI','这是由Smart发出的一条消息!')  Then
     showmessage('发送成功!');
End;
 2
3
4
# 2.43. SendEmail
function SendEmail(AParam, AAttFile: TStringList): Boolean;
 说明: 发送邮件 返回值: 布尔Boolean类型
- SendEmail函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AParam | 邮件的参数,详见示例 | 
| AAttFile | 附件的地址,详见示例 | 
- 示例
 
procedure TMyHandler.Button2Click;
//使用函数的方式发送
var
  Param: TStringlist;
  AttFile: TStringlist;
begin
  if demo then exit;
  Param := TStringlist.Create;
  AttFile := TStringlist.Create;
  Try
      Param.Values['Host'] := FThis.Edit7.Text;
      Param.Values['Port'] := FThis.Edit8.Text;
      Param.Values['Username'] := FThis.Edit5.Text;
      Param.Values['Password'] := FThis.Edit6.Text;
      Param.Values['Address'] := FThis.Edit1.Text;
      Param.Values['Body'] := FThis.Memo1.Lines.text;
      Param.Values['Subject'] := FThis.Edit3.Text;
      Param.Values['CCAddressList'] := FThis.Edit2.Text;
      Param.Values['Receipt'] := '1';
      if FThis.CheckBox1.Checked then
        Param.Values['Bodyhtml'] := '1'
      else
        Param.Values['Bodyhtml'] := '0';
      AttFile.Add(FThis.Edit4.Text);
      if paxfunc.SendEmail(Param, AttFile) then
        ShowMessage(FThis.siLang1.GetTextW('success'))
      else
        ShowMessage(FThis.siLang1.GetTextW('failed'));
  Finally
    FreeAndNil(Param);
    FreeAndNil(AttFile);
  End;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 2.44. SendTemplateMessage
function SendTemplateMessage(const AccountName,  AJsonContent: string): Boolean;
 说明: 发送模板消息 返回值: 布尔Boolean类型
- SendTemplateMessage函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AccountName | 微信公众号 | 
| AJsonContent | Json格式化字符串 | 
- 示例
 
var
 JsonObject:TJSONObject;
Begin
  //组装JSON
  JsonObject := TJSONObject.Create
    .AddPair('touser', 'oTpfe0VB-9vClZ4uSpTD05XbBNyI')
    .AddPair('template_id', 'vX0v1WgEMjUwRhv8EsdeD1diwXm1CRZ5v5bty7hHHMs')
    .AddPair('url', 'www.isoface.cn')
    .AddPair('topcolor', '#FF0000')
    .AddPair('data', TJSONObject.Create
      .AddPair('Caption', TJSONObject.Create
        .AddPair('value', '这是由Smart发出的一条消息!')
        .AddPair('color', '#173177')
      )
);  
//发送模板消息 
   paxfunc.SendTemplateMessage('测试号', JsonObject.ToJson);
   JsonObject.free;
End;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 2.45. SendWechatMsg
function SendWechatMsg(const AccountName, AOpenID, ATemplateID, AContent: string): Boolean;
 说明: 发送模板消息 返回值: 布尔Boolean类型
- SendWechatMsg函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AccountName | 微信公众号 | 
| AOpenID | 微信用户AOpenID,OpenID为微信用户唯一标识ID | 
| ATemplateID | 微信消息模板ID | 
| AContent | 微信消息内容 | 
- 示例
 
Begin
   if paxfunc.SendWechatMsg('测试号','oTpfe0VB-9vClZ4uSpTD05XbBNyI',
'vX0v1WgEMjUwRhv8EsdeD1diwXm1CRZ5v5bty7hHHMs','这是由PInToo发出的一条消息!')  Then
     showmessage('发送成功!');
End;
 2
3
4
5
# 2.46. ShowHandWrite
function ShowHandWrite(QData:string): string;
 说明: 显示字符串手写板 返回值: 布尔Boolean类型
- ShowHandWrite函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QData | 一个默认的字符串,可以是原文本 | 
- 示例
 
Var
  vStr:String;
Begin
   //显示手写板功能
   vStr := PaxFunc.ShowHandWrite ('');
End;
 2
3
4
5
6
- 运行效果:

 
# 2.47. StreamToBase64
function  StreamToBase64(AStream:TStream):String;
 说明: 流转base64 返回值: String字符串类型
- StreamToBase64函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AStream | 流对象 | 
- 示例
 
var
 aBase64String:string;
 AStream:TMemoryStream;
begin
  //将图片转换成Base64
  AStream:=TMemoryStream.Create;
  AStream.Position := 0;
  FThis.image1.Picture.SaveToStream(AStream);
  aBase64String := paxfunc.StreamToBase64(AStream);
  AStream.Free;
 end;
 2
3
4
5
6
7
8
9
10
11
# 2.48. UrlDecode
function UrlDecode(const Qurl: string): string;
 说明: Url解码 返回值: Word类型
- UrlDecode函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Qurl | 需要编码的内容 | 
- 示例
 
var
  v:string;
begin
  v:=paxfunc.NetHttpPost('http://192.168.1.100:8808/getprinterlist','','application/xml');
  FThis.Memo1.Lines.Add(paxfunc.urlDecode(v));
end;
 2
3
4
5
6
# 2.49. UrlEncode
function UrlEncode(const Qurl: string): String;
 说明: Url编码 返回值: String字符类型
- UrlEncode函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| Qurl | 需要编码的内容 | 
- 示例
 
  //*可选。邮件主题*/     
  vList.Values['EMailSubject'] := paxfunc.URLEncode('客户基本信息清单'); 
 2
# 2.50. YesNoMsg
function YesNoMsg(aMsg: string; aTitle: string = ''): Boolean;
 说明: 是否选择对话框 返回值: 布尔Boolean类型
- YesNoMsg函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| aMsg | 对话框消息内容 | 
| aTitle | 对话框标题 | 
- 示例
 
Begin
If PaxFunc.YesNoMsg ('确认删除吗?', '提示') then
Begin
	Showmessage('OK')
End;
end;
 2
3
4
5
6
- 运行结果:
 
# 2.51. ToJSONObjectString
function ToJSONObjectString(ADataSet:TDataSet;const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): string;
 说明:将数据集中当前选择的的数据行转换为JSON对象的数据集。输出的格式为字段名称与字段值组成的键值对。 返回值: string类型。
{"code":"Code1","name":1}
 - ToJSONObjectString函数中语法各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADataSet | 要转换的数据集控件名称 | 
| AOnlyUpdatedRecords | 设置是否只存储更新的记录 | 
| AChildRecords | 设置是否包含子记录 | 
| AValueRecords | 是否包含数值记录 | 
| AEncodeBase64Blob | 是否使用Base64编码二进制数据 | 
# 2.52. ToJSONArrayString
function ToJSONArrayString(ADataSet:TDataSet;const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): string;
 说明: 将数据集中的数据转换为JSONArray。是由JSON对象组成的队列。 返回值: string类型。
[{"code":"Code1","name":1},{"code":"Code2","name":2}]
 - ToJSONArrayString函数中语法各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADataSet | 要转换的数据集控件名称 | 
| AOnlyUpdatedRecords | 设置是否只存储更新的记录 | 
| AChildRecords | 设置是否包含子记录 | 
| AValueRecords | 是否包含数值记录 | 
| AEncodeBase64Blob | 是否使用Base64编码二进制数据 | 
# 2.53. ToJSONObject
function ToJSONObject(ADataSet:TDataSet;const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): TJSONObject;
 说明: 将数据集中当前指向的数据行转换为JSON对象类型。 返回值: TJSONObject类型。
- ToJSONObject函数中语法各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADataSet | 要转换的数据集控件名称 | 
| AOnlyUpdatedRecords | 设置是否只存储更新的记录 | 
| AChildRecords | 设置是否包含子记录 | 
| AValueRecords | 是否包含数值记录 | 
| AEncodeBase64Blob | 是否使用Base64编码二进制数据 | 
# 2.54. ToJSONArray
function ToJSONArray(ADataSet:TDataSet;const AOnlyUpdatedRecords: Boolean = False; const AChildRecords: Boolean = True; const AValueRecords: Boolean = True; const AEncodeBase64Blob: Boolean = True): TJSONArray;
 说明: 将数据集中的数据转换为JSON对象序列类型。 返回值: TJSONArray类型。
- ToJSONObject函数中语法各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADataSet | 要转换的数据集控件名称 | 
| AOnlyUpdatedRecords | 设置是否只存储更新的记录 | 
| AChildRecords | 设置是否包含子记录 | 
| AValueRecords | 是否包含数值记录 | 
| AEncodeBase64Blob | 是否使用Base64编码二进制数据 | 
# 2.55. SaveStructure
function SaveStructure(ADataSet:TDataSet): TJSONArray;
 说明: 获取当前的数据集的结构信息,以JSONArray的方式输出,包括数据表的字段名称、数据类型、大小等信息。 返回值: TJSONArray类型。
| 部分 | 说明 | 
|---|---|
| ADataSet | 要转换的数据集控件名称 | 
# 2.56. ValidateJSONObject
function ValidateJSONObject(ADataSet:TDataSet;const AJSONObject: TJSONObject; const ALang: TLanguageType = enUS; const AOwns: Boolean = True): TJSONArray;
 说明: 用于验证JSON对象组件是否有效。 返回值:TJSONArray类型
- ValidateJSONObject程序语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADataSet | 要转换的数据集控件名称 | 
| AJSONObject | 要验证的JSON对象 | 
| ALang | 语言类型 | 
| AOwns | 设置是否占用 | 
# 2.57. ValidateJSONString
function ValidateJSONString(ADataSet:TDataSet;const AJSONString: string; const ALang: TLanguageType = enUS): TJSONArray;
 说明: 用于验证JSON对象字符串是否有效。 返回值:TJSONString类型
- ValidateJSONString程序语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ADataSet | 要转换的数据集控件名称 | 
| AJSONString | 要验证的JSON字符串 | 
| ALang | 语言类型 | 
# 3. IOT类函数
  该章节中的函数需以Iot.开头。
# 3.1. BTACreateServerSocket
function BTACreateServerSocket(ABluetoothAdapter: TBluetoothAdapter; AServerName, AUUID: string; ASecure: Boolean = false): TBluetoothServerSocket;
 说明: 创建服务端套接字 返回值: TBluetoothServerSocket类型
- BTACreateServerSocket函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothAdapter | 蓝牙适配器 | 
| AServerName | 蓝牙服务名称 | 
| AUUID | 蓝牙服务UUID | 
| ASecure | True=可靠的 | 
- 示例
 
 # 3.2. BTDCreateClientSocket
function BTDCreateClientSocket(ABluetoothDevice: TBluetoothDevice; AUUID: string; ASecure: Boolean = false): TBluetoothSocket;
 说明: 创建客户端套接字 返回值: TBluetoothSocket类型
- BTDCreateClientSocket函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothDevice | 蓝牙设备 | 
| AUUID | 蓝牙服务UUID | 
| ASecure | 蓝牙服务UUID | 
- 示例
 
var
  LDevice: TBluetoothDevice;
begin
  if (FSocket = nil) or (ItemIndex <> FThis.ComboboxPaired.ItemIndex) then
  begin
    if FThis.ComboboxPaired.ItemIndex > -1 then
    begin
      // 创建客户端套接字
      LDevice := IOT.GetBluetoothDevice(FPairedDevices,FThis.ComboboxPaired.ItemIndex) as TBluetoothDevice;
      FSocket :=  IOT.BTDCreateClientSocket(LDevice,ServiceGUI,false);
      if FSocket <> nil then
      begin
        ItemIndex := FThis.ComboboxPaired.ItemIndex;
        FSocket.Connect;
        IOT.BTSKSendData(FSocket,FThis.ASendData.Text);
        FThis.DisplayR.Lines.Add('发送数据:'+FThis.ASendData.Text);
      end
      else
        ShowMessage('Out of time -15s-');
    end
    else
      ShowMessage('No paired device selected');
  end
  else
  begin
    IOT.BTSKSendData(FSocket,FThis.ASendData.Text);
    FThis.DisplayR.Lines.Add('发送数据:'+FThis.ASendData.Text);
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 3.3. BTMConnectionState
function BTMConnectionState(ABluetoothManager: TBluetoothManager): Boolean;
 说明: 判断蓝牙状态 返回值: Boolean类型
- BTMConnectionState函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothManager | 当前蓝牙管理器 | 
- 示例
 
  if IOT.BTMConnectionState(FBluetoothManager) then
  begin
    Labeldiscoverable.Text := 'Device discoverable as "'+FBluetoothManager.CurrentAdapter.AdapterName+'"';
    Result := True;
  end
  else
  begin
    Result := False;
    DisplayR.Lines.Add('No Bluetooth device Found');
    DisplayR.GoToTextEnd;
  end;
 2
3
4
5
6
7
8
9
10
11
# 3.4. BTMCurrent
function BTMCurrent: TBluetoothManager;
 说明: 获取当前蓝牙管理器 返回值: TBluetoothManager类型
- 示例
 
FBluetoothManager := IOT.BTMCurrent;
 # 3.5. BTSKSendData
procedure BTSKSendData(ABluetoothSocket: TBluetoothSocket; ASendText: string);
 说明: 发送信息 *BTSKSendData函数语法中各部分说明
| 部分 | 说明 | 
|---|---|
| ABluetoothSocket | 客户端套接字 | 
| ASendText | 发送的内容 | 
- 示例
 
var
  LDevice: TBluetoothDevice;
begin
  if (FSocket = nil) or (ItemIndex <> FThis.ComboboxPaired.ItemIndex) then
  begin
    if FThis.ComboboxPaired.ItemIndex > -1 then
    begin
      LDevice := IOT.GetBluetoothDevice(FPairedDevices,FThis.ComboboxPaired.ItemIndex) as TBluetoothDevice;
      FSocket :=  IOT.BTDCreateClientSocket(LDevice,ServiceGUI,false);
      if FSocket <> nil then
      begin
        ItemIndex := FThis.ComboboxPaired.ItemIndex;
         //客户端套接字连接
        FSocket.Connect;
         //发送数据
        IOT.BTSKSendData(FSocket,FThis.ASendData.Text);
        FThis.DisplayR.Lines.Add('发送数据:'+FThis.ASendData.Text);
      end
      else
        ShowMessage('Out of time -15s-');
    end
    else
      ShowMessage('No paired device selected');
  end
  else
  begin
   //发送数据
    IOT.BTSKSendData(FSocket,FThis.ASendData.Text);
    FThis.DisplayR.Lines.Add('发送数据:'+FThis.ASendData.Text);
  end;
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 3.6. BTSKReadData
function BTSKReadData(ABluetoothSocket: TBluetoothSocket): string;
 说明: 读取蓝牙套接字返回的内容 返回值: Word类型
- BTSKReadData函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothSocket | 客户端套接字 | 
- 示例
 
var
 FData:String;
begin
  //发送数据
  SendData;
  //读取数据
  FData := IOT.BTSKReadData(FSocket);
  FData := Trim(FData);
  if FData <> '' Then
  begin
    if length(FData)=10 Then
    begin
      FThis.DisplayR.Lines.Add('湿度:'+Copy(FData,1,5)+' %, 温度:'+Copy(FData,6,4)+' ℃');
    End
    else
    begin
      FThis.DisplayR.Lines.Add('返回数据:'+FData);  
    End;
  end
  else
  begin
    FThis.DisplayR.Lines.Add('返回数据:无数据!');   
  end        
End;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 3.7. BTSKReceiveData
function BTSKReceiveData(ABluetoothSocket: TBluetoothSocket): string;
 说明: 接收信息 返回值: string类型
- BTSKReceiveData函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothSocket | 客户端套接字 | 
- 示例
 
var
 FData:String;
begin
  //发送数据
  SendData;
  //读取数据
  FData := IOT.BTSKReceiveData(FSocket);
  FData := Trim(FData);
  if FData <> '' Then
  begin
    if length(FData)=10 Then
    begin
      FThis.DisplayR.Lines.Add('湿度:'+Copy(FData,1,5)+' %, 温度:'+Copy(FData,6,4)+' ℃');
    End
    else
    begin
      FThis.DisplayR.Lines.Add('返回数据:'+FData);  
    End;
  end
  else
  begin
    FThis.DisplayR.Lines.Add('返回数据:无数据!');   
  end        
End;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 3.8. BTSLGetServicesCount
function BTSLGetServicesCount(ABluetoothServiceList: TBluetoothServiceList): Integer;
 说明: 统计蓝牙服务个数 **返回值:**Integer类型
- BTSLGetServicesCount函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothServiceList | 蓝牙服务端列表 | 
- 示例
 
var
  LServices: TBluetoothServiceList;
  LDevice: TBluetoothDevice;
  I: Integer;
begin
  FThis.ComboBoxServices.Clear;
  if ManagerConnected then
    if FThis.ComboboxPaired.ItemIndex > -1 then
    begin
      //获取蓝牙设备
      LDevice := FPairedDevices[FThis.ComboboxPaired.ItemIndex] as TBluetoothDevice;
      //获取蓝牙设备服务
      LServices := LDevice.GetServices;
      //遍历蓝牙服务列表
      for I := 0 to IOT.BTSLGetServicesCount(LServices) - 1 do
      begin
        FThis.ComboBoxServices.Items.Add(IOT.BTSLGetServicesName(LServices,I) + '-->' + IOT.BTSLGetServicesUUID(LServices,I));
      End;
      FThis.ComboBoxServices.ItemIndex := 0;
    end
    else
      ShowMessage('No paired device selected');
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 3.9. BTSLServicesName
function BTSLServicesName(ABluetoothServiceList: TBluetoothServiceList; AIndex: Integer): string;
 说明: 获取蓝牙服务名称 返回值: string字符类型
- BTSLServicesName函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothDeviceList | 配对蓝牙列表 | 
| AIndex | 蓝牙索引号 | 
- 示例
 
var
  LServices: TBluetoothServiceList;
  LDevice: TBluetoothDevice;
  I: Integer;
begin
  FThis.ComboBoxServices.Items.Clear;
  if ManagerConnected then
    if FThis.ComboboxPaired.ItemIndex > -1 then
    begin
      LDevice := IOT.GetBluetoothDevice(FPairedDevices,FThis.ComboboxPaired.ItemIndex) as TBluetoothDevice;
      LServices := LDevice.GetServices;
      
      for I := 0 to LServices.Count - 1 do
      begin
        FThis.ComboBoxServices.Items.Add(IOT.BTSLServicesName(LServices,I) + '-->' + IOT.BTSLServicesUUID(LServices,I));
      End;
      
      if LServices.Count > 0 then
         FThis.ComboBoxServices.ItemIndex := 0;
    end
    else
      ShowMessage('No paired device selected');
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 3.10. BTSLServicesUUID
function BTSLServicesUUID(ABluetoothServiceList: TBluetoothServiceList; AIndex: Integer): string;
 说明: 获取蓝牙服务UUID 返回值: string字符类型
- BTSLServicesUUID函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothDeviceList | 配对蓝牙列表 | 
| AIndex | 蓝牙索引号 | 
- 示例
 
var
  LServices: TBluetoothServiceList;
  LDevice: TBluetoothDevice;
  I: Integer;
begin
  FThis.ComboBoxServices.Items.Clear;
  if ManagerConnected then
    if FThis.ComboboxPaired.ItemIndex > -1 then
    begin
      LDevice := IOT.GetBluetoothDevice(FPairedDevices,FThis.ComboboxPaired.ItemIndex) as TBluetoothDevice;
      LServices := LDevice.GetServices;
      
      for I := 0 to LServices.Count - 1 do
      begin
        FThis.ComboBoxServices.Items.Add(IOT.BTSLServicesName(LServices,I) + '-->' + IOT.BTSLServicesUUID(LServices,I));
      End;
      
      if LServices.Count > 0 then
         FThis.ComboBoxServices.ItemIndex := 0;
    end
    else
      ShowMessage('No paired device selected');
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 3.11. BTSSAccept
function BTSSAccept(ABluetoothServerSocket: TBluetoothServerSocket): TBluetoothSocket;
 说明: 接收一个蓝牙套接字 **返回值:**TBluetoothSocket类型 *BTSSAccept函数语法中各部分说明
| 部分 | 说明 | 
|---|---|
| ABluetoothServerSocket | 服务端套接字 | 
- 示例
 
var
 ASocket:TBluetoothSocket;
begin
  ASocket := nil;
  ASocket := IOT.BTSSAccept(FServerSocket);
 end;
 2
3
4
5
6
# 3.12. ComReadAnsiString
function ComReadAnsiString(AComPort:TComPort): AnsiString;
 说明: 读取串口返回的字符串 返回值: AnsiString字符串类型
- ComReadAnsiString函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AComPort | 需要操作的串口通讯控件对象 | 
# 3.13. ComReadString
function ComReadString(AComPort:TComPort): String;
 说明: 读取串口返回的字符串 返回值: String字符串类型
- ComReadString函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AComPort | 需要操作的串口通讯控件对象 | 
# 3.14. GetBluetoothDevice
function GetBluetoothDevice(ABluetoothDeviceList: TBluetoothDeviceList; AIndex: Integer): TBluetoothDevice;
 说明: 获取已配对蓝牙 返回值: TBluetoothDevice类型
- GetBluetoothDevice函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| ABluetoothDeviceList | 配对蓝牙列表 | 
| AIndex | 蓝牙索引号 | 
- 示例
 
var
  I: Integer;
begin
  FThis.ComboboxPaired.Items.Clear;
  FPairedDevices := FBluetoothManager.GetPairedDevices;
  if FPairedDevices.Count > 0 then
  begin
    for I:= 0 to FPairedDevices.Count - 1 do
    begin
      FBluetoothDevice := IOT.GetBluetoothDevice(FPairedDevices,I);
      FThis.ComboboxPaired.Items.Add(FBluetoothDevice.DeviceName);
    end;
  end
  else
    FThis.ComboboxPaired.Items.Add('No Paired Devices');
end;
 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 3.15. IdTCPClientSendCmd
function IdTCPClientSendCmd(AIdTCPClient: TIdTCPClient; QAOut: string): Int16;
 说明: 发送TCP命令 返回值: Int16类型
- IdTCPClientSendCmd函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| AIdTCPClient | 需要操作的IdTCPClient对象 | 
| QAOut | 发送的内容 | 
- 示例
 
//发送TCP命令
IOT.IdTCPClientSendCmd(FThis.IdTCPClient1,'1');
 2
# 3.16. ModbusTCPReadCoils
function ModbusTCPReadCoils(const RegNo, Blocks: Word; Modbus: TIdModBusClient): string;
 说明: 读取输出数位讯号 返回值: String字符串类型
- ModbusTCPReadCoils函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| RegNo | 起始位址 | 
| Blocks | 数据长度 | 
| Modbus | 需要操作的ModbusTCP对象 | 
# 3.17. ModbusTCPReadHoldingRegisters
function ModbusTCPReadHoldingRegisters(const RegNo, Blocks: Word; Modbus: TIdModBusClient): string;
 说明: 读取输出类比讯号 返回值: String字符串类型
- ModbusTCPReadHoldingRegisters函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| RegNo | 起始位址 | 
| Blocks | 数据长度 | 
| Modbus | 需要操作的ModbusTCP对象 | 
# 3.18. ModbusTCPWriteCoils
function ModbusTCPWriteCoils(const RegNo, Blocks: Word; const RegisterData: string; Modbus: TIdModBusClient): boolean;
 说明: 写入数位(多个)讯号 返回值: boolean布尔类型
- ModbusTCPWriteCoils函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| RegNo | 起始位址 | 
| Blocks | 数据长度 | 
| RegisterData | 需要写入的内容 | 
| Modbus | 需要操作的ModbusTCP对象 | 
# 3.19. ModbusTCPWriteRegisters
function ModbusTCPWriteRegisters(const RegNo, Blocks: Word; const RegisterData: string; Modbus: TIdModBusClient): boolean;
 说明: 写入类比(多个)讯号 返回值: boolean布尔类型
- ModbusTCPWriteRegisters函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| RegNo | 起始位址 | 
| Blocks | 数据长度 | 
| RegisterData | 需要写入的内容 | 
| Modbus | 需要操作的ModbusTCP对象 | 
# 4. BaseFrom基类函数
基类程序在脚本中调用时,必须以FThis.开头。
# 4.1. GetData
function GetData(QIndex: Integer): TRFDataSet;
 说明: 获取基类数据集 返回值: 数据集TRFDataSet类型
- GetData函数语法中各部分说明
 
| 部分 | 说明 | 
|---|---|
| QIndex | 数据集索引 | 
- 示例
 
Var
 vData:TRFDataSet;
begin
  //获取基类DataSetList中第0号数据集
  vData :=FThis.GetData (0);
  vData.Open;
end;
 2
3
4
5
6
7