掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Printerオブジェクトの文字フォントをPictureボックスへ正確に縮小して表示するには? (ID:123394)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
[開発環境:WinXP/98,VB6SP6] 特攻隊長まるるう さんありがとうございます。 ご紹介のサイトをちょっと拝見しましたが、 http://www.microsoft.com/japan/msdn/windows/windowsxp/highdpiapp.asp のサイトは、今回質問の件とは別の部分で大変参考になりました。 このサイトにからんで、もしかしたら別件で質問をさせて頂くかも知れません ので、その時はよろしくお願いします。 >あと、開発環境を書かなくなっちゃいましたが、回答者にとって全てのスレッドは >別人が書いてるようなものです。そのスレッドのみで質問者の情報が全て伝わるように >全てのスレッドで自分の環境を書いて下さい。 失礼しました。今後気を付けます。 さて、まず CurrentY を用いての私の実験結果をご報告します。 PictureBoxに文字を書くために、単に文字列を PictureBox.Print するのでは なく、1行ごとに CurrentY を設定して文字を描画させてみました。 そのために、下記のコードによってフォントの高さを求めました。 With RichTextBox1 .Text = "〜100行程度の文章〜" Do '文書の行数を求めるロジック ' → TextBoxならAPIで行数を簡単に求められる ' ようですが、RichTextBoxなので自前の ' ロジックで求めました。 intTotalRows = intTotalRows + 1 Loop End With With Printer .ScaleMode = vbMillimeters sglFontHeight = .TextHeight(RichTextBox1.Text) / intTotalRows '方法1 'あるいは sglFontHeight = .ScaleY(.FontSize, vbPoints, vbMillimeters) '方法2 End With 方法1の場合は全行数を求めておく必要がありますが、どっちみちプレビューでは ページングの処理でそれが必要となるため、全行数および1ページごとの行数を既に 求めています。 これで求まった sglFontHeight の値を、PictureBox へ1行ずつ描画する度に CurrentY で座標を直接指定したところ、結果は、単に PictureBox.Print で自動的に描画させる のに比べ、より実際の印刷結果に近くなりました。 PictureBox での ScaleHeight や ScaleWidth の単位、およびフォントの高さはミリメートル で処理しているので、相対的な正確さを求める方法としては、フォントがどのような種類 でどのようなサイズであっても、問題なく描画できると思うのですが一般的にどうなんで しょうか。 ちなみに結果ですが、実際の印刷結果とさほど違いなく描画できました。 また、モニタのDPIを仮に96dpiから120dpiに変更して試してみましたが、プレビューに関しては 特に問題はありませんでした。 余談ですが、ご紹介の http://www.microsoft.com/japan/msdn/windows/windowsxp/highdpiapp.asp のサイトによって、フォームに貼り付けている画像の位置や大きさのスケーリングを する必要があることに気が付きました。 他の部分では特に問題は発見できませんでした。 取り合えず一応の解決は図れたかなと思いますが、ご紹介のサイトをもう少し吟味して、 最終的に解決のチェックを入れたいと思います。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.