☆よみがなを取得する。
エクセルで作られた名簿をよみがなで五十音順に並べたいと相談を受けました。
「簡単やし、メールしておいて」
そして届いた名簿は・・・なんと漢字の名前が並んでいるだけ・・・。
これだけで、よみがなで並び替えができると思っているなんてすごい(^^;
ということで、よみがな入力から始めることになりました。
とりあえず漢字からよみがなを変換し、それを確認してもらい、無事作業を終了しました。
よみがなを取得する関数です。
上記関数の使用例です。
[参考にしたサイト]
Programming Library
Delphi Q & A掲示板
漢字からかなへの変換
MSDN
Input Method Editor (IME)
「簡単やし、メールしておいて」
そして届いた名簿は・・・なんと漢字の名前が並んでいるだけ・・・。
これだけで、よみがなで並び替えができると思っているなんてすごい(^^;
ということで、よみがな入力から始めることになりました。
とりあえず漢字からよみがなを変換し、それを確認してもらい、無事作業を終了しました。
よみがなを取得する関数です。
uses Imm; function GetYomi(Str: String; var SL: TStringList): Boolean; var IMC: HIMC; KL: HKL; lpDst: PCandidateList; Offset: DWORD; I, Size: Integer; P: PChar; S: String; DummyEdit: TEdit; begin DummyEdit := TEdit.Create(nil); DummyEdit.Width := 1; DummyEdit.Parent := Application.MainForm; DummyEdit.Left := 1000; DummyEdit.Top := 1000; Application.MainForm.ActiveControl := DummyEdit; SL.Clear; Result := False; IMC := ImmGetContext(DummyEdit.Handle); try if IMC = 0 then Exit; KL := GetKeyboardLayout(0); Size := ImmGetConversionList(KL, IMC, PChar(Str), nil, 0, GCL_REVERSECONVERSION); GetMem(lpDst, Size); try ImmGetConversionList(KL, IMC, PChar(Str), lpDst, Size, GCL_REVERSECONVERSION); P := PChar(DWORD(lpDst) + lpDst^.dwOffset[1]); Offset := 0; for I := 0 to lpDst^.dwCount - 1 do begin P := PChar(DWORD(P) + Offset); S := String(P); Offset := Length(S) + 1 ; // なぜか同じ読みを複数取得するので、同じものは追加させない。 if SL.IndexOf(S) < 0 then SL.Add(S); end; Result := True; finally FreeMem(lpDst); end; finally ImmReleaseContext(DummyEdit.Handle, IMC); DummyEdit.Free; end; end;
上記関数の使用例です。
procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; begin SL := TStringList.Create; try if GetYomi(Edit1.Text, SL) then ListBox1.Items.Assign(SL) else ShowMessage('取得できませんでした'); Button1.SetFocus; finally SL.Free; end; end;
[参考にしたサイト]
Programming Library
Delphi Q & A掲示板
漢字からかなへの変換
MSDN
Input Method Editor (IME)
| 固定リンク