unit Main;
interface
uses
Bluetooth.Printer,
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;
type
TfrmMain = class(TForm)
btnImprimir: TButton;
cbxDevice: TComboBox;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnImprimirClick(Sender: TObject);
private
FPrinter: TBluetoothPrinter;
procedure PopularComboBoxDevices;
public
end;
var
frmMain: TfrmMain;
implementation
uses
System.Bluetooth;
{$R *.dfm}
procedure TfrmMain.PopularComboBoxDevices;
var
Device: TBluetoothDevice;
begin
cbxDevice.Items.BeginUpdate;
try
cbxDevice.Clear;
for Device in FPrinter.PairedDevices do
cbxDevice.Items.Add(Device.DeviceName);
finally
cbxDevice.Items.EndUpdate;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FPrinter := TBluetoothPrinter.Create(Self);
FPrinter.Enabled := True;
PopularComboBoxDevices;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FPrinter.Free;
end;
procedure TfrmMain.btnImprimirClick(Sender: TObject);
begin
if cbxDevice.Text = '' then
raise Exception.Create('Escolha primeiramente uma impressora da lista!');
if Memo1.Lines.Text.Trim.IsEmpty then
raise Exception.Create('Nenhum texto foi digitado, impossível continuar!');
FPrinter.PrinterName := cbxDevice.Text;
FPrinter.Imprimir(Memo1.Lines.Text);
end;
end.
单元文件:Bluetooth.Printer.pas
unit Bluetooth.Printer;
interface
uses
System.SysUtils, System.Bluetooth, System.Bluetooth.Components;
type
EBluetoothPrinter = class(Exception);
TBluetoothPrinter = class(TBluetooth)
private
FSocket: TBluetoothSocket;
FPrinterName: String;
function ConectarImpressora(ANomeDevice: String): Boolean;
function GetDeviceByName(ANomeDevice: String): TBluetoothDevice;
public
procedure Imprimir(const ATexto: String);
published
property PrinterName: String read FPrinterName write FPrinterName;
end;
const
UUID = '{00001101-0000-1000-8000-00805F9B34FB}';
implementation
function TBluetoothPrinter.GetDeviceByName(ANomeDevice: String): TBluetoothDevice;
var
lDevice: TBluetoothDevice;
begin
Result := nil;
for lDevice in Self.PairedDevices do
begin
if lDevice.DeviceName = ANomeDevice then
Result := lDevice;
end;
end;
function TBluetoothPrinter.ConectarImpressora(ANomeDevice: String): Boolean;
var
lDevice: TBluetoothDevice;
begin
lDevice := GetDeviceByName(ANomeDevice);
if lDevice <> nil then
begin
FSocket := lDevice.CreateClientSocket(StringToGUID(UUID), False);
if FSocket <> nil then
begin
FSocket.Connect;
Result := FSocket.Connected
end
else
raise EBluetoothPrinter.Create('Ocorreu um erro ao obter socket de conexão bluetooth.');
end
else
raise EBluetoothPrinter.CreateFmt('Impressora "%s" não encontrada ou não pareada.', [ANomeDevice]);
end;
procedure TBluetoothPrinter.Imprimir(const ATexto: String);
begin
if ConectarImpressora(Self.PrinterName) then
begin
try
FSocket.SendData(TEncoding.UTF8.GetBytes(ATexto));
finally
FSocket.Close;
end;
end
else
raise EBluetoothPrinter.Create('Não foi possível conectar a impressora.');
end;
end.