2009-04-27 47 views
1

Delphi(BDS2006)のOPOSドライバを使用してPoint of Sale(POS)プリンタを開こうとしていますが、プリンタのステータスを確認する手がかりはありません。デルファイでOPOSドライバを使用してプリンタのメッセージを確認する

プリンタからCheck PaperPaper Jamのようなメッセージを確認するにはどうすればよいですか?

+1

この質問に対する回答は役に立ちましたか? http://stackoverflow.com/questions/308588/where-can-i-find-a-esc-pos-epson-barcode-test-program –

答えて

6

私は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; 
+0

+1、非常に便利です - ありがとう!誰かがこのコードを動作させようとする場合には、uses節に "WinSpool"を追加する必要があります。 – robsoft

+0

ここにはZebraラベルプリンタがあります。これは、文字セットとエンコーディングを選択するコマンド( '^ CI')をサポートしています。しかし、UTF-16 BEとLEをサポートしていても、他のすべてのコマンドはASCIIのままであるため、Delphi 2009+を使用している場合、UTF-8エンコーディングでIMHOを最高に動作させます。 UTF-8でエンコードされた文字列で送信されるデータを構築するのは、はるかに簡単です。ああ、+1 BTW。 – mghie

0

あなたはここからActiveXコントロールを使用しています:http://monroecs.com/oposccos.htm?エラーステータスのイベントがあります。

+0

こんにちは、私は現在、このサイトhttp://monroecs.com/oposccos.htmのアップデートを提供するために解決した解決策Marshall Frymanを実装しています。ダウンロードしたものはすべて壊れています... 1.12.000 CCO Runtime(Wiseインストール)+ 1.12.000 CCOのソースコードとデータファイル(ZIPファイル)はどちらも破損しているようです...間違ったものを取得していますか? –

0

まず、お使いのデバイス用の適切なサポートソフトウェアをインストールする必要があります。このソフトウェアは、おそらく製造元のWebサイトからダウンロードする必要があります。ブランド名は異なる場合がありますが、領収書プリンタのような多くのデバイスに標準的なハードウェア(EPSON TX-88IIIなど)が含まれることがあることに注意してください。

サポートソフトウェアには通常、ドライバ、設定ツール、およびドライバの使用方法のプログラミング例が含まれています。次の手順が正しく完了していることを確認してください:ドライバーの

  1. インストール、設定ツールは(デバイスが正しく右のケーブルを使用して接続されている

  2. をやっている私がいるので、正しいシリアルケーブルを見つけられない問題がありましたそれらの多くの異なる種類)

  3. は、お使いのデバイスがドライバを介して(コンフィグレーションソフトウェアによって認識される)とうまく通信している

    、少なくともそれは一部の機能に応答があります

  4. ドライバとともにインストールされたActiveXコントロールを使用します。それはドライバと同様の名前を持つ必要があります。

上記の手順を実行すると、使用可能なすべての機能、ステータスプロパティ、イベント(紙面など)が表示されます。

関連する問題