すいません、またしゃしゃり出てきました
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.
|