タイトル : Re^7: 塗りつぶし(黒)の円をPC画面中央に配置する 投稿日 : 2015/04/15(Wed) 20:20 投稿者 : 魔界の仮面弁士
プログラムがかなり進みましたね。 > 確認のほど宜しくお願い申し上げます。 今回、Decimal を使っておられるようですが、FillEllipse は Decimal 型の座標指定をサポートしていません。指定できるのは、 Integer/Rectangle または Single/RectangleF 型だけです。 なのでこの段階で、「暗黙の型変換」が発生してしまいます。 データ型の指定ミスを減らすために、「Option Strict On」を利用してみてください。 卒業制作というのであれば、そういった細かい点も拘った方が良いと思いますよ。 (見た目上正しく動くだけではなく、コードの品質も高めておくということです) > a = 1366 'パソコン画面の横の解像度 > b = 768 'パソコン画面の縦の解像度 変数には意味のある名前をつけましょう。a, b, c, d …ではなく、 たとえば screenWidth などといった分かりやすい名前が望ましいです。 もしも 1 文字変数を付けるにしても、 幅なら w (width) とか x とか 高さなら h (height) とは y など、 後から見たときに意味を推測できるようなものを選びます。 ちなみに、画面の解像度を調べるのであれば、固定値にせずとも Screen.PrimaryScreen.Bounds を使うことができますよ。 (マルチモニタ環境の場合は、Screen.AllScreens で列挙できます) > f = c * 2.54 単に 2.54 と書くと、Double 型の値を意味してしまいます。 もしも Decimal 型の 2.54 を明示したいのであれば、 f = c * 2.54D とすることで、Decimal 型の 2.54 を指定したことになります。 数値の末尾に R または # を付けた場合は Double 型を意味します。 数値の末尾に F または ! を付けた場合は Single 型を意味します。 数値の末尾に D または @ を付けた場合は Decimal 型を意味します。 > 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 で指定することになります。 > モニターの大きさはそのPCモニターの仕様を見れば記載されていますし、 > モニターの解像度はPCの「画面の設定」(Windows8)で確認が可能であると > 思いますので誰が設定しても同じ画素ピッチになるのではないかと思いますが、 > いかがでしょうか? ほぼそれで大丈夫だと思いますよ。あとはどこまでの厳密性を求めるか、ですね。 液晶モニターであったとしても、その液晶の推奨解像度以外で表示することは可能です。 たとえば、幅 1280 なモニターに対して、1024 なデスクトップを表示した場合、 画面の左右端に、何も移らない領域ができるか……もしくは、長さ 40 の直線が 長さ 50 に間延びして、滲んで描画されるといった結果になりえます。 (この場合、縦横でドットピッチが異なるケースも生じえますね) まぁ、それは極端な例ですが、たとえ推奨解像度通りの設定だったとしても、 若干のズレは生じてくるものです。 お使いのモニターに、電源スイッチや明るさ調整のものとは別に、 「ゆがみ補正」などの調整用スイッチが付いていたりはしませんか? このスイッチの設定次第では、同じ型番のモニタでも、実際の表示サイズに 差が生じる可能性があるわけです。CRT の場合は特に。 そしてその設定値は、プログラムで検知することはできません。 (調整スイッチを持たず、自動調整してくれるモニターもあります) |