本文整理自网络,侵删。
unit Main;interfaceuses 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;implementationuses 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.pasunit Bluetooth.Printer;interfaceuses 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}';implementationfunction 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.
相关阅读 >>
Delphi xe(indy10)tidbytes转ansistring的实现
更多相关阅读请进入《Delphi》频道 >>