掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TRichEditでのIME入力 (ID:28234)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コンポーネント化してみた。 IMEから入力されると OnWMImeComposition イベントが発生するだけですが… unit MyRichEdit; interface uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ComCtrls; type TWMImeCompositionEvent = procedure(Sender: TObject; const S: String) of object; TMyRichEdit = class(TRichEdit) private { Private 宣言 } FOnWMImeComposition: TWMImeCompositionEvent; procedure WMImeComposition(var Message: TMessage); message WM_IME_COMPOSITION; protected { Protected 宣言 } procedure DoWMImeComposition(const S: String); virtual; public { Public 宣言 } published { Published 宣言 } property OnWMImeComposition: TWMImeCompositionEvent read FOnWMImeComposition write FOnWMImeComposition; end; procedure Register; implementation uses Imm; procedure Register; begin RegisterComponents('Samples', [TMyRichEdit]); end; { TMyRichEdit } procedure TMyRichEdit.WMImeComposition(var Message: TMessage); var Imc: HIMC; L: Integer; S: String; begin inherited; if Message.LParam and GCS_RESULTSTR <> 0 then begin Imc := ImmGetContext(Handle); L := ImmGetCompositionString(Imc, GCS_RESULTSTR, nil, 0); SetLength(S, L); ImmGetCompositionString(Imc, GCS_RESULTSTR, PChar(S), L); ImmReleaseContext(Handle, Imc); DoImeComposition(S); end; end; procedure TMyRichEdit.DoWMImeComposition(const S: String); begin if Assigned(FOnWMImeComposition) then FOnWMImeComposition(Self, S); end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.