gpt4 book ai didi

delphi - 检测打印纸的状态

转载 作者:行者123 更新时间:2023-12-03 15:55:12 29 4
gpt4 key购买 nike

我需要从打印机获取纸张状态信息。我有一个 esc/pos 命令列表。我正在尝试使用转义功能发送这些命令

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162701%28v=vs.85%29.aspx

这是我的代码

type
TPrnBuffRec = record
bufflength: Word;
Buff_1: array[0..255] of Char;
end;

procedure TFTestStampa.SpeedButton2Click(Sender: TObject);
var
Buff: TPrnBuffRec;
BuffOut: TPrnBuffRec;
TestInt: Integer;
cmd : string;
begin
printer.BeginDoc;

try
TestInt := PassThrough;
if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TESTINT),
@testint, nil) > 0 then
begin
cmd := chr(10) + chr(04) + '4';
StrPCopy(Buff.Buff_1, cmd);
Buff.bufflength := StrLen(Buff.Buff_1);
Escape(Printer.Canvas.Handle, Passthrough, 0, @buff,
@buffOut);

ShowMessage( conver(strPas(buffOut.Buff_1)) );
end

finally
printer.EndDoc;

end;


function TFTestStampa.Conver(s: string): String;
var
i: Byte;
t : String;
begin
t := '';
for i := 1 to Length(s) do
t := t + IntToHex(Ord(s[i]), 2) + ' ';
Result := t;
end;

问题是使用不同的命令我总是得到相同的字符串....你能给我一个最后一个参数不为空的转义函数的例子吗?获取论文状态的替代方法?

最佳答案

我想您使用的是上面的 Delphi 2009 并且您使用了 this source对于您的示例,因此您的问题可能是由 Unicode 参数引起的。在 Delphi 2009 版本中,string 类型定义为 UnicodeString,而在下面的 Delphi 2009 中定义为 AnsiString,同样也代表 Char 在 Delphi 2009 及以上版本中为 WideChar,在以下版本中为 AnsiChar

如果是这样,那么我认为您至少在缓冲区数据长度方面存在问题,因为 Char = WideChar 占用 2 个字节,而您使用的是 StrLen返回无法对应于字符数 * 2 字节数据大小的字符数的函数。

我希望这能解决您的问题,但我无法验证它,因为我没有您的打印机:)

type
TPrinterData = record
DataLength: Word;
Data: array [0..255] of AnsiChar; // let's use 1 byte long AnsiChar
end;

function Convert(const S: AnsiString): string;
var
I: Integer; // 32-bit integer is more efficient than 8-bit byte type
T: string; // here we keep the native string data type
begin
T := '';
for I := 1 to Length(S) do
T := T + IntToHex(Ord(S[I]), 2) + ' ';
Result := T;
end;

procedure TFTestStampa.SpeedButton2Click(Sender: TObject);
var
TestInt: Integer;
Command: AnsiString;
BufferIn: TPrinterData;
BufferOut: TPrinterData;
begin
Printer.BeginDoc;

try
TestInt := PASSTHROUGH;

if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TestInt), @TestInt, nil) > 0 then
begin
Command := Chr(10) + Chr(04) + '4';
StrPCopy(BufferIn.Data, Command);
BufferIn.DataLength := StrLen(Command);
FillChar(BufferOut.Data, Length(BufferOut.Data), #0);
BufferOut.DataLength := 0;
Escape(Printer.Canvas.Handle, PASSTHROUGH, 0, @BufferIn, @BufferOut);

ShowMessage(Convert(StrPas(BufferOut.Data)));
end

finally
Printer.EndDoc;
end;
end;

关于delphi - 检测打印纸的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585084/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com