名前 題名 ▼ Fusaさん > Editから入力をしたときのフリガナを取得する、 > というのを一歩すすめて > > 漢字の再変換機能を使って入力もしてないのに読み仮名を取得するコードはいかがでしょうか? > > 以前、どこかで拾ったサンプルです。 > > unit Unit7; > > interface > > uses > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, > Dialogs, StdCtrls, Imm; > > type > TForm7 = class(TForm) > ListBox1: TListBox; > Edit1: TEdit; > Label1: TLabel; > Label2: TLabel; > Button1: TButton; > procedure Button1Click(Sender: TObject); > private > { Private 宣言 } > public > { Public 宣言 } > end; > > var > Form7: TForm7; > > implementation > > {$R *.dfm} > > procedure TForm7.Button1Click(Sender: TObject); > var > imc: HIMC; // 入力コンテキストのハンドル > KeyBoardLayout: HKL; // キーボードレイアウト > DataList: PCandidateList; // CANDIDATELIST 構造体へのポインタ > intSize: integer; // サイズ > tmpPChar: PChar; > offSet: DWORD; > i, intIndex: Integer; > begin > Edit1.SetFocus; > Label1.Caption := ''; > Label2.Caption := ''; > ListBox1.Clear; > > > // 指定されたウィンドウに関連付けられている入力コンテキストを取得します。 > imc := ImmGetContext(Application.Handle); > try > KeyBoardLayout := GetKeyboardLayout(0); > > // 変換結果を受け取るために必要なバッファサイズを取得します。 > intSize := ImmGetConversionList( > KeyBoardLayout, imc, PChar(Edit1.Text), nil, 0, GCL_REVERSECONVERSION); > > // DataListに、intSize分のメモリを割り当てます。 > GetMem(DataList, intSize); > > try > // Edit1.Textに入力された文字列を逆変換し、DataListに保存します。 > ImmGetConversionList( > KeyBoardLayout, imc, PChar(Edit1.Text), DataList, intSize, GCL_REVERSECONVERSION); > > tmpPChar := PChar(DWORD(DataList) + DataList^.dwOffset[1]); > > // フリガナを表示します。 > Label1.Caption := String(tmpPChar); > > offset := 0; > > // 変換候補数を表示します。 > Label2.Caption := IntToStr(DataList^.dwCount) + ' 件'; > > for i := 0 to DataList^.dwCount - 1 do > begin > tmpPChar := PChar(DWORD(tmpPChar) + offset); > intIndex := ListBox1.Items.Add(String(tmpPChar)); > offSet := Length(ListBox1.Items[intIndex]) + 1; > end; > > finally > // メモリを解放します。 > FreeMem(DataList); > end; > finally > // 入力コンテキストを解放し、コンテキスト内の関連メモリのロックを解除します。 > ImmReleaseContext(Application.Handle, imc); > end; > end; > > > end. > Vistaでも動きます。 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link