二维码生成与扫描
# PinToo之二维码生成与一维二维码扫描
# 1. 说明
该功能可用于扫描识别条形码与二维码,以及根据内容生成对应的二维码。通过PinToo智慧控制平台,实现识别设备条形码的功能。可设置该功能进行连续扫描,识别振动提示音,识别成功提示音,打开闪光灯,识别图片中的条形码信息。并且可根据文字内容生成二维码。在使用以下功能之前,请先确认是否有给予PinToo相应的权限。
# 2. 设计明细
开启PinToo设计器,分别加入下插图之控件。或者点击左上角的[打开模板Lib文件]
,选择模板文件来打开对应模板。

①:TfxSwitch组件,控件名称为fxSwitchVoice
。
②:TfxSwitch组件,控件名称为fxSwitchViberate
。
③:TfxSwitch组件,控件名称为fxSwitchScan
。
④:TfxSwitch组件,控件名称为fxSwitchFlash
。
⑤:TfxSwitch组件,控件名称为fxSwitchPhoto
。
⑥:TfxSwitch组件,控件名称为fxSwitchResult
。
⑦:TfxSuperButton组件,控件名称为fxSuperButtonScan
。
⑧:TfxBarCodeScanner组件,控件名称为fxBarCodeScanner
。
⑨:TfxSuperButton组件,控件名称为fxSuperButtonCode
。
⑩:TfxMemo组件,控件名称为fxMemo1
。
(11):TfxQRCode组件,控件名称为fxQRCode1
。
fxRunFrame属性设置
Height
:设置页面高度=800
。Width
:设置页面宽度=400
。
①fxSwitchVoice属性设置
Name
:设置控件名称=fxSwitchVoice
。
②fxSwitchViberate属性设置
Name
:设置控件名称=fxSwitchViberate
。
③fxSwitchScan属性设置
Name
:设置控件名称=fxSwitchScan
。
④fxSwitchFlash属性设置
Name
:设置控件名称=fxSwitchFlash
。
⑤fxSwitchPhoto属性设置
Name
:设置控件名称=fxSwitchPhoto
。
⑥fxSwitchResult属性设置
Name
:设置控件名称=fxSwitchResult
。
⑦fxSuperButtonScan属性设置
Height
:设置控件高度=95
。Width
:设置控件宽度=100
。ButtonType
:设置按钮类型,设置为TfxSvgButton
。Name
:设置控件名称=fxSuperButtonScan
。ButtonType.SvgData
:设置SVG数据,其数据内容如下。
<path d="M27.2766056060791,3 L8.34043598175049,3 C7.07802438735962,3 5.81561374664307,4.26241159439087 5.81561374664307,5.52482318878174 L5.81561374664307,23.1985816955566 C5.81561374664307,24.4609928131104 7.07802534103394,25.7234039306641 8.34043598175049,25.7234039306641 C9.6028470993042,25.7234039306641 10.8652591705322,24.4609928131104 10.8652591705322,23.1985816955566 L10.8652591705322,8.68085098266602 L26.6453990936279,8.68085098266602 C27.9078121185303,8.68085098266602 29.1702270507813,7.41843891143799 29.1702270507813,6.15602779388428 C29.1702270507813,4.89361715316772 28.5390148162842,3 27.2766056060791,3 Z M91.0283660888672,3 L73.3546142578125,3 C72.0922088623047,3 70.8297882080078,4.26241159439087 70.8297882080078,5.52482318878174 C70.8297882080078,6.78723430633545 72.0922088623047,8.04964542388916 73.3546142578125,8.04964542388916 L89.1347503662109,8.04964542388916 L89.1347503662109,23.8297863006592 C89.1347503662109,25.0921993255615 90.3971710205078,26.3546085357666 91.6595764160156,26.3546085357666 C92.9219818115234,26.3546085357666 94.1843872070313,25.0921955108643 94.1843872070313,23.8297843933105 L94.1843872070313,5.52482318878174 C93.5531768798828,4.26241159439087 92.290771484375,3 91.0283660888672,3 Z M91.0283660888672,68.645393371582 C89.7659606933594,68.645393371582 88.5035552978516,69.9078140258789 88.5035552978516,71.1702194213867 L88.5035552978516,86.9503631591797 L72.7234191894531,86.9503631591797 C71.4609985351563,86.9503631591797 70.1985931396484,88.2127685546875 70.1985931396484,89.4751815795898 C70.1985931396484,90.7375946044922 71.4609985351563,92 72.7234191894531,92 L90.3971710205078,92 C91.6595764160156,92 92.9219818115234,90.7375946044922 92.9219818115234,89.4751815795898 L92.9219818115234,71.8014144897461 C93.5532073974609,69.9077987670898 92.290771484375,68.645393371582 91.0283660888672,68.645393371582 Z M26.6453990936279,86.9503631591797 L11.4964637756348,86.9503631591797 L11.4964637756348,71.1702194213867 C11.4964637756348,69.9078140258789 10.2340526580811,68.645393371582 8.97164154052734,68.645393371582 C7.70922994613647,68.645393371582 5.81561279296875,69.9078140258789 5.81561279296875,71.1702194213867 L5.81561279296875,88.8439712524414 C5.81561279296875,90.1063766479492 7.07802438735962,91.3688049316406 8.34043598175049,91.3688049316406 L26.0141944885254,91.3688049316406 C27.2766036987305,91.3688049316406 28.5390148162842,90.7375946044922 28.5390148162842,88.8439712524414 C28.5390148162842,87.5815734863281 27.2766056060791,86.9503631591797 26.6453971862793,86.9503631591797 Z" p-id="2128" fill="#FFD81E06" stroke="Null"></path> <path d="M19.070930480957,17.5177307128906 L19.070930480957,78.7446899414063 L81.5602874755859,78.7446899414063 L81.5602874755859,17.5177307128906 L19.070930480957,17.5177307128906 Z M69.5673828125,50.9716300964355 L31.0638370513916,50.9716300964355 C28.5390148162842,50.9716300964355 27.2766056060791,49.7092208862305 27.2766056060791,47.184398651123 C27.2766056060791,44.6595726013184 28.5390148162842,43.3971633911133 31.0638370513916,43.3971633911133 L69.5673828125,43.3971633911133 C72.0922088623047,43.3971633911133 73.3546142578125,44.6595726013184 73.3546142578125,47.184398651123 C73.3546142578125,49.7092208862305 70.8298034667969,50.9716300964355 69.5673828125,50.9716300964355 Z" p-id="2129" fill="#FFD81E06" stroke="Null"></path>
1
2⑧fxBarCodeScanner1属性设置
SdkConfig.ScanTips
:设置扫描界面显示的扫描提示=将二维码/条码放入框内,即可自动扫描
。SdkConfig.ScanTitle
:设置扫描界面显示的标题=二维码/条码
。
⑨fxSuperButtonCode属性设置
Height
:设置控件高度=95
。Width
:设置控件宽度=100
。ButtonType
:设置按钮类型,设置为TfxSvgButton
。Name
:设置控件名称=fxSuperButtonCode
。ButtonType.SvgData
:设置SVG数据,其数据内容如下。
<path d="M5.49995422363281,44.8822822570801 L47.3823356628418,44.8822822570801 L47.3823394775391,3 L5.49995422363281,3 L5.49995422363281,44.8822822570801 Z M15.9706258773804,13.47057056427 L36.9117698669434,13.47057056427 L36.9117698669434,34.4117126464844 L15.9706258773804,34.4117126464844 L15.9706258773804,13.47057056427 Z M52.6176719665527,3 L52.6176719665527,44.882381439209 L94.5000457763672,44.882381439209 L94.5000457763672,3 L52.6176719665527,3 Z M84.0293884277344,34.4117126464844 L63.0882415771484,34.4117126464844 L63.0882415771484,13.47057056427 L84.0293731689453,13.47057056427 L84.0293884277344,34.4117126464844 Z M21.2058601379395,29.1764755249023 L31.6764297485352,29.1764755249023 L31.6764297485352,18.7058067321777 L21.2058601379395,18.7058067321777 L21.2058601379395,29.1764755249023 Z M5.49995422363281,92 L47.3823356628418,92 L47.3823394775391,50.1176147460938 L5.49995422363281,50.1176147460938 L5.49995422363281,92 Z M15.9706258773804,60.5881843566895 L36.9117698669434,60.5881843566895 L36.9117698669434,81.5293197631836 L15.9706258773804,81.5293273925781 L15.9706258773804,60.5881843566895 Z M78.7941436767578,18.7058067321777 L68.3234710693359,18.7058067321777 L68.3234710693359,29.1763744354248 L78.7940368652344,29.1763744354248 L78.7940368652344,18.7058067321777 Z M52.6176719665527,92 L63.0882415771484,92 L63.0882415771484,81.5294342041016 L52.6176719665527,81.5294342041016 L52.6176719665527,92 Z M63.0882415771484,60.5881843566895 L63.0882415771484,81.5293197631836 L73.5588226318359,81.5293197631836 L73.5588226318359,60.5881843566895 L63.0882415771484,60.5881843566895 Z M84.0293884277344,81.5294342041016 L73.5588226318359,81.5294342041016 L73.5588226318359,92 L94.4999694824219,92 L94.4999542236328,71.0587615966797 L84.0293884277344,71.0587615966797 L84.0293884277344,81.5294342041016 Z M84.0293884277344,60.5881843566895 L94.4999542236328,60.5881843566895 L94.4999542236328,50.1176147460938 L84.0293884277344,50.1176147460938 L84.0293884277344,60.5881843566895 Z M52.6176719665527,50.1176147460938 L52.6176719665527,60.5881843566895 L63.0882415771484,60.5881843566895 L63.0882415771484,50.1176147460938 L52.6176719665527,50.1176147460938 Z M21.2058601379395,76.2940902709961 L31.6764297485352,76.2940902709961 L31.6764297485352,65.8235168457031 L21.2058601379395,65.8235168457031 L21.2058601379395,76.2940902709961 Z" p-id="3413" fill="#FFD81E06" stroke="Null"></path>
1⑩fxMemo1属性设置
Height
:设置控件高度=245
。Width
:设置控件宽度=360
。
(11)fxQRCode1属性设置
Height
:设置控件高度=130
。Width
:设置控件宽度=140
。QuietZone
:设置二维码周边空白区域的大小=4
。
# 3. 程序设计
点击程序设计界面右下角的按钮,切换至单元选择界面,勾选需要使用的单元。程序需要引用BarCodeScanner
单元。
# 3.1. 程序初始设置
将扫描控件中的设置按照开关的初始设定进行设置。
Begin
//初始化
fxBarcodeScanner1.SdkConfig.Flashlight := fxSwitchFlash.IsChecked;
fxBarcodeScanner1.SdkConfig.ShowScanFromPhotoButton := fxSwitchPhoto.IsChecked;
fxBarcodeScanner1.SdkConfig.ToastResult := fxSwitchResult.IsChecked;
fxBarcodeScanner1.SdkConfig.Vibrate := fxSwitchViberate.IsChecked;
fxBarcodeScanner1.SdkConfig.PlayVoice := fxSwitchVoice.IsChecked;
End.
2
3
4
5
6
7
8
# 3.2. 事件设置
- ①fxSwitchVoice-OnSwitch事件
点击切换开启/关闭提示音。
Procedure fxSwitchVoiceOnSwitch(Sender: TObject);
//提示音
Begin
fxBarcodeScanner1.SdkConfig.PlayVoice := fxSwitchVoice.IsChecked;
End;
2
3
4
5
- ②fxSwitchViberate-OnSwitch事件
点击切换开启/关闭振动。
Procedure fxSwitchViberateOnSwitch(Sender: TObject);
//振动
Begin
fxBarcodeScanner1.SdkConfig.Vibrate := fxSwitchViberate.IsChecked;
End;
2
3
4
5
- ④fxSwitchFlash-OnSwitch事件
点击切换开启/关闭闪光灯。
Procedure fxSwitchFlashOnSwitch(Sender: TObject);
//闪光灯开启关闭
Begin
fxBarcodeScanner1.SdkConfig.Flashlight := fxSwitchFlash.IsChecked;
End;
2
3
4
5
- ⑤fxSwitchPhoto-OnSwitch事件
点击开启/关闭在扫描界面显示相册按钮。
Procedure fxSwitchPhotoOnSwitch(Sender: TObject);
//是否显示相册
Begin
fxBarcodeScanner1.SdkConfig.ShowScanFromPhotoButton := fxSwitchPhoto.IsChecked;
End;
2
3
4
5
- ⑥fxSwitchResult-OnSwitch事件
点击以开启/关闭显示扫描结果提示。
Procedure fxSwitchResultOnSwitch(Sender: TObject);
//显示扫描结果
Begin
fxBarcodeScanner1.SdkConfig.ToastResult := fxSwitchResult.IsChecked;
End;
2
3
4
5
- ⑦fxSuperButtonScan-OnClick事件
点击以开启扫描。
Procedure fxSuperButtonScanOnClick(Sender: TObject);
//开启扫描
Begin
fxBarcodeScanner1.Start;
End;
2
3
4
5
- ⑧fxBarCodeScanner1-OnScanComletedCallbackEvent事件
当扫描完成时,如果连续扫描按钮处于开启状态则继续进行下一次扫描。
Procedure fxBarcodeScanner1OnScanComletedCallbackEvent(Sender: TObject; ResultCode: Integer; ResultString: string);
//连续扫描模式
Begin
fxMemo1.Lines.Add(ResultString);
if fxSwitchScan.IsChecked Then
fxBarcodeScanner1.Start;
End;
2
3
4
5
6
7
- ⑨fxSuperButtonCode-OnClick事件
点击按钮,将文本框中的内容转换为二维码。
Procedure fxSuperButtonCodeOnClick(Sender: TObject);
//显示二维码
Begin
fxQRCode1.Text := fxMemo1.Text;
End;
2
3
4
5
- 程序定义
- 程序需要引用
BarCodeScanner
单元。
- 程序需要引用
//引用BarCodeScanner单元
Procedure fxSwitchVoiceOnSwitch(Sender: TObject);
//fxSwitchVoice的OnSwitch事件,提示音
Begin
fxBarcodeScanner1.SdkConfig.PlayVoice := fxSwitchVoice.IsChecked;
End;
Procedure fxSwitchViberateOnSwitch(Sender: TObject);
//fxSwitchViberate的OnSwitch事件,振动
Begin
fxBarcodeScanner1.SdkConfig.Vibrate := fxSwitchViberate.IsChecked;
End;
Procedure fxSwitchFlashOnSwitch(Sender: TObject);
//fxSwitchFlash的OnSwitch事件,闪光灯开启关闭
Begin
fxBarcodeScanner1.SdkConfig.Flashlight := fxSwitchFlash.IsChecked;
End;
Procedure fxSwitchPhotoOnSwitch(Sender: TObject);
//fxSwitchPhoto的OnSwitch事件,是否显示相册
Begin
fxBarcodeScanner1.SdkConfig.ShowScanFromPhotoButton := fxSwitchPhoto.IsChecked;
End;
Procedure fxSwitchResultOnSwitch(Sender: TObject);
//fxSwitchResult的OnSwitch事件,显示扫描结果
Begin
fxBarcodeScanner1.SdkConfig.ToastResult := fxSwitchResult.IsChecked;
End;
Procedure fxBarcodeScanner1OnScanComletedCallbackEvent(Sender: TObject; ResultCode: Integer; ResultString: string);
//fxBarcodeScanner1的OnScanComletedCallbackEvent,连续扫描模式
Begin
fxMemo1.Lines.Add(ResultString);
if fxSwitchScan.IsChecked Then
fxBarcodeScanner1.Start;
End;
Procedure fxSuperButtonScanOnClick(Sender: TObject);
//fxSuperButtonScan的OnClick事件,点击以开启扫描
Begin
fxBarcodeScanner1.Start;
End;
Procedure fxSuperButtonCodeOnClick(Sender: TObject);
//fxSuperButtonCode的OnClick事件,点击以显示二维码
Begin
fxQRCode1.Text := fxMemo1.Text;
End;
Begin
//初始化
fxBarcodeScanner1.SdkConfig.Flashlight := fxSwitchFlash.IsChecked;
fxBarcodeScanner1.SdkConfig.ShowScanFromPhotoButton := fxSwitchPhoto.IsChecked;
fxBarcodeScanner1.SdkConfig.ToastResult := fxSwitchResult.IsChecked;
fxBarcodeScanner1.SdkConfig.Vibrate := fxSwitchViberate.IsChecked;
fxBarcodeScanner1.SdkConfig.PlayVoice := fxSwitchVoice.IsChecked;
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
57
58
59
# 4. 运行结果
使用鼠标在 PinToo 菜单,点击[保存至数据库]
按钮,将其保存至数据库,点击[调试运行]
确认能够正常打开。

通过同步中心,将程序上传至手机PinToo运行;同步时,请确保手机已经运行PinToo,并且已经登陆。


在该程序下,选择扫描选项,点击扫描按钮打开扫描界面,将摄像头对准包含二维码或者条形码的物体,待识别后返回程序,并在编辑框中显示扫描识别的结果。如果启用了连续扫描则在扫描完成后将继续执行下一次扫描,直至手动点击左上角返回程序。在编辑框中包含内容的情况下,点击二维码生成的按钮,在右下方会显示内容转换的二维码。