フリガナの自動入力について

解決


サンプー  2007-03-28 17:47:47  No: 25515

XPPro,Dl6Proです。
画面に、Editを2つ貼り付け、
フリガナ  Edit1
名前      Edit2(姓名  山田太郎)
とし、Edit2に入力すると、自動でEdit1へフリガナ(半角)が入るようにプログラムを、下記サイトを参考に作成しました。
ここで、問題なのですが、姓(山田)を入力、リターンキーで確定すると姓の部分(ヤマダ)がフリガナ項目Edit1に入力される。続けて、名前をEdit2に入力(太郎)にすると、Edit1は、姓のフリガナのみ(タロウ)が入る。この場合、Edit2には姓名(山田太郎)が入っている。期待している結果は、Edit1にヤマダタロウと入るようにすることです。
どなたか、識者の方ご指導お願いします。

https://www.petitmonte.com/bbs/answers?question_id=1150


むく  2007-03-28 21:05:33  No: 25516

自分も以前フリガナを自動設定する際にいろいろとやりましたが、その際の結論は、
「文字を入力し確定(リターン)キーを押した際に取得するフリガナは確定の対象になるものだけ。」
です。

つまり、”やまだ”を入力し変換→リターン時に取得出来るのは”ヤマダ”のみ
で、次に”たろう”を入力し変換→リターン時に取得出来るのは”タロウ”のみ
のため、”たろう”を入力した際に、Edit1.txt := フリガナ取得関数(Edit1)とかで処理を行うと、”ヤマダ”は取得出来ないため、”タロウ”
のみになるのだと思います。

Edit1.txt := Edit1.txt + フリガナ取得関数(Edit1);

とかで対応できるのではないでしょうか?


むく  2007-03-28 21:06:24  No: 25517

ごめんなさい。
フリガナ取得関数(Edit2);
です。


にしの  2007-03-28 22:15:51  No: 25518

OnChangeだと速度的に遅いのですが、サンプルとして参考にしてください。
こんな感じで取得できます。

usesにimmを追加してください。

procedure TForm1.Edit1Change(Sender: TObject);
var
  i: integer;
  imc: HIMC;
  kl: HKL; // キーボードレイアウト
  Dst: PCandidateList;
  sz: integer; // サイズ
  tmppchar: PChar;
begin
  Edit1.SetFocus;
  ListBox1.Clear;
  imc := ImmGetContext(Handle);
  kl := GetKeyboardLayout(0);
  sz := ImmGetConversionList(kl, imc, PChar(Edit1.Text), nil, 0, GCL_REVERSECONVERSION);
  GetMem(Dst, sz);
  ImmGetConversionList(kl, imc, PChar(Edit1.Text), Dst, sz, GCL_REVERSECONVERSION);
  for i := 0 to Dst.dwCount - 1 do
  begin
    tmppchar := PChar(DWORD(Dst) + Dst.dwOffset[i]);
    if tmppchar^ <> #0 then
    begin
      //最初に見つけたふりがなを表示
      Edit2.Text := tmppchar;
      break;
    end;
  end;
  FreeMem(Dst);
  ImmReleaseContext(Handle, imc);
end;


にしの  2007-03-28 22:17:05  No: 25519

> ListBox1.Clear;
ListBox1は関係なかったです。消してください。


サンプー  2007-03-29 00:17:25  No: 25520

むくさん、にしのさん有難うございました。期待通りの結果が得られました。
但しにしのさんのご指摘のように、
>OnChangeだと速度的に遅いのですが、
のようですね。御開示のコードを参考に、もう少し私なりに研究してみます


やはり  2007-03-29 00:28:53  No: 25521

王道は、WM_IME_COMPOSITIONメッセージが起た時に処理すべきでしょう。


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

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






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