タイトル : Re^4: 塗りつぶし(黒)の円をPC画面中央に配置する 投稿日 : 2015/04/13(Mon) 21:33 投稿者 : ゆきみち
> > decPC_Yoko = 255 '横方向の画面の大きさ* > > decHaba = (Me.Size.Width * 2.54 * 10) / (gr.DpiX * decPC_Yoko) > > DpiX を使っていることから、「1.0 インチ= 25.4ミリメートル」を想定して > 計算されているのでしょうか。decPC_Yoko の単位系は何を想定していますか。 ⇒decPC_Yokoは画面の横方向の大きさで単位は「o」です。 > gr.PageUnit = GraphicsUnit.Millimeter > PageUnit で変換されるのは、あくまでも「描画座標」の指定です。 > > Me.Size や Me.ClientSize は Grapchis.PageUnit の影響を受けませんので、 > > Dim r As Integer = 100 > > gr.FillEllipse(Brushes.Black, x - r, y - r, r * 2, r * 2) > というコードだと、 > 「xピクセル−rミリ, yピクセル−rミリ, rミリ×2, rミリ×2」 > な値を、ミリメートル単位系のキャンバスに描いていることになってしまいます。 > 最初からミリメートル単位のキャンバスサイズを得たいのであれば、 > Form の ClientSize ではなく、Graphics の ClipBounds を使うのが手っ取り早いでしょう。 ⇒Graphics の ClipBoundsの使い方がよく分からないのでもう一度ご教示お願い出来ますでしょうか? 蛇足の部分も含めてプログラムを改変して見ました。 ご確認のほど宜しくお願い申し上げます。(まだ、指定した大きさの円を画面のFormの中央に表示することができていません。。。。。) Private Sub form1_paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim x, y, decPC_Yoko As Integer Dim decHaba As Decimal decPC_Yoko = 255 '横方向の画面の大きさ 'どのPCでも1mmが表示できるようにする decHaba = (Me.ClientSize.Width * decPC_Yoko / 10) / (e.Graphics.DpiX * decPC_Yoko) x = (Me.ClientSize.Width \ 2) y = (Me.ClientSize.Height \ 2) ' 中心が画面の中心で半径が100mmの緑の円を描画します。 Dim r As Integer = 100 e.Graphics.FillEllipse(Brushes.Black, x - r, y - r, r * 2, r * 2) End Sub |