Delphi(BDS2006)のOPOSドライバを使用してPoint of Sale(POS)プリンタを開こうとしていますが、プリンタのステータスを確認する手がかりはありません。デルファイでOPOSドライバを使用してプリンタのメッセージを確認する
プリンタからCheck Paper
とPaper Jam
のようなメッセージを確認するにはどうすればよいですか?
Delphi(BDS2006)のOPOSドライバを使用してPoint of Sale(POS)プリンタを開こうとしていますが、プリンタのステータスを確認する手がかりはありません。デルファイでOPOSドライバを使用してプリンタのメッセージを確認する
プリンタからCheck Paper
とPaper Jam
のようなメッセージを確認するにはどうすればよいですか?
私はOPOSドライバを使用していませんが、現金引き出しに接続されたEpsonレシートプリンタのPOSドライバでいくつかの作業を行っています。私が発見したのは、プリンタがWindowsにインストールされている場合は、プリンタに直接接続して、何でもできるようにすることです。
プリンタの速度が遅いのは、Windowsのグラフィカルフォント機能を使用しているためです。プリンタを直接開くと、モードがRAWに設定され、古いスタイルのドットマトリックスのようにテキストが出力されます。キャッシュドロワーを開いてキックするには、印刷するかのように特定の制御コードを送信するだけです。プリンターは印刷前にコードを傍受し、引き出しを開いたままにします。
ところで、私はこれがどのようにUnicodeで動作するかわかりません。私は実際にはASCIIデータで作業していました。国際市場向けに設計されたバリアントが異なる場合があります。ここで
は、私はそれを動作させるために使用したコードは(VxMsgBoxがメッセージボックスにちょうどカバーである)です。
{***************************************************************************}
{** PrintDirect2Printer **}
{***************************************************************************}
procedure PrintDirect2Printer(PrinterName, Data:pchar; dwByteCount:DWORD);
var PrinterHandle : THandle;
DocInfo : TDocInfo1;
dwJob : DWORD;
dwBytesWritten : DWORD;
begin
if not OpenPrinter(PrinterName, PrinterHandle, nil) then exit; //failed to open printer, abort
DocInfo.pDocName := 'Direct 2 Printer';
DocInfo.pOutputFile := nil;
DocInfo.pDataType := 'RAW';
dwJob:=StartDocPrinter(PrinterHandle, 1, @DocInfo);
if dwJob=0 then //failed to start a document
begin
ClosePrinter(PrinterHandle);
exit;
end;
if not StartPagePrinter(PrinterHandle) then
begin
EndDocPrinter(PrinterHandle);
ClosePrinter(PrinterHandle);
exit;
end;
if not WritePrinter(PrinterHandle, Data, dwByteCount, dwBytesWritten) then
begin
EndPagePrinter(PrinterHandle);
EndDocPrinter(PrinterHandle);
ClosePrinter(PrinterHandle);
exit;
end;
if not EndPagePrinter(PrinterHandle) then
begin
EndDocPrinter(PrinterHandle);
ClosePrinter(PrinterHandle);
exit;
end;
if not EndDocPrinter(PrinterHandle) then
begin
ClosePrinter(PrinterHandle);
exit;
end;
ClosePrinter(PrinterHandle);
if dwBytesWritten<>dwByteCount then
VxMsgBox('Print Direct To Printer failed.', 'Printer Error', mb_Ok);
end;
{***************************************************************************}
{** OpenPrintDirect2Printer **}
{***************************************************************************}
function OpenPrintDirect2Printer(PrinterName, DocName:pchar; var PrinterHandle:THandle):boolean;
var DocInfo : TDocInfo1;
dwJob : DWORD;
begin
result:=false;
if not OpenPrinter(PrinterName, PrinterHandle, nil) then exit; //failed to open printer, abort
DocInfo.pDocName := DocName;
DocInfo.pOutputFile := nil;
DocInfo.pDataType := 'RAW';
dwJob:=StartDocPrinter(PrinterHandle, 1, @DocInfo);
if dwJob=0 then //failed to start a document
begin
ClosePrinter(PrinterHandle);
exit;
end;
if not StartPagePrinter(PrinterHandle) then
begin
EndDocPrinter(PrinterHandle);
ClosePrinter(PrinterHandle);
exit;
end;
result:=true;
end;
{***************************************************************************}
{** WritePrintDirect2Printer **}
{***************************************************************************}
function WritePrintDirect2Printer(PrinterHandle:THandle; Data:pchar; dwByteCount:DWORD):boolean;
var dwBytesWritten : DWORD;
begin
result:=true;
if not WritePrinter(PrinterHandle, Data, dwByteCount, dwBytesWritten) then
result:=false;
if dwBytesWritten<>dwByteCount then
VxMsgBox('WritePrintDirect2Printer byte check failed.', 'Printer Error', mb_Ok);
end;
{***************************************************************************}
{** ClosePrintDirect2Printer **}
{***************************************************************************}
procedure ClosePrintDirect2Printer(var PrinterHandle:THandle);
begin
if not EndPagePrinter(PrinterHandle) then
begin
EndDocPrinter(PrinterHandle);
ClosePrinter(PrinterHandle);
PrinterHandle:=0;
exit;
end;
if not EndDocPrinter(PrinterHandle) then
begin
ClosePrinter(PrinterHandle);
PrinterHandle:=0;
exit;
end;
ClosePrinter(PrinterHandle);
PrinterHandle:=0;
end;
+1、非常に便利です - ありがとう!誰かがこのコードを動作させようとする場合には、uses節に "WinSpool"を追加する必要があります。 – robsoft
ここにはZebraラベルプリンタがあります。これは、文字セットとエンコーディングを選択するコマンド( '^ CI')をサポートしています。しかし、UTF-16 BEとLEをサポートしていても、他のすべてのコマンドはASCIIのままであるため、Delphi 2009+を使用している場合、UTF-8エンコーディングでIMHOを最高に動作させます。 UTF-8でエンコードされた文字列で送信されるデータを構築するのは、はるかに簡単です。ああ、+1 BTW。 – mghie
あなたはここからActiveXコントロールを使用しています:http://monroecs.com/oposccos.htm?エラーステータスのイベントがあります。
こんにちは、私は現在、このサイトhttp://monroecs.com/oposccos.htmのアップデートを提供するために解決した解決策Marshall Frymanを実装しています。ダウンロードしたものはすべて壊れています... 1.12.000 CCO Runtime(Wiseインストール)+ 1.12.000 CCOのソースコードとデータファイル(ZIPファイル)はどちらも破損しているようです...間違ったものを取得していますか? –
まず、お使いのデバイス用の適切なサポートソフトウェアをインストールする必要があります。このソフトウェアは、おそらく製造元のWebサイトからダウンロードする必要があります。ブランド名は異なる場合がありますが、領収書プリンタのような多くのデバイスに標準的なハードウェア(EPSON TX-88IIIなど)が含まれることがあることに注意してください。
サポートソフトウェアには通常、ドライバ、設定ツール、およびドライバの使用方法のプログラミング例が含まれています。次の手順が正しく完了していることを確認してください:ドライバーの
インストール、設定ツールは(デバイスが正しく右のケーブルを使用して接続されている
をやっている私がいるので、正しいシリアルケーブルを見つけられない問題がありましたそれらの多くの異なる種類)
、少なくともそれは一部の機能に応答があります
ドライバとともにインストールされたActiveXコントロールを使用します。それはドライバと同様の名前を持つ必要があります。
上記の手順を実行すると、使用可能なすべての機能、ステータスプロパティ、イベント(紙面など)が表示されます。
この質問に対する回答は役に立ちましたか? http://stackoverflow.com/questions/308588/where-can-i-find-a-esc-pos-epson-barcode-test-program –