TRichEditで任意のフォントを指定すると、設計時と実行時の画面表示が異なることがある
対象となる製品
- RAD Studio XE8以降
- Delphi XE8以降
- C++Builder XE8以降
問題
Windows 10のディスプレイ設定 > "テキスト、アプリ、その他の項目のサイズを変更する"の設定値を"100%(規定値)"から150%に変更し、TRichEditで特定のフォントを指定すると、VCLフォームデザイナ上のRichEditの表示と実行時のRichEditの表示が下図のように異なります。
(下図の例は、TRichEditのFont->Name="Courier New"、Font->Size=15、Font->Charset="DEFAULT_CHARSET"に設定)
この問題はRichEdit固有の不具合で、特定のキャラクタセットやフォントの組み合わせによって、RAD Studio/C++Builder/Delphi XE8以降のバージョンで発生します。
解決
この問題を解決する方法は、以下の手順の通りです。
- TRichEdit->Font->CharsetをSHIFTJIS_CHARSETからDEFAULT_CHARSETへ変更
- Vcl.ComCtl.pasソースコードの以下の箇所を修正
- (修正前)
procedure TCustomRichEdit.CreateWnd; .. .. inherited CreateWnd; Font.Charset := GetDefFontCharSet; .. ..
- (修正後)
procedure TCustomRichEdit.CreateWnd; .. .. inherited CreateWnd; if (SysLocale.FarEast) and not (SysLocale.PriLangID = LANG_JAPANESE) then Font.Charset := GetDefFontCharSet; .. ..
- 修正したVcl.ComCtl.pasをプロジェクトに追加し、ビルドする
- アプリケーションを実行すると、下図のようにRichEditは設計時と実行時で同じ表示になります。
- サムネイルの作成エラー: ファイルがありません
修正したVcl.ComCtl.pasの適用方法は、以下のドキュメントを参照してください。