ChinaCock打印控件介紹-TCCFujitsuPrinter實現藍牙針式打印


項目中遇到,要藍牙針式打印機,用手機打印表單。感謝專家,對廠家提供的SDK進行了封裝,實現利用Delphi開發出這一功能。

現在來看看,如何利用這一控件實現打印過程:

    procedure startScanDevices;
    procedure stopScanDevices;
    function getScanedDevices: TList<TCCFujitsuPrinterDevice>;
    function openConnection(ADevice: TCCFujitsuPrinterDevice): Integer;
    procedure printPDFPaper(pdfPath: String; sX: Integer; mode: Integer);

TCCFujitsuPrinter提供了上面幾個方法,利用startScanDevices掃描藍牙打印機,

property Devices: TList<TCCFujitsuPrinterDevice> read FDevices;

然后我們用stopScanDevices停止掃描,調用getScanDevices,將掃描到的設備存到Devices。

接下來就是利用openConnection聯接打印機,成功返回1,然后調用printPDFPaper進行打印。

下面,是實際項目中的查詢打印機的代碼,利用kbmMW Scheduler實現。

procedure TPrintFrame.ScanPrinter;
begin

  if IsConnectPrinter=1 then
    Exit;
  AniIndicator1.Visible:=True;
  AniIndicator1.Enabled:=True;
  Printer.startScanDevices;//查找打印機
  Scheduler.Schedule(
                     procedure (const AScheduledEvent:IkbmMWScheduledEvent)
                     var
                        i:Integer;
                     begin
                          CCButton1.Text:='正在查找打印機...';
                          Printer.getScanedDevices;//取得掃到的設備
                          for I := 0 to Printer.Devices.Count-1 do
                          begin
                               if (Printer.Devices[i].DeviceName='藍牙打印機') and (Printer.Devices[i].Paired) then//如果找到指定的打印機並已經配對,中止掃描並返回設備號
                               begin
                                    DeviceIndex:=i;
                                    printer.stopScanDevices;
                                    IsConnectPrinter:=printer.openConnection(Printer.Devices[i]);
                                    sleep(500);

                                    AniIndicator1.Visible:=False;
                                    AniIndicator1.Enabled:=False;

                                    CCButton1.Text:='開始打印';
                                    AScheduledEvent.Activate(False);//中止線程
                                    Break;
                               end;
                          end;
                     end)
            .Synchronized//主線程中執行
            .NamedAs('ScanPrinter')
            .EverySecond(2)//每兩秒檢查一次掃到的設備
            .Activate;
end;

 找到了打印機,就可以實現打印了:

procedure TPrintFrame.CCButton1Click(Sender: TObject);
begin

  if DeviceIndex=-1 then//沒找到打印機直接返回
     Exit;

  if IsConnectPrinter<>1 then//沒聯接打印機則執行聯接打印機
     IsConnectPrinter:=Printer.openConnection(Printer.Devices[DeviceIndex]);

  Scheduler.Run(procedure
                begin
                     Printer.printPDFPaper(FInfo.Data['FileName'].AsString,0,2);
                end)
            .Activate;

end;

上面代碼,同樣利用kbmMW Scheduler實現在線程中打印。

最后,代碼實現完成,發布時要帶幾個SO文件:

這個控件在即將發布的新版本中集成,如果項目中有需要,可以聯系作者購買。

開發的過程中遇到一個問題,就是必須在Release下才能正常打印!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM