こんにちは。
いつも参考させていただいています。
Edit1に名前を入力し、そのふりがな(入力したひらがな)を
Edit2に取り出すようにしたいのですが、どのようにコーディングすればよいのでしょうか?
過去に、「IMEの入力値を取得(よみがな)」という質問を参考にEditとLisBoxを利用して実行することはできましたが、ListBoxだと候補がたくさん出てきてしまって・・・。
入力したひらがなだけを取得したいのですが・・・。
よろしくお願いします。
これでしょうか。
C++Builderのサンプルです。
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=10#0168.txt
にしのさんに教えていただいたサンプルや、他にもいくつかの
サンプルを探して参考にコーディングしましたが、
下のコードでは、フリガナが半角カタカナになってしまいます。
ひらがなにするにはどこをどうしたらよいかがわからなくて・・・
見ていただけるとさいわいです。
よろしくお願いします。
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;
半角カタカナであっています。
それを全角ひらがなにするだけです。
検索すれば結構出てきます。
こんなんありましたけど・・↓(やってることはサッパリわかりませぬ^^;)
function TForm1.StrConv(Value: String; MapFlag: Integer): String;
// LCMAP_FULLWIDTH:半角 → 全角
// LCMAP_HALFWIDTH:全角 → 半角
// LCMAP_HIRAGANA :全角カタカナ → ひらがな
// LCMAP_KATAKANA :ひらがな → 全角カタカナ
// LCMAP_LOWERCASE:大文字 → 小文字
// LCMAP_UPPERCASE:小文字 → 大文字
var
DestStr: PChar;
DestSize: Integer;
begin
Result := Value;
DestSize := LCMapString(LOCALE_SYSTEM_DEFAULT, MapFlag,
PChar(Value), Length(Value), Nil, 0);
if DestSize = 0 then Exit;
DestStr := AllocMem(DestSize + 1);
Try
DestSize := LCMapString(LOCALE_SYSTEM_DEFAULT, MapFlag,
PChar(Value), Length(Value), DestStr, DestSize);
if DestSize = 0 then Exit;
Result := StrPas(DestStr);
Finally
FreeMem(DestStr);
end;
end;
半角から全角にすることができました。
tamaさんのレスも参考にさせていただいたのですが、
ひらがなにはなぜだかならなくて・・・。
でも、全角カナでも十分なのでこれでいこうと思います。
本当にありがとうございました。
ただ、Edit1に「姓(スペース)名」と入れると、フリガナが
名だけしか取れないのですが、何が問題なのでしょうか?
再びご指導お願いします。
ツイート | ![]() |