系统控件
# PinToo 控件使用(系统组件)
系统控件中包含了通讯连接使用的组件类型。
# 1. TfxBroadcastReceiver组件
- 引用单元 SystemClasses
广播接收器组件。 可以接收设备发出的广播信息。
# 1.1. 属性(Properties)
- TfxBroadcastReceiver组件主要属性
属性 | 功能说明 |
---|---|
BroadcastNodeName | 指定广播数据标签 |
BroadcastServiceName | 指定广播动作标识 |
ReciverIsActive | 指定是否激活全覆盖广播功能 |
# 1.1.1. BroadcastNodeName属性
广播数据标签
fxBroadcastReceiver1.BroadcastNodeName := 'barcode_string';
# 1.1.2. BroadcastServiceName属性
广播动作标识。
Android有许多广播标识,列举几个如下:
- 广播:屏幕被关闭 Android.intent.action.SCREEN_OFF
- 广播:屏幕已经被打开 Android.intent.action.SCREEN_ON
- 广播:PDA扫描头 android.intent.ACTION_DECODE_DATA
fxBroadcastReceiver1.BroadcastServiceName := 'android.intent.ACTION_DECODE_DATA';
# 1.1.3. ReciverIsActive属性
# 1.2. 事件(Events)
- TfxBroadcastReceiver组件主要事件
事件 | 何时触发 |
---|---|
OnReceiver | 当接收到指定的广播时触发 |
# 1.2.1. OnReceiver事件
接收到广播数据后反馈。
PDA扫描信息反馈
Procedure fxBroadcastReceiver1OnReceiver(AValue: string);
Begin
AddItem(AValue);//数据处理,AddItem是自定义的方法
End;
2
3
4
5
# 1.3. 方法(Methods)
- TfxBroadcastReceiver组件主要方法
方法 | 功能说明 |
---|---|
DoRegBroadcastReceiver | 注册广播接收器 |
# 1.3.1. DoRegBroadcastReceiver方法
此方法必需在窗体脚本运行后执行。
Procedure fxRunFrameAfterScriptRun(Sender: TObject);
Begin
//注册广播事件
fxBroadcastReceiver1.DoRegBroadcastReceiver;
End;
2
3
4
5
# 2. TfxBroadcastSender组件
- 引用单元 SystemClasses
广播发送组件。可自定义广播标识、广播数据标签和内容。
# 2.1. 方法(Methods)
- TfxBroadcastSender组件主要方法
方法 | 功能说明 |
---|---|
DoSendMsg | 发送广播消息 |
# 2.1.1. DoSendMsg方法
演示发出一个自定义广播。广播标识为PinToo_ACTION_Test,数据标签为BarCode,广播内容为123456789的广播。
fxBroadcastSender1.DoSendMsg('PinToo_ACTION_Test','BarCode','123456789');
# 3. TfxBluetooth组件
- 引用单元 ufxBluetooth
用作蓝牙通讯,实现蓝牙收发功能,可应用与蓝牙电子称、蓝牙打印、蓝牙聊天室等场景。
# 3.1. 方法(Methods)
- TfxBluetooth组件主要方法
方法 | 功能说明 |
---|---|
Init | 初始化蓝牙设备 |
DiscoverDevices | 发现蓝牙设备 |
PairedDevices | 已配置蓝牙设备 |
Services | 获取蓝牙服务 |
Pair | 配对蓝牙设备 |
UnPair | 取消蓝牙配对 |
CreateServerSocket | 创建服务通道 |
CloseServerSocket | 关闭服务通道 |
FreeClientSocket | 释放服务通道 |
SendData | 发送蓝牙信息 |
ReadData | 接收蓝牙信息 |
ManagerConnected | 获取蓝牙管理器状态 |
# 3.2. 事件(Events)
- TfxBluetooth 组件主要事件
事件 | 何时触发 |
---|---|
OnReceiveData | 当接收到信息时触发 |
# 3.2.1. OnReceiveData
接收到蓝牙通讯数据后反馈。
//信息反馈
Procedure Bluetooth1OnReceiverData(Sender: TObject;ServiceName,ServiceUUID,ReceiveData:string);
Begin
Showmessage(ReceiveData)
End;
2
3
4
5
# 4. TfxBluetoothLE组件
- 引用单元 SystemBluetoothComponents
用作Bluetooth Low Energy框架类的主要功能的包装器的组件,例如TBluetoothLEManager,TBluetoothGattServer,TBluetoothLEDevice或TBluetoothGattService。
该TfxBluetoothLE组件提供低功耗蓝牙等功能:
- 检查正在运行您的应用程序的平台是否支持运行低功耗蓝牙客户端,服务器或同时运行这两者,并读取SupportsGattClient和SupportsGattServer的值。
- 使用DiscoverDevices发现可访问的远程设备。
- 使用DiscoverServices发现服务,并使用GetService或GetServices读取服务。
- 使用ReadCharacteristic,GetCharacteristic或GetCharacteristics从远程设备读取特征。
- 使用SubscribeToCharacteristic订阅特征,以便当特征数据在提供特征的远程设备上更改时自动更新特征数据。
- 使用WriteCharacteristic在远程设备上写特征,或者使用BeginReliableWrite和ExecuteReliableWrite作为原子操作。
- 使用ReadDescriptor或GetDescriptors从远程设备读取描述符。
- 使用WriteDescriptor将描述符写入远程设备。
- 使用CreateService,CreateIncludedService,CreateCharacteristic,AddCharacteristic和UpdateCharacteristicValue提供服务和特征。
您还可以使用诸如CurrentAdapter,CurrentManager或GattServer之类的属性来访问Bluetooth Low Energy框架类的基础实例,以实现细粒度控制或高级功能。
# 5. TfxIdHTTPServer组件
- 引用单元 IdHTTPServer 一个基于INDY的HTTPServer组件。可以用它搭建HTTP服务器。
下面我们用IdHTTPServer来实现简单的WebService功能:
//激活HTTPServer服务
Procedure fxButton1OnClick(Sender: TObject);
begin
if not fxIdHTTPServer1.Active then
begin
try
fxIdHTTPServer1.Bindings.Clear;
fxIdHTTPServer1.DefaultPort := 8806;
fxIdHTTPServer1.Active := True;
fxMemo1.Lines.Insert(0, FormatDateTime('HH:NN:SS.ZZZ ', now) + 'HTTP打印服务 已启动。')
except
fxMemo1.Lines.Insert(0, FormatDateTime('HH:NN:SS.ZZZ ', now) + 'HTTP打印服务 启动失败。')
end;
end;
end;
//关闭HTTPServer服务
Procedure fxButton2OnClick(Sender: TObject);
Begin
fxIdHTTPServer1.Active := False;
fxIdHTTPServer1.Bindings.Clear;
fxMemo1.Lines.Insert(0, FormatDateTime('HH:NN:SS.ZZZ ', now) + 'HTTP打印服务 已停止。');
End;
//功能实现
Procedure fxIdHTTPServer1OnCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
ReportType:String;
APathInfo,SQL:string;
str:String;
begin
if ARequestInfo.Command='POST' then
begin
AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Origin:*');
AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Headers:*');
AResponseInfo.CustomHeaders.Add('Access-Control-Allow-Method:*');
APathInfo := ARequestInfo.Document;
if APathInfo = '/opensql' then
begin
SQL :=ARequestInfo.Params.Values['SQL'];
if SQL='' then
begin
str := ('{"status":"error","data":"SQL内容不能为空!"}');
fxMemo1.Lines.Insert(0, FormatDateTime('HH:NN:SS.ZZZ ', now) + 'SQL内容不能为空!');
AResponseInfo.ContentText := fxfun.URLEncode(str);
AResponseInfo.WriteContent;
Exit;
end;
fxRFDataSet1.OpenSQL(SQL);
fxMemo1.Lines.Insert(0, FormatDateTime('HH:NN:SS.ZZZ ', now) + '接收到的SQL内容:'+SQL);
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 6. TfxIdTCPClient组件
- 引用单元 IdTCPClient 该控件包装了一个完整的TCP客户端。
# 6.1. 属性(Properties)
- TfxIdTCPClient组件主要属性
属性 | 功能说明 |
---|---|
BoundIP | 指定客户端使用的IP地址 |
BoundPort | 指定当前连接的本地端口号 |
Host | 远程主机名 |
Port | 指定远程主机端口号 |
Socket | 连接时所用的socket |
# 6.1.1. BoundIP属性
property BoundIP: string;
客户端使用的IP地址。
# 6.1.2. BoundPort属性
property BoundPort: Integer;
当前连接的本地端口号。
# 6.1.3. Host属性
property Host: string;
远程主机名。可以是IP地址,也可以是域名。
# 6.1.4. Port属性
property Port: integer;
远程主机端口号。
# 6.1.5. Socket属性
property Socket: TIdIOHandlerSocket;
连接时所用的socket。
# 6.2. 方法(Methods)
- TfxIdTCPClient组件主要方法
方法 | 功能说明 |
---|---|
FastConnect | 打开客户端连接 |
Connected | 当前连接是否可用 |
Disconnect | 关闭连接 |
SendData | 向连接写入数据 |
# 6.2.1. FastConnect方法
procedure FastConnect;
打开客户端连接。
# 6.2.2. Connected方法
function Connected: Boolean; virtual;
判断当前连接是否可用 。
# 6.2.3. Disconnect方法
procedure Disconnect; virtual;
关闭连接。
# 6.2.4. SendData方法
procedure SendData(const AOut: string);
向连接写入数据。
fxIdTCPClientLED.sendData('1'); //发送 1 指令给NodeMCU,点亮LED
# 7. TfxTTS 组件
组件用于调用设备的TTS语音库播报语音。
# 7.1. 方法
# 7.1.1. SpeakOut
procedure SpeakOut(AText: String);
播放系统语音。
fxTTS1.SpeakOut('Hello');
# 8. TfxThreadTimer 组件
TfxThreadTimer 组件实现的功能与 TfxTimer 相同,与后者不同的是,前者的 OnTimer 是在另外一个线程中实现的,不占用主线程,而后者的 OnTimer 是在主线程中实现的,如果在事件中执行了耗时的代码,则会导致主界面假死。
# 8.1. 属性
属性 | 功能说明 |
---|---|
Enabled | 是否启用组件功能 |
Interval | 设置定时器触发的时间间隔,以ms为单位 |
RunOnMainThread | 设置是否将定时器运行在主线程中 |
# 8.2. 事件
# 8.2.1. OnTimer
设定定时触发的事件。