Delphi の TRichEdit がラップしている RichEdit のバージョンが Delphi 2009 以降で変更になっているためにこの現象が起きます。
unit uRichEditHelper;
interface
uses Windows, Messages, ComCtrls;
type TRichEditHelper = class helper for TRichEdit private function GetLangOptions: DWORD; procedure SetLangOptions(const Value: DWORD); published property LangOptions: DWORD read GetLangOptions write SetLangOptions; end;
const IMF_AUTOKEYBOARD = $00000001; IMF_AUTOFONT = $00000002; IMF_IMECANCELCOMPLETE = $00000004; IMF_IMEALWAYSSENDNOTIFY = $00000008; IMF_AUTOFONTSIZEADJUST = $00000010; IMF_UIFONTS = $00000020; IMF_NOIMPLICITLANG = $00000040; IMF_DUALFONT = $00000080; IMF_NOKBDLIDFIXUP = $00000200; IMF_NORTFFONTSUBSTITUTE = $00000400; IMF_SPELLCHECKING = $00000800; IMF_TKBPREDICTION = $00001000;
implementation
{ TRichEditHelper }
function TRichEditHelper.GetLangOptions: DWORD; const EM_GETLANGOPTIONS = WM_USER + 121; begin result := SendMessage(Self.Handle, EM_GETLANGOPTIONS, 0, 0); end;
procedure TRichEditHelper.SetLangOptions(const Value: DWORD); const EM_SETLANGOPTIONS = WM_USER + 120; begin SendMessage(Self.Handle, EM_SETLANGOPTIONS, 0, Value); end; end.
この uRichEditHelper.pas を uses して、
RichEdit1.LangOptions := RichEdit1.LangOptions and (not IMF_DUALFONT);
こんなコードを書いておくと、デュアルフォントが無効になり、従来の Delphi の TRichEdit と同じ動作になります。定数の値は "Windows SDK for Windows 8" の Richedit.h から持ってきています。EM_GETLANGOPTIONS message (Windows) にフラグの詳細な説明がありますが、ここには Richedit.h に記載のないフラグも載っているようです。
See Also:
[Windows SDK for Windows 8]
http://msdn.microsoft.com/ja-jp/windows/hardware/hh852363.aspx
[EM_GETLANGOPTIONS message (Windows)]
http://msdn.microsoft.com/ja-jp/library/windows/desktop/bb788040%28v=vs.85%29.aspx
|