delphi 蓝牙连接打印机演示  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 蓝牙连接打印机演示


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.

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.036259889602661 seconds