没有SendMessageA大家都不知道!。这样写!
  SetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SCURRENCY, ' ');
  SendMessageA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);

解决方案 »

  1.   

    这回行了。参数LOCALE_SSHORTDATE //长
    LOCALE_SLONGDATE//短
    LOCALE_IDate  //位置
    LOCALE_ILDate //位置
      SetLocaleInfoA(LOCALE_SYSTEM_DEFAULT,LOCALE_SSHORTDATE,'yy-dd-mm');
      SetLocaleInfoA(LOCALE_SYSTEM_DEFAULT,LOCALE_IDate,'yy-dd-mm');  SendMessageA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
      

  2.   

    关于时间格式更改问题;我测试后改了不少,当时我说的逻辑很乱很仓促。这样改好才行。
    var
      str: string;
    begin
      str := RadioGroup1.Items.Strings[RadioGroup1.ItemIndex];
      if SetLocaleInfoa(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE , PChar(str)) then
      begin
        showmessage('short OK!');
        //if SetLocaleInfoa(LOCALE_SYSTEM_DEFAULT, LOCALE_STIMEFORMAT, PChar('m-d-yy')) then
        //begin
        //  showmessage('Location OK!');    //end;
        SendMessageA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
      end;
    end;
     为了方便测试我用了radioGroup,items 内容如下
    yy-d-m
    d-yy-m
    m-d-yy
    yy-m-d
    yyyy-m-d
    yyyy-d-m
      
      
      传进参数必须 null-terminate 字符串指针。我用 pchar ,而且字符串格式只能写成这样 'm-d'而不是'mm-dd'('yyyy'可以用),不然改不了另外delphi 函数 DateTostr,DateTimeTostr,都调用短格式。
      长格式很灵活。随便改.RadioGroup Items 如下
    yyy'年'dd'日'-mm
    d-yyyy-mm
    mm-dd-yyyy
    yyyy-mm-dd
      
    代码如下var
      str: string;
    begin
      str := RadioGroup2.Items.Strings[RadioGroup2.ItemIndex];  
      if SetLocaleInfoa(LOCALE_SYSTEM_DEFAULT, LOCALE_SLONGDATE , PChar(str)) then
      begin
        showmessage('Loan OK!');
        SendMessageA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
      end;
    end;
      

  3.   

    设格式为'yyyy-m-d'、'yyyy-d-m'时还应该设置间隔符,
       SetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SDATE,Pchar(str));