Edit1に顧客番号、Edit2にふりがな、Edit3に氏名を入力していますが、
Edit2のふりがなをうっかり変換してしまい困っていました。
サンプルプログラム452を参考にして、
Edit2Enter手続きでまず以前の設定をdwConversionBK、dwSentenceBKに保存し、
その後、IMEの「ひらがな無変換」モード設定をしました。
ふりがな入力が済むと、Edit2Exit手続きに保存した設定を使って元に戻しています。
こういう使い方で大丈夫ですか? 一応動いています。
Windows7 32Bit + Delphi XE4 Starter
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure FormShow(Sender: TObject);
procedure Edit2Enter(Sender: TObject);
procedure Edit2Exit(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
// IMEのパラメータ保存用
dwConversionBK : DWORD;
dwSentenceBK : DWORD;
implementation
uses IMM;
{$R *.dfm}
procedure TForm1.Edit2Enter(Sender: TObject);
var
Imc : HIMC;
dwConversion : DWORD;
dwSentence : DWORD;
begin
//IMEをオープン
SetImeMode(Edit2.Handle, imOpen);
//入力コンテキストを取得
Imc := ImmGetContext(Edit2. Handle);
try
// パラメータの内容を保存する
ImmGetConversionStatus(Imc, dwConversionBK, dwSentenceBK);
//パラメータを設定
dwConversion := IME_CMODE_NATIVE or IME_CMODE_FULLSHAPE;
dwSentence := IME_SMODE_NONE;
//IMEの状態を設定
ImmSetConversionStatus(Imc, dwConversion, dwSentence);
finally
//ImmGetContextしたら必ず解放する
ImmReleaseContext(Edit2.Handle, Imc);
end;
end;
procedure TForm1.Edit2Exit(Sender: TObject);
var
Imc : HIMC;
begin
//IMEをオープン
SetImeMode(Edit2.Handle, imOpen);
//入力コンテキストを取得
Imc := ImmGetContext(Edit2. Handle);
try
//保存していたIMEの状態を設定
ImmSetConversionStatus(Imc, dwConversionBK, dwSentenceBK);
finally
//ImmGetContextしたら必ず解放する
ImmReleaseContext(Edit2.Handle, Imc);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.ImeMode := imClose; // 顧客番号
Edit2.ImeMode := imHira; // ふりがな
Edit3.ImeMode := imHira; // 氏名
end;
end.
なお、dwConversionBKには25(00011001)が入っていました。
ローマ字・全角・NATIVEという意味みたいです。
dwSentenceBKには8(00001000)で、
連文節変換という意味みたいです。
|