使用便携式打印机通过蓝牙与 Delphi XE7 连接

2023-12-20

我正在尝试与世宇LK-P32通过蓝牙打印机。为此,我正在使用德尔福XE7。我用 Delphi 做了一些例子,但没有成功。我将配对的打印机放在平板电脑上,即使这样我也无法连续打印。

当我打印某些内容时,必须重新启动应用程序,以便我可以再次打印某些内容。下面是我的消息来源。

有人可以帮助我吗?支持这个问题吗?我尝试其他技术的时间很短。

启动与打印机通信的方法

procedure TForm2.ButtonClickStart(Sender: TObject);
var
  Msg, Texto: string;
  I, B: Integer;
  BluetoothAdapter: TBluetoothAdapter;
  ListaDeAparelhosPareados: TBluetoothDeviceList;
  LServices: TBluetoothServiceList;
begin
  try
    Memo1.Lines.Add('Ponto 1');
    FBluetoothManager := TBluetoothManager.Current;
    if FBluetoothManager = nil then
      Memo1.Lines.Add('FBluetoothManager esta nulo');

    Memo1.Lines.Add('Ponto 2');
    BluetoothAdapter := FBluetoothManager.CurrentAdapter;
    if BluetoothAdapter = nil then
    Memo1.Lines.Add('BluetoothAdapter esta nulo');

    ListaDeAparelhosPareados := BluetoothAdapter.PairedDevices;
    Memo1.Lines.Add('Ponto 3');
    if ListaDeAparelhosPareados = nil then
      Memo1.Lines.Add('ListaDeAparelhosPareados esta nulo');

    for I := 0 to ListaDeAparelhosPareados.Count - 1 do
    begin
      LDevice := ListaDeAparelhosPareados[I] as TBluetoothDevice;
      if LDevice.IsPaired then
      begin
        LServices := LDevice.GetServices;
        for B := 0 to LServices.Count - 1 do
        begin
          ServiceGUI := GUIDToString(LServices[B].UUID);
          Guid := LServices[B].UUID;
          ServiceName := LServices[B].Name;
          Memo1.Lines.Add(LServices[B].Name + ' --> ' + ServiceGUI);
          Memo1.GoToTextEnd;
        end;
      end;
    end;
  except
   on E: Exception do
   begin
     Msg := E.Message;
     Memo1.Lines.Add('Erro ao Conectar na Impressora: ' + Msg);
     Memo1.GoToTextEnd;
   end;
 end;
end;

将文本发送到打印机的方法

procedure TForm2.ButtonClickSendText(Sender: TObject);
var
  FSocket: TBluetoothSocket;
  ToSend: TBytes;
  Msg, Texto: String;
begin
  try
    Memo1.Lines.Add('Aparelho pareado:' + BoolToStr(LDevice.IsPaired));

    Memo1.Lines.Add('Dados do Guid:' + GUIDToString(Guid));
    FSocket := LDevice.CreateClientSocket(Guid, true);
    if FSocket = nil then
    Memo1.Lines.Add('FSocket nulo');

    Memo1.Lines.Add('Criou Bluetooth Cliente.');
    Memo1.GoToTextEnd;
    if FSocket <> nil then
    begin
      // FSocket.Connect;
      FSocket.Connect;
      Memo1.Lines.Add('Criou socket cliente com o ServerSocket');
      Texto := #27 + '|cA' + 'Teste' + #13#10;
      ToSend := TEncoding.UTF8.GetBytes(Texto);
      FSocket.SendData(ToSend);
      Memo1.Lines.Add('Enviou ' + Texto + ' para a impressora.');
    end
    else
    begin
      Memo1.Lines.Add('FSocket nulo.');
    end;

  except
    on E: Exception do
    begin
      Msg := E.Message;
      Memo1.Lines.Add('Erro ao Conectar na Impressora: ' + Msg);
      Memo1.GoToTextEnd;
    end;
  end;
end; 

我重新创建了你的程序,我遇到了同样的问题,但是更改了你的代码,它现在对我来说工作得很好。

问题就在这里

if FSocket <> nil then
begin
  // FSocket.Connect;
  FSocket.Connect;
  Memo1.Lines.Add('Criou socket cliente com o ServerSocket');
  Texto := #27 + '|cA' + 'Teste' + #13#10;
  ToSend := TEncoding.UTF8.GetBytes(Texto);
  FSocket.SendData(ToSend);
  Memo1.Lines.Add('Enviou ' + Texto + ' para a impressora.');
end

首先,我建议将 Fsocket 添加为私有属性,并仅创建一个 fsocket 对象。所以,你的代码将更改为

if (Assigned(LDevice)) And (Assigned(FSocket))
then Begin
     if Not FSocket.Connected
     then FSocket.Connect
     End
Else Begin
     FSocket := LDevice.CreateClientSocket(Guid, True);
     Memo1.Lines.Add('Device Socked created to '+LDevice.DeviceName);
     FSocket.Connect;
     End;

连接后,您可以调用 TTimer 发送您想要的内容,或者创建一个方法检查 Fsocket 是否已连接。

if Assigned(FSocket)
then Begin
     if FSocket.Connected
     then Begin
          Texto := #27 + '|cA' + 'Teste' + #13#10;
          ToSend := TEncoding.UTF8.GetBytes(Texto);
          FSocket.SendData(ToSend);

          Sleep(100);
          End;
     End;

此外,您可以在两个命令之间添加睡眠,以确保打印机接收并执行数据。

就我而言,我使用了 Arduino 宽度蓝牙 hc-06 模块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用便携式打印机通过蓝牙与 Delphi XE7 连接 的相关文章

  • 如何添加资源并使用它们

    在我的应用程序中 我想添加 2 个图像作为资源 我想使用这些图像 当我在应用程序中单击 是 按钮时 第一张图像将被设置为壁纸 当我在应用程序中单击 否 按钮时 第二张图像将被设置为桌面壁纸 提前致谢 regards 最简单的方法是创建一个文
  • python中的蓝牙编程[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有好的Python 蓝牙编程库 我尝试了 PyBluez 但 Eclipse 无法识别模块蓝牙 谁
  • 执行 hciconfig hci0 重置时出现无效参数问题

    我在 5 0 以上的内核中观察到这个问题 并且控制器已启用扩展广告 我目前已经使用 bluez 5 50 进行了测试 这个问题与我可以从代码中得到的 MGMT ADV FLAG SEC MASK 标志有关 但是这个标志何时以及如何修改是我不
  • 加载 Jpg/Gif/Bitmap 并转换为 Bitmap

    我必须从 XML 文件加载图像 XML 文件中没有关于图像是否为 JPG GIF BMP 的信息 加载图像后 我需要将其转换为位图 有谁知道如何在不知道实际文件格式的情况下将图像转换为位图 我正在使用 Delphi 2007 2009 谢谢
  • Objective C 到 Swift 代码的转换,似乎无法在 Swift 中正确处理字节

    我正在开发一个简单的 Swift 蓝牙心率监测器 iOS 应用程序 我发现this http www raywenderlich com 52080 introduction core bluetooth building heart ra
  • delphi 变量值在循环中的线程中发生变化

    我的代码正在运行一个 for 循环来处理一些数据 如下所示 procedure printValue Value Integer begin TThread Synchronize TThread Current procedure beg
  • Firemonkey 编辑/组合自动完成/打字时自动建议

    实施方式是什么Autocomplete or Autosuggest适用于 Windows Android 平台以及 MacOS 和 iOS 的 Delphi Firemonkey Example 当用户在 Google 搜索框中输入文本时
  • 如何在 Delphi REST 中发布内容类型为“multipart/form-data”的数据?

    我正在尝试使用 REST API 发送请求multipart form data作为内容类型 我总是收到 HTTP 1 1 500 Internal Error 作为响应 我尝试向需要的方法发送请求application x www for
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • iOS 7 Core 蓝牙外设在后台运行

    我想要的是我的 iOS 设备始终宣传蓝牙 LE 服务 即使应用程序未运行 这样我就可以让另一台 iOS 设备扫描并找到它 我在这里遵循了苹果的后台说明 https developer apple com library ios docume
  • 德尔福数据结构

    我可能需要在 Delphi 中做一个项目 并且是该领域的初学者 目前 我正在网上搜索资源 但由于资源站点太少而感到困惑 首先 你能给我一些好的网站 其中包含我迄今为止错过的 Delphi 资源吗 我也在 Delphi 中搜索数据结构 想知道
  • 我如何在Delphi中处理事件?

    例如 我有一个程序 在单击 Button1 后执行某些操作 如果没有 Button1Click 中的代码 如何处理按钮的 onclick 事件 我需要为 Button1 动态添加事件 unit Unit1 interface uses Wi
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • 以编程方式重新启动 Delphi 应用程序

    应该不可能运行我的应用程序的多个实例 因此项目源码包含 CreateMutex nil False PChar ID if GetLastError ERROR ALREADY EXISTS then Halt 现在我想以编程方式重新启动我
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 不断断点?如何去除它们?

    我下载了一个用Delphi 2009制作的项目 这也是我使用的 但是有一个断点我无法删除 如果我尝试删除它 它会在程序执行后再次执行 我在其他调试器中遇到了这样的事情 称为硬件断点 但这并不重要 如何删除断点 EDIT Article ht
  • 具有 csOwnerDrawFixed 样式的组合框如何表现得像 csDropDown 样式?

    我正在使用一个组合框 http docwiki embarcadero com Libraries en Vcl StdCtrls TComboBoxstyle 属性设置为的组件csOwnerDrawFixed 我实现了绘图项一切工作正常
  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba

随机推荐

  • 跟踪 aws lambda/cloudwatch 日志

    了解如何访问 lambda 日志另一个答案 https stackoverflow com questions 47846959 how do you look at console log output of the amazon lam
  • 可以让 jqGrid 搜索框留在页面上吗?

    现在 我必须单击 jqGrid 搜索图标才能弹出搜索框 我想做的是始终在网格上方打开搜索框 而不是弹出窗口 我在他们的演示中没有看到任何内容 但我希望有人已经做到了或知道如何做到 做你需要的最简单的方法是 var grid list prm
  • 将 Woo Commerce 下拉菜单转换为单选按钮

    我在将变体下拉列表转换为支持 woocommerce 的网站的单选按钮时遇到问题 我已经尝试找到答案here https stackoverflow com questions 11819604 dropdown converted to
  • Android BLE Gatt 特性 WRITE_TYPE_NO_RESPONSE 不起作用

    我开发了一个连接到 CC2540 BLE 外设的 Android 应用程序 当我执行类型为无响应 WRITE TYPE NO RESPONSE 的特征写入时 我仍然会在应用程序级别收到 onCharacteristicWrite 回调 这种
  • 转换到 Swift 3 的困难

    从 Swift 2 转换到 Swift 3 后 即使在转换编辑 gt 转换 gt 到当前的 swift 语法之后 我收到很多错误 尤其 在我下载此 beta Xcode 8 0 并转换为 Swift 3 之前 我的项目总共显示了 90 个错
  • 删除大标题 UINavigationBar 中 UISearchController 顶部的 1px 行

    我正在从大风格的视图过渡UINavigationItem进入具有大风格的视图UINavigationItem and a UISearchController 我已经自定义了背景颜色UINavigationBar 由于某种原因 之间有 1p
  • PsExec 仅适用于“runas /netonly”,不适用于 -u 和 -p 参数

    我的意思是说 If I run runas netonly user computername username cmd 输入本地管理员帐户 用户名 的密码 然后输入psexec computername cmd 我现在有了一个工作 she
  • 获取脚本标签的数据属性?

    假设我有以下脚本标签 在那之内embed js文件 我怎样才能得到它的值data id属性 我正在努力保持embed js文件尽可能轻 所以理想情况下不需要使用某种 JavaScript 库 对于支持 html5 的现代浏览器 您可以使用d
  • 我可以多次使用

    标签,一个用于桌面,另一个用于移动吗?

    我正在使用 bootstrap 3 html 5 我的问题是 我可以使用 h1 在同一页面中多次标记 我正在使用一个 h1 对于桌面和其他 h1 对于移动设备 搜索问题后我有点困惑 任何人都可以正确地建议我正确的方法吗 我的代码如下 这些代

  • 天蓝色表存储中的事务

    假设我有 using TransactionScope scope new TransactionScope if IndexExists index RowKey DeleteIndex index RowKey deletes usin
  • iOS:如何写入项目中特定目录的文件?

    我正在尝试将我在应用程序中收集的一些字符串输出到文本文件中 文本文件将始终存在于我的项目中 如下所示 我试图用新的 多行 字符串覆盖文件中的所有内容 func writeFile let theFile FileHandle FileHan
  • 使用 javascript 执行器为 selenium webdriver ruby​​ 绑定脚本启用禁用字段

    我正在 Selenium Webdriver 脚本中编写以下 Ruby 代码 以通过 Javascript 执行器启用 UI 上的禁用字段 browser execute script browser find element xpath
  • 三个彼此相邻的 DIV,具有流畅的水平宽度

    我需要知道如何将所有三个 div 与所有不同的背景图像对齐 中间的 div 需要为 989px 左 div 和右 div 的宽度并不重要 简而言之 http jsfiddle net hobobne qyGC5 http jsfiddle
  • 在 Mobile Safari 中保持 WebSocket 处于活动状态

    一旦屏幕锁定 是否可以在 Mobile Safari 中保持 html 5 网页 WebSocket 连接打开 我想向用户发送全天的持续更新 而他们的屏幕必须始终解锁才能接收这些通知 这似乎很愚蠢 还有其他选择吗 我认为当浏览器处于后台或屏
  • Java BufferedReader 返回文本文件的顶部?

    我目前有 2BufferedReaders 在同一文本文件上初始化 当我读完第一个文本文件后BufferedReader 我使用第二个从顶部再次遍历文件 需要多次遍历同一文件 我知道关于reset 但需要先调用mark and mark 需
  • 如何在mongo中插入带有日期的文档?

    我们正在尝试插入一个以当前日期作为字段的文档 我们正在使用 mongodb 的 eclipse 插件用 java 编写 我们想要执行Date mongo 命令从 mongo 获取日期 而不是从 java 获取日期 我怎样才能执行这个 mon
  • 如何将 C 函数移动到单独的文件中?

    我正在开始 C 编程 我目前有一个包含很多函数的大文件 我想将这些函数移至单独的文件中 以便代码更易于阅读 但是 我似乎无法弄清楚如何正确包含 编译 并且在我找到的任何在线教程中都找不到示例 这是一个简化的示例 include
  • CSS 字体未在 IE9 中加载

    我遇到了 font face 字体无法在 IE9 中加载的问题 IE8 及更低版本运行完美 就像我尝试过的所有其他浏览器一样 这是我的 CSS 字体松鼠语法 font face font family ssmicon src url ssm
  • Log4Net - 我可以在 Config 中拥有自定义部分名称吗

    我需要在配置部分使用除 log4net 之外的部分名称 我知道这是我们通常使用的 section type section 但我需要有一个这样的部分 section type section 我正在开发一个 sitecore 网站 它有自己
  • 使用便携式打印机通过蓝牙与 Delphi XE7 连接

    我正在尝试与世宇LK P32通过蓝牙打印机 为此 我正在使用德尔福XE7 我用 Delphi 做了一些例子 但没有成功 我将配对的打印机放在平板电脑上 即使这样我也无法连续打印 当我打印某些内容时 必须重新启动应用程序 以便我可以再次打印某