自定函式
# 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://isoface.net');
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', 'isoface.net')
.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