C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: VB Printオブジェクトについて


(過去ログ 20 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■8734 / inTopicNo.1)  VB Printオブジェクトについて
  
□投稿者/ ゆう (10回)-(2007/10/09(Tue) 11:52:55)

分類:[VB6 以前] 

Winxp VB6.0
はじめまして

画面ハードコピー機能について質問です。

pirntオブジェクトを使用していますが、ワイド画面型PCだと表示がきれます。

printオブジェクトのzoomプロパティで縮小など出来るみたいですがうまくいきません。

何かいい方法をご教授下さい。
引用返信 編集キー/
■8739 / inTopicNo.2)  Re[1]: VB Printオブジェクトについて
□投稿者/ 魔界の仮面弁士 (455回)-(2007/10/09(Tue) 12:50:13)
No8734 (ゆう さん) に返信
> pirntオブジェクトを使用していますが、ワイド画面型PCだと表示がきれます。
> printオブジェクトのzoomプロパティで縮小など出来るみたいですがうまくいきません。

「pirntオブジェクト」や
「printオブジェクト」といったオブジェクトは、VB6 にはありません。

「Printerオブジェクト」や
「Printメソッド」や
「PrintFormメソッド」ならばありますけど。


具体的には、「Printer オブジェクト(?)」を使って、どのような処理を行っているのでしょうか?

Zoom プロパティを持っているという事から、Printer オブジェクトのことだと推測しますが、
これは「プリンタ」のオブジェクトであって、「画面/ディスプレイ」のオブジェクトでは無いので、
『ワイド画面』かどうかは、本来、無関係のはずですし。
引用返信 編集キー/
■8742 / inTopicNo.3)  Re[2]: VB Printオブジェクトについて
□投稿者/ ゆう (11回)-(2007/10/09(Tue) 13:08:51)
魔界の仮面弁士さん
ご回答ありがとうございます。

> 「Printerオブジェクト」や
> 「Printメソッド」や
> 「PrintFormメソッド」ならばありますけど。

Printerオブジェクトです。

画面のハードコピー機能に使用しています。
以前のPCだと印刷出来るのですが、ワイドPCだと右端が
切れてしまいます。
ヘルプなどでは、ZOOM プロパティで縮小や拡大ができるみ
たいですがうまくいきません。

No8739 (魔界の仮面弁士 さん) に返信
> ■No8734 (ゆう さん) に返信
>>pirntオブジェクトを使用していますが、ワイド画面型PCだと表示がきれます。
>>printオブジェクトのzoomプロパティで縮小など出来るみたいですがうまくいきません。
>
> 「pirntオブジェクト」や
> 「printオブジェクト」といったオブジェクトは、VB6 にはありません。
>
> 「Printerオブジェクト」や
> 「Printメソッド」や
> 「PrintFormメソッド」ならばありますけど。
>
>
> 具体的には、「Printer オブジェクト(?)」を使って、どのような処理を行っているのでしょうか?
>
> Zoom プロパティを持っているという事から、Printer オブジェクトのことだと推測しますが、
> これは「プリンタ」のオブジェクトであって、「画面/ディスプレイ」のオブジェクトでは無いので、
> 『ワイド画面』かどうかは、本来、無関係のはずですし。
引用返信 編集キー/
■8743 / inTopicNo.4)  Re[3]: VB Printオブジェクトについて
□投稿者/ 魔界の仮面弁士 (457回)-(2007/10/09(Tue) 13:13:47)
No8742 (ゆう さん) に返信
> Printerオブジェクトです。
> 画面のハードコピー機能に使用しています。

という事は、(PrintForm メソッドではなく)Printer.PaintPicture メソッドを
用いているという事になりますね。

その場合、ハードコピー用の画像(Pictureオブジェクト)を取得する処理部分に
問題があるのでは無いでしょうか。


> ヘルプなどでは、ZOOM プロパティで縮小や拡大ができるみ
> たいですがうまくいきません。
そもそも Zoom プロパティは、プリンタドライバによっては使用できないので、
実はあまり当てにならなかったり……。(^_^;)
引用返信 編集キー/
■8745 / inTopicNo.5)  Re[4]: VB Printオブジェクトについて
□投稿者/ ゆう (12回)-(2007/10/09(Tue) 13:22:21)
魔界の仮面弁士 さん

> という事は、(PrintForm メソッドではなく)Printer.PaintPicture メソッドを
> 用いているという事になりますね。

Printer.PaintPicture Clipboard.GetData(), 0, 0
と記述しておりますがこの部分がよくないのでしょうか?


No8743 (魔界の仮面弁士 さん) に返信
> ■No8742 (ゆう さん) に返信
>>Printerオブジェクトです。
>>画面のハードコピー機能に使用しています。
>
> という事は、(PrintForm メソッドではなく)Printer.PaintPicture メソッドを
> 用いているという事になりますね。
>
> その場合、ハードコピー用の画像(Pictureオブジェクト)を取得する処理部分に
> 問題があるのでは無いでしょうか。
>
>
>>ヘルプなどでは、ZOOM プロパティで縮小や拡大ができるみ
>>たいですがうまくいきません。
> そもそも Zoom プロパティは、プリンタドライバによっては使用できないので、
> 実はあまり当てにならなかったり……。(^_^;)
引用返信 編集キー/
■8748 / inTopicNo.6)  Re[5]: VB Printオブジェクトについて
□投稿者/ ゆう (13回)-(2007/10/09(Tue) 13:47:58)
魔界の仮面弁士 さん

画面のハードコピーサイズがA4サイズより大きい為
右端がきれてしまうという事がわかりました。

ハードコピー用の画像(Pictureオブジェクト)を取得し
印刷する際にA4サイズに縮小する事は、可能でしょうか?

No8745 (ゆう さん) に返信
> 魔界の仮面弁士 さん
>
>>という事は、(PrintForm メソッドではなく)Printer.PaintPicture メソッドを
>>用いているという事になりますね。
>
> Printer.PaintPicture Clipboard.GetData(), 0, 0
> と記述しておりますがこの部分がよくないのでしょうか?
>
>
> ■No8743 (魔界の仮面弁士 さん) に返信
>>■No8742 (ゆう さん) に返信
> >>Printerオブジェクトです。
> >>画面のハードコピー機能に使用しています。
>>
>>という事は、(PrintForm メソッドではなく)Printer.PaintPicture メソッドを
>>用いているという事になりますね。
>>
>>その場合、ハードコピー用の画像(Pictureオブジェクト)を取得する処理部分に
>>問題があるのでは無いでしょうか。
>>
>>
> >>ヘルプなどでは、ZOOM プロパティで縮小や拡大ができるみ
> >>たいですがうまくいきません。
>>そもそも Zoom プロパティは、プリンタドライバによっては使用できないので、
>>実はあまり当てにならなかったり……。(^_^;)
引用返信 編集キー/
■8749 / inTopicNo.7)  Re[5]: VB Printオブジェクトについて
□投稿者/ 魔界の仮面弁士 (458回)-(2007/10/09(Tue) 13:49:15)
No8745 (ゆう さん) に返信
> Printer.PaintPicture Clipboard.GetData(), 0, 0
> と記述しておりますがこの部分がよくないのでしょうか?

その場合、
 (1)クリップボードには、求める画像が正しく入っているのか?
  → clipbrd.exe などで確認

 (2)Clipboard.GetData() は、クリップボード内の画像全体を返してくれているか?
  → 後述のコードで、画像サイズを確認

 (3)Printer.PaintPicture で、その画像を印刷できているか?
  → 印刷が欠けるなら、プリンタの印字可能領域などを確認の上、
   拡大縮小のために、PaintPicture の他の引数も指定してみるとか。
という 3 段階に分けて調べてみては如何でしょう。


Private Sub Command1_Click()
 Dim P As Picture
 If Clipboard.GetFormat(vbCFBitmap) Then
  Set P = Clipboard.GetData(vbCFBitmap)

  Dim W As Long, H As Long
  W = P.Width / 1000 * 567 / Screen.TwipsPerPixelX
  H = P.Height / 1000 * 567 / Screen.TwipsPerPixelY

  If MsgBox(CStr(W) & "×" & CStr(H) & "の画像を印刷しますか?, vbQuestion Or vbYesNo) = vbNo Then
   Exit Sub
  End If
  Printer.PaintPicture P, 0, 0
  Printer.EndDoc
 End If
End Sub
引用返信 編集キー/
■8751 / inTopicNo.8)  Re[6]: VB Printオブジェクトについて
□投稿者/ ゆう (14回)-(2007/10/09(Tue) 15:07:37)

(1)クリップボードには、求める画像が正しく入っているのか?
  → 正しく入っています

 (2)Clipboard.GetData() は、クリップボード内の画像全体を返してくれているか?
  → 画像サイズは1280*800

 (3)Printer.PaintPicture で、その画像を印刷できているか?
  → 引数の指定で入るようになったが上部が切れてしまう

Printer.PaintPicture P, 0, 0, , , P.Width / 1000 * 567 / Screen.TwipsPerPixelX, P.Height / 1000 * 567 / Screen.TwipsPerPixelY

引用返信 編集キー/
■8763 / inTopicNo.9)  Re[7]: VB Printオブジェクトについて
□投稿者/ まどか (379回)-(2007/10/09(Tue) 16:50:37)
> Printer.PaintPicture P, 0, 0, , , P.Width / 1000 * 567 / Screen.TwipsPerPixelX, P.Height / 1000 * 567 / Screen.TwipsPerPixelY

カンマが2つ足りないような。。。
#1000てなんだろう?

あとは、
・A4横幅のTwip = A4横幅のCm * 567 Twips/Cm
・A4縦幅のTwip = A4縦幅のCm * 567 Twips/Cm
・横幅の係数 = A4横幅のTwip / イメージの横幅(Twip)
・縦幅の係数 = A4縦幅のTwip / イメージの縦幅(Twip)
・係数 = Min(横幅の係数、縦幅の係数)
※拡大を考えればよくわかる。
※上記の結果、縦が1.5倍でピッタンコ、横が1.2倍でピッタンコという場合、横を1.5倍するとはみ出してしまう。
※したがって、小さいほうを採用する。

よって、縦横比を維持してA4の縦横いずれかにピッタンコで描くサイズは、P.Width * 係数、P.Height * 係数 となる。

#あってかな?
引用返信 編集キー/
■8765 / inTopicNo.10)  Re[8]: VB Printオブジェクトについて
□投稿者/ 魔界の仮面弁士 (460回)-(2007/10/09(Tue) 17:46:16)
No8751 (ゆう さん) に返信
> Printer.PaintPicture P, 0, 0, , , P.Width / 1000 * 567 / Screen.TwipsPerPixelX, P.Height / 1000 * 567 / Screen.TwipsPerPixelY
ここの記述は、ScaleMode プロパティの設定次第で変化するので、御注意を。


No8763 (まどか さん) に返信
> #1000てなんだろう?
Picture オブジェクトの Width は、HiMetric 単位系なので:
 1 論理単位(1 High Metric Point) = 0.01mm
 1 論理cm = 567 twips
という換算式になり、すなわち
 1 論理cm = 1000 HiMetric = 567 twips
となって、ここで「1000」が登場……かな。
引用返信 編集キー/
■8768 / inTopicNo.11)  Re[9]: VB Printオブジェクトについて
□投稿者/ ゆう (15回)-(2007/10/09(Tue) 18:29:00)
魔界の仮面弁士 さん

ご指摘通りにするとうまくいきました。
お忙しいところご回答ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -