Delphi2010でフリガナを取得する方法

解決


yaamada  2010-03-30 23:01:14  No: 38139

こんにちは。
いつも参考させていただいています。

過去ログを参照し、
入力した文字の半角カナを取得するプログラムをテストしました。

delphi7では正常に動いているのですが、
delphi2010だと、入力した文字の後ろに、
余計な文字が入ってしまい、
正常に取得することができません。

どうかご教授よろしくお願いします。

uses imm;

function GetFurigana (Control:TwinControl):String;
var
 IMC:HIMC;
 Len:Longint;
 Str:String;
begin
  Imc:=ImmGetContext(Control.Handle);
  Len:=ImmGetCompositionString(Imc,GCS_RESULTREADSTR,nil,0);
  SetLength(Str,Len+1);
  ImmGetCompositionString(IMC,GCS_RESULTREADSTR,PChar(Str),Len+1);
  SetLength(Str,Len);
  Result:=Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text:=GetFurigana(Edit1);
end;


TS  2010-03-31 04:49:44  No: 38140

正解は知りません、一応動作させると言う事で。

function GetFurigana (Control:TwinControl):String;
var
 IMC:HIMC;
 Len:Longint;
 Str:AnsiString;
begin
  Control.SetFocus;
  Imc:=ImmGetContext(Control.Handle);
  Len:=ImmGetCompositionStringA(Imc,GCS_RESULTREADSTR,nil,0);
  SetLength(Str,Len+1);
  ImmGetCompositionStringA(IMC,GCS_RESULTREADSTR,PAnsiChar(Str),Len + 1);
  SetLength(Str,Len);
  Result:=Str;
end;


これでいける?  2010-03-31 05:12:50  No: 38141

function GetFurigana(Control: TwinControl): String;
var
 IMC: HIMC;
 Len: Longint;
 Str: String; //String型はデフォルトでUnicode
begin
  Imc := ImmGetContext(Control.Handle);
  Len := ImmGetCompositionString(Imc, GCS_RESULTREADSTR, nil, 0);
  //返値(Len)がバイト単位らしいので、Unicode文字列の長さは 2で割る。(ImmGetCompositionStringWでも返値はバイト単位らしい)
  Len := Len div 2;
  SetLength(Str, Len+1);
  ImmGetCompositionString(IMC,GCS_RESULTREADSTR, PChar(Str), Len+1);
  SetLength(Str, Len);
  Result := Str;
end;


もしかして  2010-03-31 05:21:58  No: 38142

//ImmGetCompositionString(IMC,GCS_RESULTREADSTR, PChar(Str), Len+1);
ここも直さないとまずいのかな?
ImmGetCompositionString(IMC,GCS_RESULTREADSTR, PChar(Str), Len*2+2);


yaamada  2010-04-01 03:18:18  No: 38143

ありがとうございました!
正常に動作しました。

Unicode対応に変更になってから、
旧バージョンで作成したプログラムが上手く動作しなくて、苦労してます。
まだ手に入れたばかりなので、
どう変わったのか、今後勉強することにします。

TSさん、お世話になりました。


yaamada  2010-04-01 03:18:47  No: 38144

解決忘れてました。


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

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






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