Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2005年02月01日] [更新 2014年01月23日] Delphi サンプルプログラム集
440_漢字変換中の文字色 ( TRichEdit 専用 )
動作確認等 Windows 7 U64(SP1) + Delphi 2007-R2 Pro + Microsoft Office IME 2007
Unicode 版の RichEdit では機能しない
440_IMEColor.zip [233 KB] 2014年01月23日版 (EXE 同梱)







漢字変換中の文字の色 ( TRichEdit 専用 )


かな漢字変換中の文字の色と背景色等の設定方法例です.TRichEdit専用です.
TRichEdit では,各種メッセージ処理や定数などが定義されていて,この例のような処理を可能にしています.
このサンプルで使用している EM_SETIMECOLOR メッセージは, Unicode 版の RichEdit では機能しません.実行すると,戻り値が 0 となりメッセージの処理に失敗します.


図1
実行時画面
  • 文節変換中

リスト1
漢字変換中の文字の色を変えてみる
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, RichEdit;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  漢字変換中の文字や文字の背景色の設定(RichEdit専用)
//
//  usesにRichEditが必要
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
var
  //CompColor構造体の配列
  CompColor : array[0..3] of TCompColor;
begin
  //現在のIME構成カラーをCompColor構造体に取得
  SendMessage(RichEdit1.Handle, EM_GETIMECOLOR, 0, Longint(@CompColor));

  //入力中の文字列の色と背景色・書式設定
  CompColor[0].crBackGround := clRed;
  CompColor[0].crText       := clWhite;
  CompColor[0].dwEffects    := CFE_ITALIC or CFE_BOLD;

  //変換中(文節内)の文字列の色と背景色・書式設定
  CompColor[1].crBackGround := clBlue;
  CompColor[1].crText       := clYellow;
//  CompColor[1].dwEffects    := CFE_STRIKEOUT or CFE_UNDERLINE;

  //変換済(変換済文節内)文字列の色と背景色・書式設定
  CompColor[2].crBackGround := clLime;
  CompColor[2].crText       := clBlack;
  CompColor[2].dwEffects    := CFE_ITALIC;

  //文節長変換中文字・背景色・書式設定
  //変換済をユーザーが入力文字(かなやアルファベット)に戻した文字列
  CompColor[3].crBackGround := clGreen;
  CompColor[3].crText       := clRed;
  CompColor[3].dwEffects    := CFE_BOLD;

  //IME構成カラーを設定
  SendMessage(RichEdit1.Handle, EM_SETIMECOLOR, 0, Integer(@CompColor));
end;

end.