初めて失礼致します。
現在、VB6 SP6,Win2k SP4の環境にて、プログラム中の
画像をプリントアウトする部分で困っています。
現在考えている要件としては
・「通常使うプリンタ」以外にも出力したい
・「通常使うプリンタ」は変更したくない
・細かいプロパティをユーザに設定させる必要は無いので、ダイアログは出さずに
プリンタの現状のプロパティを取得して、強制的に変更して出力したい
プリンタのスプールに直接イメージを吐き出すようなサンプルはMSDNのサイトで
見かけたので、出力自体は、最悪でも それで何とかなるとは思うのですが、
プリンタの設定方法がわからず、困り果てている状態です。
MSDNで検索してDocumentPropertiesというAPIは発見しました。
そこでは、やり方として
1.DEVMODE構造体のサイズを取得
2.現在のプリンタ設定をDEVMODE構造体に取り込む
3.新しい設定を引き渡して反映させる
と あったのですが(全ててDocumentPropertiesの機能)、
「構造体のサイズを取得して、その後で構造体を定義するなんてVBで出来たっけ?
構造体はモジュールレベルでしか定義出来ないのでは?」
というレベルの問題で解決法がわからなくなり、質問した次第です。
長くなって申し訳ありませんが、何か良い解決方法は ありますでしょうか?
もしも見当違いの答えだったら申し訳ありません。
通常使うプリンタを変更せずに、その他のプリンタで出力したいってことですよね??
こちらのサイトを参考にしてはどうでしょうか↓
http://www.bcap.co.jp/hanafusa/dotnet/index.html
印刷関係のプリンターの[一覧を取得及び指定のプリンターで印刷]のところを参考にしてみて下さい。
あ、すみません。
印刷関係の「プリンターの一覧を取得及び指定のプリンターで印刷」のところでした。
> 構造体のサイズを取得して、その後で構造体を定義するなんてVBで出来たっけ?
その手の処理については、
1. 構造体サイズを取得
2. Byte配列などにて、そのサイズ分のメモリを確保
3. そのメモリ領域を構造体とみなして、APIと通信
(必要に応じて、RtlMoveMemoryなどでポインタからのデータ複写)
といった手順で処理されます。
API側にしてみれば、読み書きするためのメモリさえ用意されていれば、
それがVB側でByte配列として確保されていようと、構造体/ユーザ定義型で
確保されていようと気にしない、ということです。
早速の回答、ありがとうございます。
>VBアマチュア さん
あ、当方の環境はVB6ですので……(汗)
しかし.NETだと簡単そうですねぇ。.NET知らないけどチョットうらやましい。
>魔界の仮面弁士 さん
うわ、結構 力技な感じですね。
確かに入ってしまえば知ったこっちゃないんでしょうけど(汗)
引き続き質問になって申し訳ないのですが……
あらかじめ、DEVMODE構造体のうち変更したい部分(またはプリンタドライバに依存しない範囲)までを
普通に定義しておき(この実体をAとする)、Byte * n の配列が要素である構造体(この実体をBとする……
Redimで確保するんですよね?)にDEVMODE構造体を取り込んでから、LSetでBからAにデータを写して変更し、
今度はAからBにデータを写して何事も無かったかのようにDocumentPropertiesにて設定を行う……と処理しても
正常に動作するものなんでしょうか?
AとBのサイズが違うので、ちょっと恐い気も するんですが……
そがっち さん こんにちは。
> あらかじめ、DEVMODE構造体のうち変更したい部分
>(またはプリンタドライバに依存しない範囲)までを普通に定義しておき(この実体をAとする)、
> Byte * n の配列が要素である構造体(この実体をBとする……
> Redimで確保するんですよね?)にDEVMODE構造体を取り込んでから、
> LSetでBからAにデータを写して変更し、
確か、VB6のLSetでは、動的配列を含むユーザ定義型は、違うユーザ定義型へは設定できないのでは・・・
ですから、
> >魔界の仮面弁士 さん
> うわ、結構 力技な感じですね。
こういう、力技が必要になるんだと思います。
#最大値(例えば100バイトとか1000バイトとか)が予想できるなら、
#その値で固定配列にしておけば済むんですけどね・・・
大吉末吉 さん、レスありがとうございます。
>確か、VB6のLSetでは、動的配列を含むユーザ定義型は、違うユーザ定義型へは設定できないのでは・・・
ぐあ、そうでしたか(^^;
今までRedim使うことなんて無かったもので……
(初心者板に書いてヨカッタ……ホッ)
明日にでも、地道に頑張って組んでみることにします。
ありがとうございました。
ツイート | ![]() |