・usesに Imm を追加 ・TEditコンポーネントを2つ貼り付け、edSimeiKとedSimeiFの名前にする ・edSimeiKのOnChangeイベントに下記を記述する ・TTimerコンポーネントを貼り付け、Intervalプロパティを0にして OnTimerイベントに下記を記述する ・プロジェクトオプションの[型付き定数への代入]をチェックする implementation {$R *.dfm} const svItem: TEdit = Nil; var K_Simei, F_Simei: TEdit; //====================================================================== // 機能:漢字入力内容からフリガナを取得する //====================================================================== procedure TForm1.edSimeiKChange(Sender: TObject); var ws: string; begin K_Simei := TEdit(Sender); ws := 'edSimeiF'; F_Simei := TEdit(FindComponent(ws)); Timer1.Interval := 100; {氏名入力からフリガナをセット} end; //====================================================================== // 機能:漢字入力内容からフリガナを取得する //====================================================================== procedure TForm1.Timer1Timer(Sender: TObject); // 機能:漢字の1バイト目かチェック function iskanji1( cc: char ): boolean; begin Result := (($81<=Ord(cc)) and (Ord(cc)<=$9F)) or (($E0<=Ord(cc)) and (Ord(cc)<=$FC)); end; const svSimei: string = ''; var IMC: HIMC; Len: Longint; Str, InpChar: String; begin Timer1.Interval := 0; if K_Simei.Text='' then begin //氏名が未入力ならフリガナや作業用変数をクリア F_Simei.Text := ''; svSimei := ''; Exit; end; if K_Simei<>svItem then svSimei:=''; if (svSimei<>K_Simei.Text) then begin //追加入力された文字を取得 InpChar := Copy( K_Simei.Text, Length(svSimei)+1, 2 ); svSimei := K_Simei.Text; if (InpChar=' ') or (InpChar=' ') then begin //半角・全角スペースならフリガナに半角スペース追加 F_Simei.Text := F_Simei.Text + ' '; Exit; end; end; //(下記は半角入力時に前回漢字入力のフリガナが付かない様に対策) if (InpChar='') or (isKanji1(InpChar[1])=FALSE) then Exit; //フリガナの取得 SetLength( Str,255 ); Imc := ImmGetContext( K_Simei.Handle ); Len := ImmGetCompositionString( IMC,GCS_RESULTREADSTR,PChar(Str),255 ); SetLength( Str,Len ); F_Simei.Text := F_Simei.Text + Str; ImmReleaseContext( K_Simei.Handle,Imc ); svItem := K_Simei; end; (2020/07/16 一部修正) |
・インターネット上の情報や書籍の内容を一部参考に作成してます。 ・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。 ・記述内容に問題点や改善点がありましたらこちらまでお願いします。 |