タイトル : Re^8: 塗りつぶし(黒)の円をPC画面中央に配置する 投稿日 : 2015/04/15(Wed) 22:22 投稿者 : ゆきみち
プログラムを直して見ました。 Option Strict On Public Class Form1 Private Sub form1_paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim x, y As Integer Dim a, b, c, d, f, h As Decimal a = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width 'パソコン画面の横の解像度 自分のPCでは1376 b = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height 'パソコン画面の縦の解像度 自分のPCでは768 c = CDec(11.6) 'パソコン画面の型(インチ) d = CDec(Math.Sqrt(a * a + b * b)) 'ピタゴラスの定理よりパソコン画面の対角線上のドット数 f = CDec(c * 2.54) 'パソコン画面の対角線上の長さ 1inch = 2.54cm h = 10 * f / d '1ピクセルが何mmに相当するか(=画素ピッチ)を求める 'Form1の中央のピクセルの値を調べる。 x = Me.ClientSize.Width \ 2 y = Me.ClientSize.Height \ 2 ' 中心が画面の中心で半径10mm(直径20mm)の緑の円を描画します。 Dim r As Decimal = 10 / h '1ピクセル:h o= x : 10mm e.Graphics.FillEllipse(Brushes.Black, x - r, y - r, r * 2, r * 2) End Sub > 今回、Decimal を使っておられるようですが、FillEllipse は > Decimal 型の座標指定をサポートしていません。指定できるのは、 > Integer/Rectangle または Single/RectangleF 型だけです。 ⇒Integer/Rectangle または Single/RectangleF 型だけしか指定できないというのはどのような物を 見たら理解出来ますでしょうか? > > データ型の指定ミスを減らすために、「Option Strict On」を利用してみてください。 ⇒「Option Strict On」を使用して見ました。暗黙の型の変換が生じるところが表示されていたので 直して見ました。 > 数値の末尾に R または # を付けた場合は Double 型を意味します。 > 数値の末尾に F または ! を付けた場合は Single 型を意味します。 > 数値の末尾に D または @ を付けた場合は Decimal 型を意味します。 ⇒CDbl、CSng、CDECと同じ意味という理解で宜しいでしょうか? > > > > a = 1366 'パソコン画面の横の解像度 > > b = 768 'パソコン画面の縦の解像度 > 変数には意味のある名前をつけましょう。a, b, c, d …ではなく、 > たとえば screenWidth などといった分かりやすい名前が望ましいです。 ⇒ご指摘ありがとうございます。今ここで作成しているプログラムは全体の中の一部で 予備的に作成しているものです。大元のプログラムに入れるときにはご教示頂いたことを踏まえ 適切な名前を付けるようにします。 > > ちなみに、画面の解像度を調べるのであれば、固定値にせずとも > Screen.PrimaryScreen.Bounds を使うことができますよ。 > (マルチモニタ環境の場合は、Screen.AllScreens で列挙できます) ⇒便利な機能を教えて下さり誠にありがとうございます。また、Screen.AllScreensという機能も知り、 大変勉強になりました。 >> > > > x = Me.ClientSize.Width \ 2 > > y = Me.ClientSize.Height \ 2 > > Dim r As Decimal = 10 / h '1ピクセル:h o= x : 10mm > > e.Graphics.FillEllipse(Brushes.Black, x - r, y - r, r * 2, r * 2) > > 座標指定が Integer なのに、サイズ指定が Decimal 型とバラバラです。 > 整数で指定したいのか小数で指定したいのかはっきりさせましょう。 > > 整数にしたいなら Integer に統一するべきですし、 > 小数指定が必要なら、(Decimal ではなく)Single で指定することになります。 ⇒基本データ型で非整数型(Demical,Double,Single)や整数型(SByte,Short,Integer,Long)で、 例えば同じ非整数型であっても使い分けがよく分からなく適当にしているのが現状です。どういった基準で 選択したら良いでしょうか? 何卒宜しくお願い申し上げます。 |