- このトピックは空です。
-
投稿者投稿
-
2021年6月30日 5:36 PM #1932
hcc初心者
ゲストVB6.0でネットワークプリンターの設定をソース上で変更する方法をご教示いただけないでしょうか?
設定条件は第一トレイと第二トレイにA4がセットされたネットワークプリンター(\\tsu01\IBM 5589-L36)の第二トレイから指定枚数を印刷するというものです。
‘–Declare文–
Declare Function wrSetReportPrinter Lib “WRENGN32.DLL” (ByVal hReport As Long, ByVal lpDeviceName As String, lpDevMode As DEVMODE) As LongDim lngRet As Long
Dim strDevName As String
Dim bytDev() As Byte
Dim lpDevMode As DEVMODEQ.1 strDevNameは、\\サーバー\プリンター名 (\\tsu01\IBM 5589-L36)と言った具合にセットして良いのでしょうか?
サイズを取得
lngRet = wrGetReportPrinter(hReport, strDevName, lpDevMode, WAP_GPINFOSIZE)‘バッファを確保
ReDim bytDev(lngSize(0)) As Byte‘レポートプリンタ情報を取得
lngRet = wrGetReportPrinter(hReport, strDevName, lpDevMode, WAP_GPDEVICEINFO)‘トレイ設定・コピー枚数
lpDevMode.dmPaperSize = 277
lpDevMode.dmCopies = 2Q.2 トレイ設定・コピー枚数の指定はこのような感じでいいのでしょうか?
‘レポートプリンタ情報を設定
lngRet = wrSetReportPrinter(hReport, strDevName, lpDevMode)以上こんな感じで組んでみたのですが、設定変更がされません初心者の為、本当にわかりません。
2021年6月30日 5:37 PM #1933松嶋@ソフトウィング
ゲストお世話になります。
お返事が遅れ、申し訳ありません。ご質問の内容についてですが、処理手順には問題ない様で
す。給紙方法を設定する場合ですが、dmPaperSizeではなく
dmDefaultSourceを使用しますので、dmDefaultSourceへプリ
ンターがサポートする給紙先コードを設定して下さい。※開発ツールなどで給紙方法が定義されていますが、必ずし
も定義されている給紙方法が全てサポートされているとは
限りませんので注意して下さい。以上です。宜しくお願い致します。
2021年6月30日 5:37 PM #1934hcc初心者
ゲストお世話になっております
ご回答いただいたように組んでみたところ
dmDefaultSourceに給紙先コードをしていしているにも関わらず、指定したトレイから印刷が行われません。
コピー枚数などは、指定したものに変わっておりますが
トレイ指定がうまくいきません。>※開発ツールなどで給紙方法が定義されていますが、必ずし
> も定義されている給紙方法が全てサポートされているとは
> 限りませんので注意して下さい。Q.1
との回答がありましたが、給紙方法がサポートされているか否かを確認する方法はございますか?Q.2
給紙方法がサポートされていても、指定したトレイから印刷が行われないケースもありますか?2021年6月30日 5:37 PM #1935松嶋@ソフトウィング
ゲストお世話になります。
説明が不足しており、ご迷惑をおかけ致しました。
dmDefaultSourceを指定した場合は、dmFieldsへDM_DEFAULTSOURCE
値を加算(ビットをセット)する必要があります。>Q.1
>との回答がありましたが、給紙方法がサポートされているか>否かを確認する方法はございますか?
WingReport v2.0では確認する機能を提供しておりませんので
お客様にて確認して頂く事になります。
※WingReport v3.0では同機能を提供しております。>Q.2
>給紙方法がサポートされていても、指定したトレイから印刷>が行われないケースもありますか?
プリンタードライバーがプログラム中からの給紙方法の変更
をサポートしていない場合が考えられます。※DM_DEFAULTSOURCEは0x200と定義されています。
以上です。宜しくお願い致します。
2021年6月30日 5:37 PM #1936hcc初心者
ゲスト度々申し訳ございません
>dmDefaultSourceを指定した場合は、dmFieldsへ>DM_DEFAULTSOURCE
>値を加算(ビットをセット)する必要があります。とのことですが、
lpDevMode.dmDefaultSource = 277
とした場合
lpDevMode.dmFields + 277ということでしょうか??大変恐縮ですが
DM_DEFAULTSOURCEの値をdmFieldsに加算する
サンプルコードを記載していただけないでしょうか?2021年6月30日 5:37 PM #1937松嶋@ソフトウィング
ゲストお世話になります。
説明不足で申し訳ありませんでした。
DM_DEFAULTSOURCEは16進数で200と定義(SDK等に定義)され
ておりますので、10進数で512をdmFieldsに加算すれば問題
ありません。
dmFieldsはDEVMODE構造体の有効になっているメンバーを
(有効な値が設定されている)ビットで指定します。
ただし、ドライバーが指定したメンバーをサポートしていな
い場合は設定値は無視されます。※1バイト=8ビット
※LONG=32ビット以上です。宜しくお願い致します。
2021年6月30日 5:37 PM #1938hcc初心者
ゲストお世話になっております。
WR2.0のプリンタ・トレイ選択がどうしてもうまくいきません
プリンタドライバが原因かともおもいましたが、
DELPHIで組んだプログラムからは
トレイ選択が可能となっており、行き詰まっております。
そこで幾つか確認したい点がございます。Q.1
プロジェクトに加えることになっている定義ファイル\VB\Ssp1\WINGRPT.TXTの最終更新日は2001/12/12となっており、Declare Function wrGetReportPrinter Lib “WRENGN32.DLL” (ByVal hReport As Long, ByVal lpDeviceName As String, lpDevMode As Any, ByVal wOperation As Long) As Long
Declare Function wrSetReportPrinter Lib “WRENGN32.DLL” (ByVal hReport As Long, ByVal lpDeviceName As String, lpDevMode As DEVMODE) As Long
となっておりますが、印刷ビンの指定に関するサンプルコード
http://www.swg.co.jp/cgi-bin/wb/read.cgi?file=009101
では、wrSetReportPrinterのlpDevModeはAnyと定義されています。
どちらが正しいのでしょうか?wrGetReportPrinterのlpDevModeに関してもAnyで良いのでしょうか?Q.2
wrSetReportPrinterとwrGetReportPrinterを
使用するにあたって、
WRENGN32.DLLのバージョンは2.6.0.27で良いのでしょうか?2021年6月30日 5:38 PM #1939松嶋@ソフトウィング
ゲストお世話になっております。
大変申し訳ございませんでした。ご指摘の通りDEVMODE情報は
可変長の情報であるため、VBの構造体を使用する事は難しい
ため、BYTE型の配列で処理を行います。BYTE型の配列を処理
するため、wrSetReportPrinterの定義を “As DEVMODE”から
“As Any”へ変更して頂きます。また、処理方法は参考にして
頂いたサポート情報の要領で処理を行います。○参考
dmDefaultSourceは56,57バイト目を使用しますので、設定
する値が0~255の範囲であれば、56バイト目に設定し
て下さい。また255を超える値の場合は設定する値を16
進数に変換して下位1バイトを56バイト目に設定し、上位
1バイトを57バイト目に設定します。以上です。宜しくお願い致します。
2021年6月30日 5:38 PM #1940hcc初心者
ゲスト>dmDefaultSourceは56,57バイト目を使用しますので、
>設定する値が0~255の範囲であれば、
>56バイト目に設定して下さい。
>また255を超える値の場合は
>設定する値を16進数に変換して
>下位1バイトを56バイト目に設定し、
>上位1バイトを57バイト目に設定します。とのことですが、
設定値が287であったと仮定すると
16進数に変換→11Fになると思いますが
この場合、
上位1バイトとは「1」で良いのでしょうか?
下位1バイトとは「F」でしょうか?
Fではセット出来ないと思われますがどのようにセットするのでしょうか?bytDev(56)=CByte(?1)
bytDev(57)=CByte(?2)?1回答__
?2回答__
——————————————————-トレイ設定:287とは別に
bytDev(56)=CByte(vbPRBNUpper) ‘上部トレイ
も試してみたのですが、トレイ選択が変更されませんでした。“As Any”とした場合も、dmFieldsにあたる位置にビットを立てる必要はあるのでしょうか?
その場合、bytDev(XX)は何バイト目になるのでしょうか?回答__
——————————————————–
宜しくご教示下さい。2021年6月30日 5:38 PM #1941松嶋@ソフトウィング
ゲストお世話になります。
データの設定方法は以下の様になります。
bytDev(56)=CByte(&h1)
bytDev(57)=CByte(&h1F)>トレイ設定:287とは別に
>bytDev(56)=CByte(vbPRBNUpper) ‘上部トレイ
>も試してみたのですが、トレイ選択が変更されませんでし
>た。
1バイトで表現できる値の場合は以下のように設定します。
bytDev(56)=CByte(vbPRBNUpper)
bytDev(57)=0
※vbPRBNUpperは1と定義されています。>”As Any”とした場合も、dmFieldsにあたる位置にビットを立>てる必要はあるのでしょうか?
>その場合、bytDev(XX)は何バイト目になるのでしょうか?
設定する事をお勧め致します。
dmFieldは40バイト目から4バイトとなります。ただし、セッ
トするビットは0x200ですので、41バイト目を以下の様に処理
します。
bytDev(41)=bytDev(41) and 2給紙方法はドライバー(プリンター)毎に異なる場合があり
ます。また、給紙方法を表すコードも異なりますで、事前に
設定する給紙コードをサポートしているか、確認してから使
用する事をお勧め致します。以上です。宜しくお願い致します。
-
投稿者投稿
- フォーラム「旧サポート掲示板」には新規投稿および返信を追加できません。