DPI設定が変更された環境で、Richeditのフォントサイズを指定するには?

解決


かんとく  2011-07-06 17:22:31  No: 40754  IP: 192.*.*.*

お世話になっております。

XP,Delphi2007です。

DPIの設定が違う環境でも、画面上のフォントサイズの見た目が同じになるようにしようとしています。

例えば、開発環境が96DPIで、ソフトを使う環境が120DPIの場合、
memo1.Font.PixelsPerInch:=96;
memo1.Font.size:=10;
とすると、memo1のフォントサイズは、ソフトを使う環境(120DPIの場合)でも、96DPI環境でのフォントサイズ10の大きさと同じなります。

しかし、richeditの場合、
richedit1.Font.PixelsPerInch:=96;
richedit1.Font.size:=10;
(または
richedit1.SelStart:=0;
richedit1.SelLength:=length(richedit1.Text);
richedit1.SelAttributes.Size:=10;)
としても、richedit1のフォントサイズは、120DPI環境でのフォントサイズ10の大きさになってしまいます。

richeditの場合は、
richedit1.Font.PixelsPerInch:=96;
以外の方法で指定するのでしょうか?

よろしくお願いします。

編集 削除
DEKO  2011-07-06 20:57:41  No: 40755  IP: 192.*.*.*

Form の Scaled を False に設定するのとは違う話でしょうか?

編集 削除
かんとく  2011-07-09 20:18:00  No: 40756  IP: 192.*.*.*

ありがとうございます。

Form の Scaled を False に設定してみましたが、うまくいきませんでした。


何がしたいのか、わかりにくかったかもしれないので、簡単に言うと、DPI96でも、DPI120でも、画面上での文字サイズを同じにしたいです。

Memoではできるので、RichEditでの方法を知りたいです。

よろしくおねがいします。

編集 削除
DEKO  2011-07-09 23:17:29  No: 40757  IP: 192.*.*.*

> 簡単に言うと、DPI96でも、DPI120でも、画面上での文字サイズを同じにしたいです。
失礼しました。コントロールの大きさではなく、フォントの大きさなのですね。

既に表示されているものに対してなら...

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Font.PixelsPerInch := 96;
  Memo1.Font.Size := 12;
  RichEdit1.Font.PixelsPerInch := 96;
  RichEdit1.Font.Size := Trunc(12 / Screen.PixelsPerInch * RichEdit1.Font.PixelsPerInch);
end;

こんな感じでいいようですが、入力を伴うとなるともう一工夫必要なようです。

この QC 絡みのような気もしますね。

Report No: 65450            Status: Reported
Font scaling is not working properly
http://qc.embarcadero.com/wc/qcmain.aspx?d=65450
QCWIN:Defect_No=65450

編集 削除
かんとく  2011-07-11 11:37:05  No: 40758  IP: 192.*.*.*

ありがとうございます。

コントロールの大きさについては、今までコントロール1つひとつプログラム実行時にサイズと位置を指定していました。

教えてもらったとおり、Form の Scaled を False に設定してみましたら、コントロールのサイズや位置がを、一つひとつ指定しなくても、開発環境と同じになりました。

この点では、教えていただいて助かりました。
ありがとうございました。


フォントサイズについては、
http://qc.embarcadero.com/wc/qcmain.aspx?d=65450
を見てみましたが、英語がよくわからず、あまり理解できませんでした。

もうちょっと調べてみます。

編集 削除
tor  2011-07-11 12:13:08  No: 40759  IP: 192.*.*.*

Scaled=falseでちょうどよくなるということは
「見かけ上の大きさ」を同じにしたいのではなく「同じドット数」になるようにしたいということですか?
(それだと解像度の高い環境では相対的に小さく見えるはずですが)
それでOKなのだとしたら、Font.SizeではなくFont.Heightで指定してはどうでしょう。

編集 削除
かんとく  2011-07-14 18:01:27  No: 40760  IP: 192.*.*.*

ありがとうございます。

もしかしたら、「同じドット数」になるようにしたいということだったかもしれません。

Font.SizeではなくFont.Heightで指定すると、期待する結果になりました。

画面上に線を引いたり、MemoやRichEditをPixel単位で配置したりしていて、それらの大きさや配置と、richedit内の文字サイズが合うようにしたかったのですが、そのとおりになりました。

とりあえず解決します。
ありがとうございました。

編集 削除