初心者の中の初心者です。
RichEditでテキストエディタを作成中です。
選択領域の背景色・文字色を変えたいのと、日本語入力で漢字に変換するときの確定前の背景色・文字色を変えたいのですが、どうすればよいのでしょうか?
教えて頂けないでしょうか?
それは面倒ですよ
他のエディタコンポを使った方がいいですよ
フリーならそんぴん氏のTSonEdit等がその機能に対応しています
ぁ、変換中は無理かもしれません
そういえばこれの下のほうにのってました
http://hp.vector.co.jp/authors/VA009712/take/delphi/kabedel.htm
るるとん@Kさん返答ありがとうございます。
>そういえばこれの下のほうにのってました
を試してみました。入力中は色が変わりますが(文字が赤、背景が青)、変換中は変わりません(文字が黒、背景が灰色で見にくい)。
無理なのでしょうか?
IMEのやつですね
あれ見にくいですか?
どうも黒文字に背景が灰色では私には見にくいです。
入力中は下線が表示されるので色を変えなくてもよいのですが、変換中は背景を例えばメモ帳のように水色にしたり、もしくは背景をなしにすればもっと見やすくなると思ったしだいです。贅沢な注文かもしれません。
サンプルのCompColorのに他にもプロパティがあるんじゃないですか?
くるくるバーさんへ
以下のコードで可能です.
漢字変換する前にこのコードを実行するとか,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;
Mr.XRAYさん、コメント付きのコードまで書いて頂きありがとうございます。
私なりに調べていたのですが、
CompColorは4つの配列で,
[0]は入力中
[1]は変換中
[2]は変換された文字列
[3]はいちど変換されたものをユーザーが入力文字(かなやアルファベット)に戻した文字列
ということは解り試していたのですが、「正しくない型キャスト」といったエラーがでたり…という状態でした。
Mr.XRAYさんの書かれたコードでうまくいきました。本当にありがとうございます。
選択中の文字列についてはこれからやってみようと思いますが、とりあえず[[解決]]とさせていただきます。
るるとん@Kさん、Mr.XRAYさん、ありがとうございました。
ツイート | ![]() |