PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
21706 05/01/19 14:38:45 RE(5):データウィンドウの印刷をAPI関数で処理したいのですが・・・ By m-yago
21702 05/01/17 10:25:17 RE(4):データウィンドウの印刷をAPI関数で処理したいのですが・・・ By にしやん
21701 05/01/17 10:24:41 RE(3):データウィンドウの印刷をAPI関数で処理したいのですが・・・ By にしやん
21698 05/01/14 17:56:30 RE(2):データウィンドウの印刷をAPI関数で処理したいのですが・・・ By m-yago
21670 04/12/27 10:51:55 RE(1):データウィンドウの印刷をAPI関数で処理したいのですが・・・ By PS

カテゴリ:
日付:2005年01月17日 10:24 発信者:にしやん
題名:RE(3):データウィンドウの印刷をAPI関数で処理したいのですが・・・

m-yagoさん、こんにちは。

>調査したところ、印刷対象(DataWindow)のポインタらしきものは取れそうでした。

必要なのは DataWindow のポインタではなく、印刷データのポインタではないのですか?
WritePrinter の第2引数ですよね。この引数は実際にプリンタに送信する
データ(コマンド)のポインタであり、DataWindow のポインタではありません。

この印刷データは、プリンタの機種ごとにその形式が異なります。

#PostScript プリンタは、機種に関わらず共通の印刷データ形式(PostScript形式)です

DataWindow の印刷データを作成するには、Print 関数で印刷データを一時ファイルに出力し、
そのファイルデータを読み込む以外に無いと思います。
具体的には、データウィンドウオブジェクトの \"DataWindow.Print.Filename\" プロパティに
一時ファイルの名前を指定して Print 関数を呼び出し、FileOpen → FileRead で
そのファイルの内容を Blob 型変数に読み込むことになります。
外部関数宣言では、REF Blob … として宣言しておくとよいでしょう。

一時ファイルは、印刷完了後に削除することになるでしょう。
印刷先プリンタの指定は Print 関数の前に行っておく必要があります。

#プリンタに送信されるべきデータを一旦ファイルに出力し、後で API を使って
#そのデータをプリンタに送信するわけで、二度手間であり無意味だと思いますが…


--
DOC_INFO_1 構造体は、winspool.h の内容を元にして作成できます。

String pDocName
String pOutputFile
String pDataType

こんな感じでしょうか?

#NULL ポインタを渡す構造体メンバは、
#String ではなく Long か UnsignedLong で宣言して 0 をセットするのも可

…で、StartDocPrinter にポインタ渡しするので、外部関数宣言時は
REF DOC_INFO_1 … などとすればできます。

#REF Structure … でも可

FUNCTION UnsignedLong StartDocPrinter(UnsignedLong hPrinter, UnsignedLong Level, &
REF DOC_INFO_1 pDocInfo) LIBRARY \"WINSPOOL.DRV\" ALIAS FOR \"StartDocPrinterA\"

こんな感じでしょうか?

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS (記載なし)
DBMS (記載なし)
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.