- PR -

解像度変更の影響を受けないフォームを作りたい

投稿者投稿内容
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2008-03-10 10:43
OS:Windows XP Pro(SP2)
開発ソフト:Visual Studio 2005(言語:Visual Basic)
     .NET Framework 2.0使用
開発アプリ形態:Windowsアプリ

自分の端末は、1024×768の解像度で、
この解像度でフォームをデザインし、開発しています。

ここで、自分の端末の解像度を1280×1024に設定変更したとき、
フォームがその解像度に合わせて小さくなってしまいます。

これを、各端末の解像度に影響されず、
フォームの高さが500、横幅が300というサイズであれば、
どの解像度でもその大きさを保つようにしたいのですが、
フォームのプロパティ等を使って、簡単に出来る方法がありましたら
教えていただきたく投稿させていただきました。

もし、方法をご存知の方や、こうすれば出来るんじゃないか等、
ありましたら、是非教えてください。
よろしくお願い致します。
ぱてお
常連さん
会議室デビュー日: 2008/03/07
投稿数: 41
投稿日時: 2008-03-10 11:51
おもうに同じ解像度でもモニタの物理的なサイズが変われば、
当然、見栄えのサイズも変わるわけで何処の端末にもっていっても
と言うのは事実上無理ではないかと思います。
Windowsの画面のDCが保持している解像度は、実際には画面設定の所で
変更できる値で実際の解像度(DPI)とは異なる値です。

書かれているフォームの高さが500、横幅が300にしても
単位は?という問題があります。
単位がピクセルなら画面のピクセルサイズの変化に伴って
サイズが変わるのは当たり前の話です。
では、ミリメートルにするかと言うと先ほどの話でもあるように
画面のDPIは実際のモニター上のDPIとは関係無い所で管理されているので
同じサイズのモニター上であれば同じ大きさを保てるかもしれませんが、
サイズが違うモニター上の二つを比べた時はサイズが異なる事になります。

17インチのモニタでも19インチのモニタでも液晶モニタだったら
最高の設定で1280×1024になると思うのでこれだけでも実際のDPIと
DCが返すDPIが違う(DCが返すDPIはデフォルトで常に96DPI)事が
わかると思います。

同じサイズのモニタに限定して考えれば、
ウインドウサイズの単位はともかく、DPIから実際のウインドウ上のサイズを換算して
同じように調整することは不可能ではないような気がします。
ただし、先ほどから書いているようにモニタのサイズが異なる場合でも
同じウインドウサイズにすると言うのは難しいと思います。

以前にとある問題を解決する為にアプリケーションの初回起動時に
ユーザーにキャリブレーションをしてもらってその値から実際のDPIを
算出して保持しておこうかと言う検討をした事が有りますけれど、
ユーザーがめんどくさがるだろうと言う話と、そこまでして正確さを
追いかけてもメリットは少ないと言う話で立ち消えになった事があります。


[ メッセージ編集済み 編集者: ぱてお 編集日時 2008-03-10 11:57 ]
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-03-10 13:16
引用:

これを、各端末の解像度に影響されず、
フォームの高さが500、横幅が300というサイズであれば、
どの解像度でもその大きさを保つようにしたいのですが、



#もしかしてIDE上の話?実行時の話?

まず、そもそも保たれています。>フォーム自体のプロパティ値は同じ
つまり、さくらさんがやりたいことは、
あるときは1024x768、あるときは1280x1024、で表示したいということになります。

それをおこなうプロパティ等はありません。
実行時に自力でリサイズとレイアウトを各コントロールごとにおこなう必要があります。
・ベースとなる解像度を決める。>必ずその解像度でデザインする。
・実行時にベース解像度と実行時解像度、ベースのDPIと実行時のDPIで係数を求める。
・その係数の小さいほうで各コントロールのサイズ、フォントサイズ、座標を再計算する。
こんな感じですかね。
ただし、コントロールごとに計算方法は異なります。
たとえば、コンボボックスのHeightはフォントサイズで決定されます。
また、ベースのデザイン時に文字がはみ出さないように端に余裕を持たせる必要があります。
結局、費用対効果が極端に低いです。
ぱてお
常連さん
会議室デビュー日: 2008/03/07
投稿数: 41
投稿日時: 2008-03-10 13:29
引用:
ただし、コントロールごとに計算方法は異なります。
たとえば、コンボボックスのHeightはフォントサイズで決定されます。
また、ベースのデザイン時に文字がはみ出さないように端に余裕を持たせる必要があります。


あー。VBの話でしたね。
VCのつもりで書いてました。
VBの場合、コントロールのサイズ設定がコントロールによって
異なるんですか、知りませんでした。
そうなると相当めんどうな処理になりそうですねぇ。
コントロールの再配置とリサイズの手間を考えるとリーズナブルな方法じゃないみたいです。
まあ、画面のピクセルサイズを大きく設定している人はウインドウやフォントが小さく
表示される事は承知の上で使っていると思うのでそれはそれとしていいのではという気が
しますねぇ。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-03-10 15:34
昔、ノートの解像度が低い時代に1024x768から縮小させるためにやったことがあります。
フォントを考えると拡大する分にはいいのですが、縮小となると8ポより小さくできないので
必然的にサイズと位置の縮小比率に限界ができてコントロールが重なったりなんてことになります。
あと、フォントサイズも掛け算した結果がそのままではなくそれ以下の小さいポイントを選択するなど面倒な処理もありますね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-10 22:36
ん。。。ごめん、なんか、話が見えない。

> ここで、自分の端末の解像度を1280×1024に設定変更したとき、
> フォームがその解像度に合わせて小さくなってしまいます。
まずここ。
どうして小さくなるの?
確かに、300×500 のままで、解像度(じゃなくて、スクリーン サイズ)が1024×768から1280×1024になると、見た目の大きさは、小さくなりますね。そうではなくて、

> フォームの高さが500、横幅が300というサイズであれば、
> どの解像度でもその大きさを保つようにしたい
という書き方から、「1024で300ピクセルに設定したのに、1280にすると240ピクセルになってしまう」ということかと、思っているのですが、いかがでしょう?


> 昔、ノートの解像度が低い時代に1024x768から縮小させるためにやったことがあります。
え、そうなんですか?
Delphi や Borland C++ Builder なら、Ver.3 あたりから、Visual Studio なら、2002 のバージョンからは、AutoSize プロパティだったかなそんなプロパティを設定しておけば、自動的に計算してくれるのでは?
(いや、かわらないから「なんで〜?」って思っています<wankuma.com>けど)
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2008-03-11 09:29
引用:

> 昔、ノートの解像度が低い時代に1024x768から縮小させるためにやったことがあります。
え、そうなんですか?
Delphi や Borland C++ Builder なら、Ver.3 あたりから、Visual Studio なら、2002 のバージョンからは、AutoSize プロパティだったかなそんなプロパティを設定しておけば、自動的に計算してくれるのでは?



.NETという言葉が無いときです。。。
当時ノートは良くて800x600でしたから。
1024x768のフル画面デザインアプリをノートでも使えるようにということでやりましたね。

引用:

Visual Studio なら、2002 のバージョンからは、AutoSize プロパティだったかなそんなプロパティを設定しておけば、自動的に計算してくれるのでは?



それって、Textや子コントロールの大きさに合わせて、っていうやつですね。
拡大縮小の自動計算はさすがに無理でしょう?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-11 11:32
私も 「解像度」 について誤解しているのではないかと思いました。 勝手に先読みした結果、のようなものを所望しているのではないかと読み取りました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)