Delphi XE7已经内建了蓝牙功能,提供了System.Bluetooth.pas单元

顾名思义,System表示XE7的蓝牙功能可以在Windows,Android,IOS系统内使用

System.Bluetooth单元中主要包含一下几个类,其中带LE的支持所有系统,不带LE的类不支持Ios系统,带与不带LE功能是一样的。

TBluetoothManager
TBluetoothDeviceList
TBluetoothAdapter
TBluetoothDevice
TBluetoothService
TBluetoothServiceList
TBluetoothSocket

TBluetoothLEManager
TBluetoothLEDeviceList
TBluetoothLEAdapter
TBluetoothLEDevice
TBluetoothLEService
TBluetoothLEServiceList
TBluetoothLESocket

其中:

TBluetoothManager是蓝牙管理器,用于蓝牙设备管理,包括发现蓝牙设备,获取配对设备,处理远程配对请求等功能

TBluetoothDeviceList是蓝牙设备列表,TBluetoothDeviceList = class(TObjectList<TBluetoothDevice>),可以通过TBluetoothManager.GetPairedDevices获得配对设备列表

TBluetoothAdapter本机蓝牙设备,实现配对、取消配对等功能,可通过TBluetoothManager.CurrentAdapter得到当前蓝牙设备

TBluetoothDevice远端蓝牙设备,每个远端设备可以提供若干个服务(TBluetoothService),

TBluetoothService远端蓝牙设备服务,包括服务名和UUID

  1. TBluetoothService = record
  2. Name: string;
  3. UUID: TBluetoothUUID;
  4. end;

TBluetoothServiceList服务列表 = class(TList<TBluetoothService>);可通过TBluetoothDevice.GetServices获得远端设备服务列表

TBluetoothSocket蓝牙通讯套接字,通过 TBluetoothDevice.CreateClientSocket(StringToGUID(ServiceGUI), True/False)创建,

下面是一个XE7自带的例子,记得在Android下把相关权限添加到工程设置中。

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7. FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Bluetooth,
  8. FMX.Layouts, FMX.ListBox, FMX.StdCtrls, FMX.Memo, FMX.Controls.Presentation,
  9. FMX.Edit, FMX.TabControl;
  10.  
  11. type
  12.  
  13. TServerConnectionTH = class(TThread)
  14. private
  15. { Private declarations }
  16. FServerSocket: TBluetoothServerSocket;
  17. FSocket: TBluetoothSocket;
  18. FData: TBytes;
  19. protected
  20. procedure Execute; override;
  21. public
  22. { Public declarations }
  23. constructor Create(ACreateSuspended: Boolean);
  24. destructor Destroy; override;
  25. end;
  26.  
  27. TForm1 = class(TForm)
  28. ButtonDiscover: TButton;
  29. ButtonPair: TButton;
  30. ButtonUnPair: TButton;
  31. ButtonPairedDevices: TButton;
  32. DisplayR: TMemo;
  33. Edit1: TEdit;
  34. Button2: TButton;
  35. FreeSocket: TButton;
  36. Labeldiscoverable: TLabel;
  37. ComboBoxDevices: TComboBox;
  38. ComboBoxPaired: TComboBox;
  39. Panel1: TPanel;
  40. TabControl1: TTabControl;
  41. TabItem1: TTabItem;
  42. TabItem2: TTabItem;
  43. LabelNameSarver: TLabel;
  44. ButtonServices: TButton;
  45. ComboBoxServices: TComboBox;
  46. PanelClient: TPanel;
  47. LabelClient: TLabel;
  48. ButtonConnectToRFCOMM: TButton;
  49. PanelServer: TPanel;
  50. ButtonCloseReadingSocket: TButton;
  51. ButtonOpenReadingSocket: TButton;
  52. LabelServer: TLabel;
  53. procedure ButtonDiscoverClick(Sender: TObject);
  54. procedure ButtonPairClick(Sender: TObject);
  55. procedure ButtonUnPairClick(Sender: TObject);
  56. procedure ButtonPairedDeviceClick(Sender: TObject);
  57. procedure FormShow(Sender: TObject);
  58. procedure ButtonOpenReadingSocketClick(Sender: TObject);
  59. procedure ButtonConnectToRFCOMMClick(Sender: TObject);
  60. procedure ButtonCloseReadingSocketClick(Sender: TObject);
  61. procedure Button2Click(Sender: TObject);
  62. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  63. procedure FreeSocketClick(Sender: TObject);
  64. function ManagerConnected:Boolean;
  65. function GetServiceName(GUID: string): string;
  66. procedure ComboBoxPairedChange(Sender: TObject);
  67. procedure ButtonServicesClick(Sender: TObject);
  68. private
  69. { Private declarations }
  70. FBluetoothManager: TBluetoothManager;
  71. FDiscoverDevices: TBluetoothDeviceList;
  72. FPairedDevices: TBluetoothDeviceList;
  73. FAdapter: TBluetoothAdapter;
  74. FData: TBytes;
  75. FSocket: TBluetoothSocket;
  76. ItemIndex: Integer;
  77. ServerConnectionTH: TServerConnectionTH;
  78. procedure DevicesDiscoveryEnd(const Sender: TObject; const ADevices: TBluetoothDeviceList);
  79. procedure PairedDevices;
  80. procedure SendData;
  81. public
  82. { Public declarations }
  83. end;
  84.  
  85. Const
  86. ServiceName = 'Basic Text Server';
  87. ServiceGUI = '{B62C4E8D-62CC-404B-BBBF-BF3E3BBB1378}';
  88. var
  89. Form1: TForm1;
  90.  
  91. implementation
  92.  
  93. {$R *.fmx}
  94. {$R *.NmXhdpiPh.fmx ANDROID}
  95. {$R *.LgXhdpiPh.fmx ANDROID}
  96. {$R *.SmXhdpiPh.fmx ANDROID}
  97. {$R *.Macintosh.fmx MACOS}
  98. {$R *.iPhone4in.fmx IOS}
  99. {$R *.Windows.fmx MSWINDOWS}
  100.  
  101. procedure TForm1.ButtonPairClick(Sender: TObject);
  102. begin
  103. if ManagerConnected then
  104. if ComboboxDevices.ItemIndex > - then
  105. FAdapter.Pair(FDiscoverDevices[ComboboxDevices.ItemIndex])
  106. else
  107. ShowMessage('No device selected');
  108. end;
  109.  
  110. procedure TForm1.ButtonUnPairClick(Sender: TObject);
  111. begin
  112. if ManagerConnected then
  113. if ComboboxPaired.ItemIndex > - then
  114. FAdapter.UnPair(FPairedDevices[ComboboxPaired.ItemIndex])
  115. else
  116. ShowMessage('No Paired device selected');
  117. end;
  118.  
  119. procedure TForm1.ComboBoxPairedChange(Sender: TObject);
  120. begin
  121. LabelNameSarver.Text := ComboBoxPaired.Items[ComboBoxPaired.ItemIndex];
  122. end;
  123.  
  124. procedure TForm1.PairedDevices;
  125. var
  126. I: Integer;
  127. begin
  128. ComboboxPaired.Clear;
  129. if ManagerConnected then
  130. begin
  131. FPairedDevices := FBluetoothManager.GetPairedDevices;
  132. if FPairedDevices.Count > then
  133. for I:= to FPairedDevices.Count - do
  134. ComboboxPaired.Items.Add(FPairedDevices[I].DeviceName)
  135. else
  136. ComboboxPaired.Items.Add('No Paired Devices');
  137. end;
  138. end;
  139.  
  140. procedure TForm1.ButtonPairedDeviceClick(Sender: TObject);
  141. begin
  142. PairedDevices;
  143. ComboboxPaired.DropDown;
  144. end;
  145.  
  146. procedure TForm1.ButtonServicesClick(Sender: TObject);
  147. var
  148. LServices: TBluetoothServiceList;
  149. LDevice: TBluetoothDevice;
  150. I: Integer;
  151. begin
  152. ComboBoxServices.Clear;
  153. if ManagerConnected then
  154. if ComboboxPaired.ItemIndex > - then
  155. begin
  156. LDevice := FPairedDevices[ComboboxPaired.ItemIndex] as TBluetoothDevice;
  157. LServices := LDevice.GetServices;
  158. for I := to LServices.Count - do
  159. ComboBoxServices.Items.Add(LServices[I].Name + ' --> ' + GUIDToString(LServices[I].UUID));
  160. ComboBoxServices.ItemIndex := ;
  161. ComboBoxServices.DropDown;
  162. end
  163. else
  164. ShowMessage('No paired device selected');
  165. end;
  166.  
  167. procedure TForm1.FreeSocketClick(Sender: TObject);
  168. begin
  169. FreeAndNil(FSocket);
  170. DisplayR.Lines.Add('Client socket set free');
  171. DisplayR.GoToLineEnd;
  172. end;
  173.  
  174. procedure TForm1.Button2Click(Sender: TObject);
  175. begin
  176. DisplayR.ReadOnly := False;
  177. DisplayR.SelectAll;
  178. DisplayR.DeleteSelection;
  179. DisplayR.ReadOnly := True;
  180. end;
  181.  
  182. function TForm1.GetServiceName(GUID: string): string;
  183. var
  184. LServices: TBluetoothServiceList;
  185. LDevice: TBluetoothDevice;
  186. I: Integer;
  187. begin
  188. LDevice := FPairedDevices[ComboboxPaired.ItemIndex] as TBluetoothDevice;
  189. LServices := LDevice.GetServices;
  190. for I := to LServices.Count - do
  191. begin
  192. if StringToGUID(GUID) = LServices[I].UUID then
  193. begin
  194. Result := LServices[I].Name;
  195. break;
  196. end;
  197. end;
  198. end;
  199.  
  200. procedure TForm1.ButtonConnectToRFCOMMClick(Sender: TObject);
  201. begin
  202. if ManagerConnected then
  203. try
  204. SendData;
  205. except
  206. on E : Exception do
  207. begin
  208. DisplayR.Lines.Add(E.Message);
  209. DisplayR.GoToTextEnd;
  210. FreeAndNil(FSocket);
  211. end;
  212. end;
  213. end;
  214.  
  215. function TForm1.ManagerConnected:Boolean;
  216. begin
  217. if FBluetoothManager.ConnectionState = TBluetoothConnectionState.Connected then
  218. begin
  219. Labeldiscoverable.Text := 'Device discoverable as "'+FBluetoothManager.CurrentAdapter.AdapterName+'"';
  220. Result := True;
  221. end
  222. else
  223. begin
  224. Result := False;
  225. DisplayR.Lines.Add('No Bluetooth device Found');
  226. DisplayR.GoToTextEnd;
  227. end
  228. end;
  229.  
  230. procedure TForm1.SendData;
  231. var
  232. ToSend: TBytes;
  233. LDevice: TBluetoothDevice;
  234. begin
  235. if (FSocket = nil) or (ItemIndex <> ComboboxPaired.ItemIndex) then
  236. begin
  237. if ComboboxPaired.ItemIndex > - then
  238. begin
  239. LDevice := FPairedDevices[ComboboxPaired.ItemIndex] as TBluetoothDevice;
  240. DisplayR.Lines.Add(GetServiceName(ServiceGUI));
  241. DisplayR.GoToTextEnd;
  242. FSocket := LDevice.CreateClientSocket(StringToGUID(ServiceGUI), False);
  243. if FSocket <> nil then
  244. begin
  245. ItemIndex := ComboboxPaired.ItemIndex;
  246. FSocket.Connect;
  247. ToSend := TEncoding.UTF8.GetBytes(Edit1.Text);
  248. FSocket.SendData(ToSend);
  249. DisplayR.Lines.Add('Text Sent');
  250. DisplayR.GoToTextEnd;
  251. end
  252. else
  253. ShowMessage('Out of time -15s-');
  254. end
  255. else
  256. ShowMessage('No paired device selected');
  257. end
  258. else
  259. begin
  260. ToSend := TEncoding.UTF8.GetBytes(Edit1.Text);
  261. FSocket.SendData(ToSend);
  262. DisplayR.Lines.Add('Text Sent');
  263. DisplayR.GoToTextEnd;
  264. end;
  265. end;
  266.  
  267. procedure TForm1.ButtonDiscoverClick(Sender: TObject);
  268. begin
  269. ComboboxDevices.Clear;
  270. if ManagerConnected then
  271. begin
  272. FAdapter := FBluetoothManager.CurrentAdapter;
  273. FBluetoothManager.StartDiscovery();
  274. FBluetoothManager.OnDiscoveryEnd := DevicesDiscoveryEnd;
  275. end;
  276. end;
  277.  
  278. procedure TForm1.DevicesDiscoveryEnd(const Sender: TObject; const ADevices: TBluetoothDeviceList);
  279. var
  280. I: Integer;
  281. begin
  282. FDiscoverDevices := ADevices;
  283. for I := to ADevices.Count - do
  284. ComboboxDevices.Items.Add(ADevices[I].DeviceName + ' -> ' + ADevices[I].Address);
  285. ComboboxDevices.ItemIndex := ;
  286. end;
  287.  
  288. procedure TForm1.ButtonOpenReadingSocketClick(Sender: TObject);
  289. begin
  290. if (ServerConnectionTH = nil) and ManagerConnected then
  291. begin
  292. try
  293. FAdapter := FBluetoothManager.CurrentAdapter;
  294. ServerConnectionTH := TServerConnectionTH.Create(True);
  295. ServerConnectionTH.FServerSocket := FAdapter.CreateServerSocket(ServiceName, StringToGUID(ServiceGUI), False);
  296. ServerConnectionTH.Start;
  297. DisplayR.Lines.Add(' - Service created: "'+ServiceName+'"');
  298. DisplayR.GoToTextEnd;
  299. except
  300. on E : Exception do
  301. begin
  302. DisplayR.Lines.Add(E.Message);
  303. DisplayR.GoToTextEnd;
  304. end;
  305. end;
  306. end;
  307. end;
  308.  
  309. procedure TForm1.ButtonCloseReadingSocketClick(Sender: TObject);
  310. begin
  311. if ServerConnectionTH <> nil then
  312. begin
  313. ServerConnectionTH.Terminate;
  314. ServerConnectionTH.WaitFor;
  315. FreeAndNil(ServerConnectionTH);
  316. DisplayR.Lines.Add(' - Service removed -');
  317. DisplayR.GoToTextEnd;
  318. end
  319. end;
  320.  
  321. procedure TForm1.FormShow(Sender: TObject);
  322. begin
  323. try
  324. LabelServer.Text := ServiceName;
  325. LabelClient.Text := 'Client of '+ServiceName;
  326. FBluetoothManager := TBluetoothManager.Current;
  327. FAdapter := FBluetoothManager.CurrentAdapter;
  328. if ManagerConnected then
  329. begin
  330. PairedDevices;
  331. ComboboxPaired.ItemIndex := ;
  332. end;
  333. except
  334. on E : Exception do
  335. begin
  336. ShowMessage(E.Message);
  337. end;
  338. end;
  339. end;
  340.  
  341. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  342. begin
  343. if ServerConnectionTH <> nil then
  344. begin
  345. ServerConnectionTH.Terminate;
  346. ServerConnectionTH.WaitFor;
  347. FreeAndNil(ServerConnectionTH);
  348. end
  349. end;
  350.  
  351. {TServerConnection}
  352.  
  353. constructor TServerConnectionTH.Create(ACreateSuspended: Boolean);
  354. begin
  355. inherited;
  356. end;
  357.  
  358. destructor TServerConnectionTH.Destroy;
  359. begin
  360. FSocket.Free;
  361. FServerSocket.Free;
  362. inherited;
  363. end;
  364.  
  365. procedure TServerConnectionTH.execute;
  366. var
  367. ASocket: TBluetoothSocket;
  368. Msg: string;
  369. begin
  370. while not Terminated do
  371. try
  372. ASocket := nil;
  373. while not Terminated and (ASocket = nil) do
  374. ASocket := FServerSocket.Accept();
  375. if(ASocket <> nil) then
  376. begin
  377. FSocket := ASocket;
  378. while not Terminated do
  379. begin
  380. FData := ASocket.ReadData;
  381. if length(FData) > then
  382. Synchronize(procedure
  383. begin
  384. Form1.DisplayR.Lines.Add(TEncoding.UTF8.GetString(FData));
  385. Form1.DisplayR.GoToTextEnd;
  386. end);
  387. sleep();
  388. end;
  389. end;
  390. except
  391. on E : Exception do
  392. begin
  393. Msg := E.Message;
  394. Synchronize(procedure
  395. begin
  396. Form1.DisplayR.Lines.Add('Server Socket closed: ' + Msg);
  397. Form1.DisplayR.GoToTextEnd;
  398. end);
  399. end;
  400. end;
  401. end;
  402.  
  403. end.

窗体文件

  1. object Form1: TForm1
  2. Left =
  3. Top =
  4. Caption = 'Basic Classic Bluetooth Demo'
  5. ClientHeight =
  6. ClientWidth =
  7. FormFactor.Width =
  8. FormFactor.Height =
  9. FormFactor.Devices = [Desktop]
  10. OnClose = FormClose
  11. OnShow = FormShow
  12. DesignerMasterStyle =
  13. object Panel1: TPanel
  14. Align = Client
  15. Size.Width = 360.000000000000000000
  16. Size.Height = 570.000000000000000000
  17. Size.PlatformDefault = False
  18. TabOrder =
  19. object TabControl1: TTabControl
  20. Align = Client
  21. FullSize = True
  22. Size.Width = 360.000000000000000000
  23. Size.Height = 570.000000000000000000
  24. Size.PlatformDefault = False
  25. TabHeight = 49.000000000000000000
  26. TabIndex =
  27. TabOrder =
  28. TabPosition = Bottom
  29. object TabItem1: TTabItem
  30. CustomIcon = <
  31. item
  32. end>
  33. IsSelected = True
  34. Size.Width = 180.000000000000000000
  35. Size.Height = 49.000000000000000000
  36. Size.PlatformDefault = False
  37. TabOrder =
  38. Text = 'Bluetooth settings'
  39. object ButtonDiscover: TButton
  40. Position.X = 4.000000000000000000
  41. Position.Y = 59.000000000000000000
  42. Size.Width = 158.000000000000000000
  43. Size.Height = 31.000000000000000000
  44. Size.PlatformDefault = False
  45. TabOrder =
  46. Text = 'Discover devices'
  47. OnClick = ButtonDiscoverClick
  48. end
  49. object ButtonPair: TButton
  50. Position.X = 191.000000000000000000
  51. Position.Y = 59.000000000000000000
  52. Size.Width = 78.000000000000000000
  53. Size.Height = 31.000000000000000000
  54. Size.PlatformDefault = False
  55. TabOrder =
  56. Text = 'Pair'
  57. OnClick = ButtonPairClick
  58. end
  59. object ButtonPairedDevices: TButton
  60. Position.X = 4.000000000000000000
  61. Position.Y = 140.000000000000000000
  62. Size.Width = 158.000000000000000000
  63. Size.Height = 31.000000000000000000
  64. Size.PlatformDefault = False
  65. TabOrder =
  66. Text = 'Paired Devices'
  67. OnClick = ButtonPairedDeviceClick
  68. end
  69. object ButtonUnPair: TButton
  70. Position.X = 277.000000000000000000
  71. Position.Y = 67.000000000000000000
  72. Size.Width = 80.000000000000000000
  73. Size.Height = 22.000000000000000000
  74. Size.PlatformDefault = False
  75. TabOrder =
  76. Text = 'UnPair'
  77. OnClick = ButtonUnPairClick
  78. end
  79. object ComboBoxDevices: TComboBox
  80. Position.X = 4.000000000000000000
  81. Position.Y = 92.000000000000000000
  82. Size.Width = 352.000000000000000000
  83. Size.Height = 32.000000000000000000
  84. Size.PlatformDefault = False
  85. TabOrder =
  86. end
  87. object ComboBoxPaired: TComboBox
  88. Position.X = 4.000000000000000000
  89. Position.Y = 173.000000000000000000
  90. Size.Width = 352.000000000000000000
  91. Size.Height = 32.000000000000000000
  92. Size.PlatformDefault = False
  93. TabOrder =
  94. OnChange = ComboBoxPairedChange
  95. end
  96. object ButtonServices: TButton
  97. Position.X = 4.000000000000000000
  98. Position.Y = 221.000000000000000000
  99. Size.Width = 158.000000000000000000
  100. Size.Height = 31.000000000000000000
  101. Size.PlatformDefault = False
  102. TabOrder =
  103. Text = 'Services'
  104. OnClick = ButtonServicesClick
  105. end
  106. object ComboBoxServices: TComboBox
  107. Position.X = 4.000000000000000000
  108. Position.Y = 254.000000000000000000
  109. Size.Width = 352.000000000000000000
  110. Size.Height = 32.000000000000000000
  111. Size.PlatformDefault = False
  112. TabOrder =
  113. end
  114. end
  115. object TabItem2: TTabItem
  116. CustomIcon = <
  117. item
  118. end>
  119. IsSelected = False
  120. Size.Width = 180.000000000000000000
  121. Size.Height = 49.000000000000000000
  122. Size.PlatformDefault = False
  123. TabOrder =
  124. Text = 'Service demo'
  125. object PanelClient: TPanel
  126. Position.Y = 134.000000000000000000
  127. Size.Width = 360.000000000000000000
  128. Size.Height = 153.000000000000000000
  129. Size.PlatformDefault = False
  130. TabOrder =
  131. object Button2: TButton
  132. Position.X = 4.000000000000000000
  133. Position.Y = 115.000000000000000000
  134. Size.Width = 73.000000000000000000
  135. Size.Height = 25.000000000000000000
  136. Size.PlatformDefault = False
  137. TabOrder =
  138. Text = 'Clear'
  139. OnClick = Button2Click
  140. end
  141. object Edit1: TEdit
  142. Touch.InteractiveGestures = [LongTap, DoubleTap]
  143. TabOrder =
  144. Text = 'I am the text sent'
  145. Position.X = 4.000000000000000000
  146. Position.Y = 71.000000000000000000
  147. Size.Width = 343.000000000000000000
  148. Size.Height = 32.000000000000000000
  149. Size.PlatformDefault = False
  150. end
  151. object FreeSocket: TButton
  152. Position.X = 190.000000000000000000
  153. Position.Y = 115.000000000000000000
  154. Size.Width = 157.000000000000000000
  155. Size.Height = 25.000000000000000000
  156. Size.PlatformDefault = False
  157. TabOrder =
  158. Text = 'Free Client Socket'
  159. OnClick = FreeSocketClick
  160. end
  161. object LabelNameSarver: TLabel
  162. Position.X = 157.000000000000000000
  163. Position.Y = 22.000000000000000000
  164. Size.Width = 180.000000000000000000
  165. Size.Height = 40.000000000000000000
  166. Size.PlatformDefault = False
  167. end
  168. object LabelClient: TLabel
  169. StyledSettings = [Family, Size, FontColor]
  170. Position.X = 4.000000000000000000
  171. Size.Width = 227.000000000000000000
  172. Size.Height = 20.000000000000000000
  173. Size.PlatformDefault = False
  174. Text = 'Client'
  175. end
  176. object ButtonConnectToRFCOMM: TButton
  177. Position.X = 4.000000000000000000
  178. Position.Y = 28.000000000000000000
  179. Size.Width = 143.000000000000000000
  180. Size.Height = 33.000000000000000000
  181. Size.PlatformDefault = False
  182. TabOrder =
  183. Text = 'Send text to ->'
  184. OnClick = ButtonConnectToRFCOMMClick
  185. end
  186. end
  187. object PanelServer: TPanel
  188. Position.Y = 40.000000000000000000
  189. Size.Width = 360.000000000000000000
  190. Size.Height = 93.000000000000000000
  191. Size.PlatformDefault = False
  192. TabOrder =
  193. object ButtonCloseReadingSocket: TButton
  194. Position.X = 195.000000000000000000
  195. Position.Y = 32.000000000000000000
  196. Size.Width = 160.000000000000000000
  197. Size.Height = 36.000000000000000000
  198. Size.PlatformDefault = False
  199. TabOrder =
  200. Text = 'Remove text service'
  201. OnClick = ButtonCloseReadingSocketClick
  202. end
  203. object ButtonOpenReadingSocket: TButton
  204. Position.X = 4.000000000000000000
  205. Position.Y = 32.000000000000000000
  206. Size.Width = 160.000000000000000000
  207. Size.Height = 36.000000000000000000
  208. Size.PlatformDefault = False
  209. TabOrder =
  210. Text = 'Create text service'
  211. OnClick = ButtonOpenReadingSocketClick
  212. end
  213. object LabelServer: TLabel
  214. StyledSettings = [Family, Size, FontColor]
  215. Position.X = 4.000000000000000000
  216. Size.Width = 227.000000000000000000
  217. Size.Height = 20.000000000000000000
  218. Size.PlatformDefault = False
  219. Text = 'Server'
  220. end
  221. end
  222. end
  223. end
  224. object Labeldiscoverable: TLabel
  225. StyledSettings = [Family, Style, FontColor]
  226. Position.X = 16.000000000000000000
  227. Position.Y = 8.000000000000000000
  228. Size.Width = 321.000000000000000000
  229. Size.Height = 23.000000000000000000
  230. Size.PlatformDefault = False
  231. end
  232. object DisplayR: TMemo
  233. Touch.InteractiveGestures = [Pan, LongTap, DoubleTap]
  234. Anchors = [akLeft, akTop, akRight]
  235. Position.Y = 288.000000000000000000
  236. Size.Width = 360.000000000000000000
  237. Size.Height = 232.000000000000000000
  238. Size.PlatformDefault = False
  239. TabOrder =
  240. TabStop = False
  241. ReadOnly = True
  242. ShowSizeGrip = True
  243. end
  244. end
  245. end

Delphi XE7的蓝牙 Bluetooth的更多相关文章

  1. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  2. 蓝牙(Bluetooth) IEEE 802.15.1 协议学习

    catalogue . 蓝牙概念 . 配对和连接 . 机密安全性 . 蓝牙协议分类 . 蓝牙协议栈 1. 蓝牙概念 蓝牙(Bluetooth)是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网 ...

  3. RemObjects SDK Source For Delphi XE7

    原文:http://blog.csdn.net/tht2009/article/details/39545545 1.目前官网最新版本是RemObjects SDK for Delphi and al ...

  4. delphi XE7 中的消息

    在delphi XE7的程序开发中,消息机制保证进程间的通信. 在程序中,消息来自: 1)系统: 通知你的程序用户输入,涂画以及其他的系统范围的事件: 2)你的程序:不同的程序部分之间的通信信息.   ...

  5. 关于delphi XE7中的动态数组和并行编程(第一部分)

    本文引自:http://www.danieleteti.it/category/embarcadero/delphi-xe7-embarcadero/ 并行编程库是delphi XE7中引进的最受期待 ...

  6. 咏南CS多层插件式开发框架支持最新的DELPHI XE7

    DATASNAP中间件: 中间件已经在好几个实际项目中应用,长时间运行异常稳定,可无人值守: 可编译环境:DELPHI XE5~DELPHI XE7,无需变动代码: 支持传统TCP/IP方式也支持RE ...

  7. Delphi XE7中新并行库

    Delphi XE7中添加了新的并行库,和.NET的Task和Parellel相似度99%. 详细内容能够看以下的文章: http://www.delphifeeds.com/go/s/119574 ...

  8. android -- 蓝牙 bluetooth (四)OPP文件传输

    在前面android -- 蓝牙 bluetooth (一) 入门文章结尾中提到了会按四个方面来写这系列的文章,前面已写了蓝牙打开和蓝牙搜索,这次一起来看下蓝牙文件分享的流程,也就是蓝牙应用opp目录 ...

  9. android -- 蓝牙 bluetooth (三)搜索蓝牙

    接上篇打开蓝牙继续,来一起看下蓝牙搜索的流程,触发蓝牙搜索的条件形式上有两种,一是在蓝牙设置界面开启蓝牙会直接开始搜索,另一个是先打开蓝牙开关在进入蓝牙设置界面也会触发搜索,也可能还有其它触发方式,但 ...

随机推荐

  1. spring boot(1)-Hello World

    spring boot简介 spring boot是由spring官方推出的一个新框架,对spring进行了高度封装,是spring未来的发展方向.spring boot功用众多,其中最主要的功能就是 ...

  2. linux下部署redis

    基础知识: 1.Redis的数据类型: 字符串.列表(lists).集合(sets).有序集合(sorts sets).哈希表(hashs)2.Redis和memcache相比的独特之处: (1)re ...

  3. django定义Model中的方法和属性

    #定义一个Model class UserProfile(models.Model): user=models.OneToOneField(User,unique=True) phone=models ...

  4. Spring注解开发-全面解析常用注解使用方法之生命周期

    本文github位置:https://github.com/WillVi/Spring-Annotation/ 往期文章:Spring注解开发-全面解析常用注解使用方法之组件注册 bean生命周期 ​ ...

  5. java内部类之成员内部类之匿名内部类

    匿名内部类特点:1.匿名内部类是没有名称的内部类,没办法引用它们.必须在创建时,作为new语句的一部分来声明并创建它们的实例.2.匿名内部类必须继承一个类(抽象的.非抽象的都可以)或者实现一个接口.如 ...

  6. (持续更新) CSS属性持续记录

    可以去除ul的li标签自带的圆点list-style-type: none; 可以将自己的光标改变样式:cursor: pointer;

  7. 108.UIView关于布局和约束的方法(AutoLayout)

    http://blog.csdn.net/wangyanchang21/article/details/52270136 关于布局(UIViewHierarchy) 1.layoutSubviews ...

  8. 安装LAMP PHP的./configure 參数,未出现MYSQ

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/default7/article/details/30613781 编译參数: ./configure ...

  9. Java并发案例02---生产者消费者问题

    package example; import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class MyC ...

  10. BZOJ3174:[TJOI2013]拯救小矮人(DP)

    Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人, ...