アプリ版:「スタンプのみでお礼する」機能のリリースについて

只今、VB6のDataReportを使って帳票を作成しています。1つの雛型を使って、
複数のレポートを連続印刷しようとしていますが、DataReportとFormが非同期で
あるため、DataReportがまだ帳票をプリンタに吐き出し終わっていないうちに、次の帳票を作ろうとしてしまい、エラーが出てしまいます。

色々調べて、MoveMemoryなるAPIを使ってプリンタの状態(印刷中、とかスプール中とか)を取得しようとしていますが、それもエラーがでてしまいます。

どうしたら、上手にプリンタの状態を知ることが出来るでしょうか?
もしくは、非同期で動いているもの同士の同期を取るような方法がありましたら
ぜひ教えてください。
よろしくお願いします。

A 回答 (4件)

こんにちは


VBが実行させたモジュールと自分を同期させる方法がWin32APIでありますので
参考にして下さい。

.bas

'起動プロセスのオープン(状態の取得準備)
Public Declare Function OpenProcess Lib "KERNEL32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
'起動プロセスとのシンクロ(待機する)
Public Declare Function WaitForSingleObject Lib "KERNEL32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
'起動プロセスのクローズ(終了)
Public Declare Function CloseHandle Lib "KERNEL32" _
(ByVal hObject As Long) As Long
'起動プロセスが実行中か調べる(状態の取得)
Public Declare Function GetExitCodeProcess Lib "KERNEL32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long

Public Const SYNCHRONIZE = &H100000
Public Const INFINITE = &HFFFF


.frm
Dim IDProcess As Long
Dim hProcess As Long
Dim ret As Long

IDProcess = 起動プロセス
hProcess = OpenProcess(SYNCHRONIZE, 1, IDProcess)
ret = WaitForSingleObject(hProcess, INFINITE)
ret = CloseHandle(hProcess)

起動プロセスをControl.PrintReportで試してください。

この回答への補足

アドバイス、どうもありがとうございます!
起動プロセスについてなのですが、DataReportでも起動プロセスは得られるのでしょうか?

補足日時:2002/07/25 10:07
    • good
    • 0

No.3の補足についての回答です。


MSDNのヘルプでPrintReportメソッドを調べたら
最後の行に
"PrintReport メソッドは、非同期の操作を実行します。PrintReport メソッドは、非同期の操作を示す "クッキー" の識別子を返します。"
とあります。
私はやったことが無いので一度試してください。
よろしく。
    • good
    • 0
この回答へのお礼

どうもありがとうございます!
ヘルプで調べて頂いたんですね。
本当にありがたいです。
是非試してみようと思います!

お礼日時:2002/07/25 16:55

DataReportは使用したことが無いのですが


要するに印刷処理中に再度印刷ボタンをクリックされてしまう事が
問題なのではないですか?

印刷が終了するまで印刷ボタン等を押せなくしたり
雛型を増やしてはダメですか?

この回答への補足

雛型を作るとしたら、400個ほど作らないといけないので、それはちょっと避けたいところなのです。
再印刷についてですが、『ボタンを押す』という形ではなくて、前の印刷の続きで印刷されてしまうので、ボタンでの制御は出来ないのです…。

補足日時:2002/07/23 15:25
    • good
    • 0

こんにちは。

maruru01です。

どういうエラーが出るのかわからないので、何とも言えませんが、とりあえずプリンタの印刷ジョブを列挙するサンプルのURLを紹介します。
このvbvbvb.comにはたくさんサンプルがあるので探してみてはどうでしょうか。

では。

参考URL:http://www.vbvbvb.com/jp/gtips/0351/gEnumJobs.html

この回答への補足

早速のお返事、ありがとうございます。
vbvbvb.comを拝見させて頂いたのですが、同じような処理をしても、どうもエラーが出てきてしまいます。
エラーの内容は「メモリが"read"になることはありませんでした」というものです。
どうやらMOVEMEMORYの箇所でエラーが発生するようです。
どうしたら出来るんでしょうか…。
どうかアドバイスよろしくお願いします。
ちなみにOSはWin2000です。

補足日時:2002/07/23 14:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!