フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: TRichEdit で英数字等のフォントが勝手に変わる (Delphi 2009 以降)
DEKO
管理者
投稿数: 2691
TRichEdit で英数字等のフォントが勝手に変わる (Delphi 2009 以降)
on: 2013/04/06 12:21 Sat

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

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.031 sec.