DPIを既定値に一時変更

解決


mizuki  2015-01-23 02:32:54  No: 47001  IP: [192.*.*.*]

Win7+XE3 starter
お世話になります。DPIの設定が違うPCで動かした場合でもScaled:=false; AutoScroll:=False;  にして各コンポーネントの位置、サイズがDPIの既定値(96DPI)で設計した時のスタイルが崩れないようになりました。しかしMonthCalendarは枠をはみ出して表示が欠けてしまいました。
そこでもしもできるのであればDPIが既定値以外に設定してあったら起動時にDPIを既定値に変更させれば良いのではないかと考えました。変更方法など教えてください。よろしくお願いします。

編集    削除
deldel  2015-01-23 18:57:57  No: 47002  IP: [192.*.*.*]

ディスプレイの解像度の変更のことでしょうか?

編集    削除
mizuki  2015-01-23 19:52:27  No: 47003  IP: [192.*.*.*]

deldel様
>ディスプレイの解像度の変更のことでしょうか?
はい、そうです。  デスクトップを右クリックして「個人設定」で規定値以外に変更
したときのトラブル対策を考えたものです。
よろしくお願いします。

編集    削除
deldel  2015-01-23 20:02:48  No: 47004  IP: [192.*.*.*]

規定値が何かを判断するのは置いといて、解像度の変更は、
Mr.XRAYさんのサイトにばっちりありますよ^^
mrxray.on.coocan.jp/Delphi/plSamples/020_DisplayResolution.htm

編集    削除
mizuki  2015-01-24 19:02:46  No: 47005  IP: [192.*.*.*]

deldel様  お返事をありがとうございます。

ご紹介のあった中から「03_設定可能な解像度のリストから選択して解像度を
変更」をコピペして下記の行を入れてテストしてみました。

  with panel1 do begin
    width:=238; height:=207; left:=400;   top:=100;    color:=clblack;
  end;

  with monthcalendar1 do begin    // Panel1の上にカレンダーを貼り付け
    width:=218; height:=187;  left:=10;   top:=10;
  end;

これでDPIを既定値(100%)で確認後
  *  コントロールパネルでDPIを125%に変更==>カレンダーで左右(日、土)が欠ける。
  *  画面のサイズ一覧から既定値と思われる1920x1080 32bits 60Hzでサイズ変更
  
この結果ではやはりカレンダーが正常に描かれませんでした。いろいろサイズ一覧から選択
して試したのですが同じでした。

この問題に対処するにはカレンダーの自作しかないのでしょうか?
よろしくお願いします。

編集    削除
Mr.XRAY  2015-01-26 01:08:42  No: 47006  IP: [192.*.*.*]

解決方法ではありません.
ちょっと気になったものですから.

「画面の解像度」と言った場合,一般的には,縦方向と横方向の,画面のピクセル (ドット数) を意味するようです.
[020_画面 ( ディスプレイ ) の解像度の取得と変更]  は,その解像度関係のテストサンプルです.
DPI の変更は,レジストリの操作で可能なようです.

[020] [10_画面サイズの mm 単位までの取得と DPI 仮想化]
http://mrxray.on.coocan.jp/Delphi/plSamples/020_DisplayResolution.htm#10

にある参考リンクの
[すべてのユーザーに対して DPI を変更する方法]
の記事を参考にしてみてください.
レジストリの値の変更には管理者権限が必要です.

編集    削除
mizuki  2015-01-27 23:54:19  No: 47007  IP: [192.*.*.*]

Mr.XRAY様
解像度など勉強させていただきました。ありがとうございました。
解像度が「既定値」で一定であればMonthCalendarも設計時の状態で表示され
るものと期待して質問させていただきましたがこの方法ではMonthCalendar
には反映されないことが分かりました。
とりあえずDateTimePickerならスペースに収まるのでこれを使うことにしますが
やはりCalendarが便利ですのでMr.XRAY様のサイトを参考に自作していきたいと
思います。またDelphi6であればMonthCalendarも設計時とおりに収まるので場合によっては
Delphi6に戻すことも対策かとも思います。
色々と勉強になりました。  ありがとうございました。

編集    削除