ひゃほい。
function MapStringW(const Source: WideString; dwMapFlags: Longword): WideString;
var
 Len: Integer;
begin
 Result := '';
 Len := LCMapStringW(LOCALE_USER_DEFAULT, dwMapFlags,
      PWideChar(Source), -1, nil, 0);
 SetLength(Result, Len-1);
 LCMapStringW(LOCALE_USER_DEFAULT, dwMapFlags,
  PWideChar(Source), Length(Source)+1,
  PWideChar(Result), Len);
end;
function KataToHira(const Source: WideString): WideString;
begin
 Result := MapStringW(Source, LCMAP_HIRAGANA);
end;
function HiraToKata(const Source: WideString): WideString;
begin
 Result := MapStringW(Source, LCMAP_KATAKANA);
end;
function ZenkakuToHankaku(const Source: WideString): WideString;
begin
 Result := MapStringW(Source, LCMAP_HALFWIDTH);
end;
function HankakuToZenkaku(const Source: WideString): WideString;
begin
 Result := MapStringW(Source, LCMAP_FULLWIDTH);
end;