【问题标题】:Sending data to USB printer in Delphi在 Delphi 中将数据发送到 USB 打印机
【发布时间】:2013-06-05 20:54:18
【问题描述】:

如何使用 Delphi 向 USB 端口连接的打印机发送文本命令?

我有一台 Zebra TLP2844 打印机,并希望对其进行直接通信。

【问题讨论】:

    标签: delphi usb vcl zebra-printers


    【解决方案1】:

    您使用 WinAPI 函数 Escape,将 Printer.Canvas.Handle 作为第一个参数传递给它,并将 PASSTHROUGH 作为 nEscape 参数传递给它。

    var
      YourCommand: String;
    begin
      YourComamnd := 'Your command here';
    
      if Escape(Printer.Canvas.Handle, 
                    PASSTHROUGH, 
                    Length(YourCommand), 
                    PChar(YourCommand), 
                    nil) <> 0 then
        // Handle return value (listed in docs link above)
      else
        // send next command 
    

    EscapeWindows 单元中定义。请注意,您必须在使用此功能之前调用Printer.StartPage,以便准备打印机驱动程序以接收内容。

    【讨论】:

    • 在 Delphi XE3 Printer.Canvas.Handle 将是 Printer.Canvas.BufferHandle?
    • 在VCL.Printers中是Printer.Canvas.Handle,也就是打印机的HDC。我在任何地方的文档中都没有看到Canvas.BufferHandle。如果您不使用 VCL,您应该这样说并在您的问题中添加适当的 FireMonkey 标签。 :-) 刚刚找到BufferHandle,没有;那是THandleEscape 正在寻找设备上下文的句柄 (HDC)。
    • 查看FMX.Printer.Win.pas 的源代码,为TPrinter 定义了一个Canvas。我不知道它是否有可用的与 Windows 兼容的 HDC(我对此表示怀疑),但您也许可以使用 Printer.Handle,它说它是一个 HDC。我不知道它是否适用于Escape,因为我还没有尝试过。
    • 当我试图查看哪个单元定义了 TPrinter 类时,我被指向 FMX 的帮助弄糊涂了。我确实需要 VCL。谢谢。
    • 我这里还有一些问题。无法将其放入评论中,也无法查看如何编辑问题以添加该信息。所以我就同一主题发布了一个新问题:stackoverflow.com/questions/16969323/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多