【发布时间】:2012-03-22 07:07:01
【问题描述】:
我这里有一个问题,我正在尝试将磁条数据编码到 Fargo DTC400 打印机,在规范中它说我需要从例如记事本、写字板等发送以下字符串命令:
~1%TRACK NUMBER ONE?
~2;123456789?
~3;123456789?
此示例对轨道 1 中的字符串以及轨道 2 和 3 中的数字 123456789 进行编码。这适用于 Notepad.exe。
编辑: 我使用的当前 delphi 代码在另一台打印机上工作:
procedure SendQuote(MyCommand : AnsiString);
var
PTBlock : TPassThrough;
begin
PTBlock.nLen := Length(MyCommand);
StrPCopy(@PTBlock.SData, MyCommand);
Escape(printer.handle, PASSTHROUGH, 0, @PTBlock, nil);
end;
当我试图从我自己的应用程序中编码这个字符串时,我遇到了麻烦,似乎打印机完全忽略了我的命令,当我选择打印到文件时,我可以读取二进制数据并在打印的文件中查看我的字符串,当我尝试从示例 notepad.exe 打印到文件时,我得到的只是 rubish 二进制数据,根本找不到我的字符串......
所以我想知道记事本如何发送这个我不知道的字符串命令?
希望有人能阐明这一点,因为我一直渴望在我的应用程序中实现 fargo 支持很长时间。
谢谢
更新。 下面的代码是古老的,但它可以完成这项工作,但是还有其他方法可以与上面的 Passthrough 代码一起使用吗?
var
POutput: TextFile;
k: Integer;
begin
with TPrintDialog.Create(self) do
try
if Execute then
begin
AssignPrn(POutput);
Rewrite(POutput);
Writeln(POutput,'~1%TESTENCODER?');
Writeln(POutput,'~2;123456789?');
Writeln(POutput,'~2;987654321?');
CloseFile(POutput);
end;
finally
free;
end
end;
【问题讨论】:
-
这是一个编程问题网站。请告诉我你在 Delphi 代码中做了什么。你怎么打印?不要让我们猜测你做错了什么。向我们展示您的打印方式。我会像这样测试写入原始打印机端口。有关原始打印信息,请参阅此链接。 efg2.com/Lab/Library/Delphi/Printing/index.html
-
是的,我忘记粘贴我使用的代码了,抱歉 :) 我现在更新了
-
使用
TextFile输出有什么问题?似乎是一个清晰而简单的解决方案。 -
TPPassthrough的实现到底是干什么的。你正在展示一些高水平的东西,这里没有人可以告诉你任何事情。你有源代码。跟随它(一步),直到你找到一个 win32 api 调用,或者一些足够低的东西,人们可以帮助你更好地理解它。现在,显示您的一个类调用您的另一个类(TPassthrough - 那是什么?)是无法回答的。
-
@LU RD,如果不是为了一件事,我会使用文本文件。我还需要将位图发送到打印机,并且将其组合起来我认为效果不佳,我的应用程序有两个选项,仅编码和与位图一起编码。单一编码使用文本文件没有问题,但与位图一起我必须与 begindoc 和 enddoc 结合
标签: delphi binary-data magnetic-cards