constructor TWinControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);  .....  if SysLocale.PriLangID = LANG_JAPANESE then
    FImeName := ''
  else
    FImeName := Screen.DefaultIme;  ......
end;

解决方案 »

  1.   

    Delphi\Source目录下命令 grep -id japan *.pas 能找到更多和japan有关的列举部分如下:
    File Win32\IBX\Property Editors\IBUpdateSQLEditor.pas:
        Result := (SysLocale.PriLangID = LANG_JAPANESE) and (Chr in [$A1..$DF]);
    File Win32\db\DBCommon.pas:
        Result := (SysLocale.PriLangID = LANG_JAPANESE) and (Chr in [$A1..$DF]);
    File Win32\vcl\Controls.pas:
      if SysLocale.PriLangID = LANG_JAPANESE then
    File Win32\vcl\Mask.pas:
        Result := (SysLocale.PriLangID = LANG_JAPANESE) and (Chr in [$A1..$DF]);
    File Win32\vcl\ComCtrls.pas:
      if (SysLocale.FarEast) and not (SysLocale.PriLangID = LANG_JAPANESE) then
    File dotNet\db\Borland.Vcl.DBCommon.pas:
        Result := (SysLocale.PriLangID = LANG_JAPANESE) and (Chr in [$A1..$DF]);
    File dotNet\vcl\Borland.Vcl.Controls.pas:
      if SysLocale.PriLangID = LANG_JAPANESE then
    File dotNet\vcl\Borland.Vcl.Mask.pas:
        Result := (SysLocale.PriLangID = LANG_JAPANESE) and (Chr in [$A1..$DF]);
    File dotNet\vcl\Borland.Vcl.ComCtrls.pas:
      if (SysLocale.FarEast) and not (SysLocale.PriLangID = LANG_JAPANESE) then
      

  2.   


    C:\Program Files\Borland\Delphi7\Source>grep -id lang_ch *.pas
    File Indy\IdGlobal.pas:
        LANG_CHINESE:
          if SysLocale.SubLangID = SUBLANG_CHINESE_SIMPLIFIED then
    File Rtl\Sys\SysUtils.pas:
                LANG_CHINESE:
                  if (SysLocale.SubLangID = SUBLANG_CHINESE_TRADITIONAL)
                LANG_CHINESE:
                  if (SysLocale.SubLangID = SUBLANG_CHINESE_TRADITIONAL)
        RemoveEra := SysLocale.PriLangID in [LANG_JAPANESE, LANG_CHINESE, LANG
    N];
    File Rtl\Win\Windows.pas:
      LANG_CHINESE                         = $04;
      {$EXTERNALSYM LANG_CHINESE}
      SUBLANG_CHINESE_TRADITIONAL          = $01;    { Chinese (Taiwan) }
      {$EXTERNALSYM SUBLANG_CHINESE_TRADITIONAL}
      SUBLANG_CHINESE_SIMPLIFIED           = $02;    { Chinese (PR China) }
      {$EXTERNALSYM SUBLANG_CHINESE_SIMPLIFIED}
      SUBLANG_CHINESE_HONGKONG             = $03;    { Chinese (Hong Kong) }
      {$EXTERNALSYM SUBLANG_CHINESE_HONGKONG}
      SUBLANG_CHINESE_SINGAPORE            = $04;    { Chinese (Singapore) }
      {$EXTERNALSYM SUBLANG_CHINESE_SINGAPORE}
      

  3.   

    似乎是因为有半角特殊字的原因
    一般来说,半角字都是直接作为ASCII来解释的,但是老的JIS标准中不是
      

  4.   

    哈哈,帮了我一个忙,我用delphi5,当我打开微软拼音输入法时,imename老是微软输入.我现在把vcl50.bpl中的逻辑改了,变成:
      if SysLocale.PriLangID <> LANG_JAPANESE then
        FImeName := ''
      else
        FImeName := Screen.DefaultIme;现在没有这个问题.反正我的软件又不出口到日本,无所谓了.
      

  5.   

    我只是觉得奇怪,突然看到的。那么多国家,只有日语要做特殊处理,想必是vcl后来打的补丁,我想做为软件开发人员,很不情愿在自己的程序中写入上面的代码,呵呵。
      

  6.   

    有空多看看VCL源码,何止对日文进行处理,还有很多对其它语言的处理呢
      

  7.   

    很久没有来csdn这个家了!!
    一来就看到这样的好贴 顶一个!!!
    哈哈