選択中の文字及び日本語入力中の文字の背景色と文字色をかえるには?

解決


くるくるパー  2004-04-30 08:56:09  No: 8763

初心者の中の初心者です。

RichEditでテキストエディタを作成中です。
選択領域の背景色・文字色を変えたいのと、日本語入力で漢字に変換するときの確定前の背景色・文字色を変えたいのですが、どうすればよいのでしょうか?

教えて頂けないでしょうか?


るるとん@K  2004-04-30 15:10:27  No: 8764

それは面倒ですよ
他のエディタコンポを使った方がいいですよ
フリーならそんぴん氏のTSonEdit等がその機能に対応しています


るるとん@K  2004-04-30 15:12:20  No: 8765

ぁ、変換中は無理かもしれません


るるとん@K  2004-04-30 16:00:09  No: 8766

そういえばこれの下のほうにのってました
http://hp.vector.co.jp/authors/VA009712/take/delphi/kabedel.htm


くるくるパー  2004-05-03 09:29:09  No: 8767

るるとん@Kさん返答ありがとうございます。

>そういえばこれの下のほうにのってました
を試してみました。入力中は色が変わりますが(文字が赤、背景が青)、変換中は変わりません(文字が黒、背景が灰色で見にくい)。

無理なのでしょうか?


るるとん@K  2004-05-03 20:49:37  No: 8768

IMEのやつですね
あれ見にくいですか?


くるくるパー  2004-05-03 21:07:07  No: 8769

どうも黒文字に背景が灰色では私には見にくいです。
入力中は下線が表示されるので色を変えなくてもよいのですが、変換中は背景を例えばメモ帳のように水色にしたり、もしくは背景をなしにすればもっと見やすくなると思ったしだいです。贅沢な注文かもしれません。


るるとん@K  2004-05-04 03:01:01  No: 8770

サンプルのCompColorのに他にもプロパティがあるんじゃないですか?


Mr.XRAY  URL  2004-05-04 05:02:06  No: 8771

くるくるバーさんへ

以下のコードで可能です.
漢字変換する前にこのコードを実行するとか,RichEditにフォーカスが
移動する時とか,適当に...
なお,選択中の文字列の属性はSelAttributesで変更します.

//====================================================================
//   漢字変換中の文字や文字の背景色の設定
//   RichEdit専用
//   usesにRichEditが必要
//   RichEditの選択文字列の属性はSelAttributesを使用する
//
//   CompColor構造体のメンバ
//     crText: TColorRef;       文字列のテキストカラー
//     crBackground: TColorRef; 背景色
//     dwEffects: Longint;      文字書式の特殊効果
//====================================================================
procedure TForm1.SpeedButton2Click(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,Longint(@CompColor));
end;


くるくるパー  2004-05-04 07:59:59  No: 8772

Mr.XRAYさん、コメント付きのコードまで書いて頂きありがとうございます。

私なりに調べていたのですが、

  CompColorは4つの配列で,
  [0]は入力中
  [1]は変換中
  [2]は変換された文字列
  [3]はいちど変換されたものをユーザーが入力文字(かなやアルファベット)に戻した文字列

ということは解り試していたのですが、「正しくない型キャスト」といったエラーがでたり…という状態でした。

Mr.XRAYさんの書かれたコードでうまくいきました。本当にありがとうございます。

選択中の文字列についてはこれからやってみようと思いますが、とりあえず[[解決]]とさせていただきます。

るるとん@Kさん、Mr.XRAYさん、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加