喫茶XRAYトップページ

[スレッド全体
]

[2528] 漢字変換の件返信 削除
2009/7/3 (金) 10:13:16 白猫
すいません、またしゃしゃり出てきました

vistaでの漢字変換がうまくできないので、調べたとところ

下記のサイトから漢字からひらがなに変換できる回答があったので、
vista 及び delphi2009で行った所、うまくいきました
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200903/200903_09030008.html

逆にひらがなから漢字変換できないか、ない知恵をしぼりだして
Button2Clickで記述した通り、keybd_eventを使えばできそうみたいですが

もっとうまいやり方は、ありますかね?

unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls
  , Forms, Dialogs, StdCtrls, msime, ActiveX;
  //上記サイトの記述にしたがって msineとActiveXを入れる

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//edit1.textの漢字をひらがなに変換する
procedure TForm1.Button1Click(Sender: TObject);
var
  vGuid: TGUID;
  vFELanguage: IFELanguage;
  bsIn, bsOut: PWideChar;
  W: array [0..1023] of WideChar;
  Buffer: Pointer;
begin
 if CLSIDFromString(PWideChar(WideString('MSIME.Japan')), vGuid) <> S_OK then
  Exit;

 if CoCreateInstance(vGuid, nil, CLSCTX_SERVER, IFELanguage, vFELanguage) <> S_OK
 then Exit;

 if vFELanguage.Open <> S_OK then
  Exit;

  StringToWideChar(Edit1.Text, @W, SizeOf(W));
  bsIn := SysAllocString(@W);

  bsOut := nil;

  if vFELanguage.GetPhonetic(bsIn, 1, -1, @bsOut) <> S_OK then
   Exit;

  Edit2.Text := WideCharToString(bsOut);

  if Assigned(bsIn) then
   SysFreeString(bsIn);

  if Assigned(bsOut) then
   SysFreeString(bsOut);

  vFELanguage.Close;
  vFELanguage := nil;

  Edit2.SetFocus;
  edit2.SelStart:=length(edit2.Text);
end;

//ひらがなに変換したものを漢字に変換処理する
procedure TForm1.Button2Click(Sender: TObject);
begin
 if edit2.Text<>'' then
 begin
  keybd_event(VK_CONVERT,0,0,0);
  keybd_event(VK_CONVERT,0,KEYEVENTF_KEYUP,0);
 end;
end;

initialization
  CoInitialize(nil);

finalization
  CoUnInitialize;

end.

[2532] Re:漢字変換の件返信 削除
2009/7/3 (金) 12:17:32 白猫
▼ 白猫さん
一部修正
procedure TForm1.Button2Click(Sender: TObject);
begin
 if edit2.Text<>'' then
 begin
  edit2.setfocus; //これ入れないとまずいすね!
  keybd_event(VK_CONVERT,0,0,0);
  keybd_event(VK_CONVERT,0,KEYEVENTF_KEYUP,0);
 end;
end;

[2533] Re2:漢字変換の件返信 削除
2009/7/3 (金) 12:39:16 Sayke
▼ 白猫さん
こんにちは
ちょっとコピペしました。

期待したのとちょっと違った結果でした(^_^;)
何故か意味不明な・・・

[2534] Re3:漢字変換の件返信 削除
2009/7/3 (金) 13:00:44 白猫
▼ Saykeさん
あれ、おかしいですね?
私の行ったやり方は、

Edit1のimemodeをimhiraにしてから
ひらがな 入力を漢字変換してから

button1を押して、edit2.textに再度ひらがな戻す

button2を押すと、edit2.textを未確定文字に戻す
形で、行いました。、

それと、このbutton2の作業は、delphi2009の
ユニコードでないと、うまく作動しません

以前のansiだと、変換に失敗します。

あつかましい質問ですが、delphi2009で
試験をしたのでしょうか?


[2535] Re4:漢字変換の件返信 削除
2009/7/3 (金) 13:26:48 Sayke
▼ 白猫さん

> あつかましい質問ですが、delphi2009で
D2007でした。
いやはや大変失礼いたしました。<m(__)m>

Vistaになって変換が上手くできず困っておりまして
救世主現るとばかり良く読みもせず飛びついてしまい
ますた。
ご迷惑お掛けしました。

[2537] Re5:漢字変換の件返信 削除
2009/7/3 (金) 17:51:36 白猫
▼ Saykeさん
すいませんね、お役に立てなくて

漢字からひらがなを取得するだけなら
このやり方でdelphi2007からもできるのですが

ひらがなを未確定文字列にするのは、難しいようです。

私も、マイクロソフトのTSF関係を読んだですが

私が、アホなのか? 書いてる奴がアホなんか
それとも、両者ともアホなのか?
よくわかりませんが?

ただ感覚的に、ひらがなを未確定文字列に変換する
ことが、できそうもないなと、思われました

解決策としては、ATOKなら従来にやり方で
visitaでも利用できるそうです。

私の言えることは、ここまでです。
ゴメンナサイ。

[2538] Re6:漢字変換の件返信 削除
2009/7/3 (金) 22:23:43 DEKOHomePage
> ひらがなを未確定文字列にする

http://www.geocities.jp/ht_deko/ft0806.html
コレの件でしょうか?違っていたらゴメンナサイ。

# ANSI系 Delphi + TSF系 IME + Vista の話です。

[2539] Re7:漢字変換の件返信 削除
2009/7/4 (土) 08:04:26 白猫
▼ DEKOさん
そうなんですよね

特に「CUAS」というレイヤーが
問題児みたいで、こいつを、ちゃんと組み立てれば
従来のIMEも認識して、動かせると
私、個人は思っているのですが?

次期OSは、このあたりどう対処してるのだろうか?
マイクロソフトさんも、満を持しての製品だからな
....????? ワカンネ...

これ以上書くと、毒を吐きそうなので、
ここまでとします。

注 CUASとはCicero Unaware Application Support
   の略称
   CiceroはTSFの開発コードネームだそうです。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82