喫茶XRAYトップページ


[7615] サンプルプログラム452_[ひらがな][カタカナ]だけを入力について返信 削除
2014/5/22 (木) 15:50:22 taki
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)で、
連文節変換という意味みたいです。


[7616] Re:サンプルプログラム452_[ひらがな][カタカナ]だけを入力について返信 削除
2014/5/22 (木) 17:12:31 Mr.XRAY
▼ takiさん

>サンプルプログラム452_[

ギクッ.おかぼんさんに続いて.また間違い ? バグの報告 ?
ではなさそう.
改良への参考のようですので,後で確認されていただきまます.ハイ.
ざっと見た限りでは,こちらの方がよさそうですね.


INCM/CMT
Cyclamen v3.82