方法1:
SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, PChar('yyyy-MM-dd'));  
SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SLONGDATE, PChar('yyyy-MM-dd'));  
SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_STIMEFORMAT,PChar('HH:mm:ss'));  
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);  
執行最後一發送消息語句時,偶爾程序會出現長時間等待,甚至程序運行不了需重新啟動電腦.初步分析可能操作系統有進程不響應導致消息無法返回.
方法2:
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    //Reg.RootKey := HKEY_USERS;
    if Reg.OpenKey('\Control Panel\International', True) then
    //if Reg.OpenKey('\.DEFAULT\Control Panel\International', True) then
    begin
      Reg.WriteString('sShortDate','yyyy-MM-dd');
      Reg.WriteString('sLongDate','yyyy-MM-dd');
      Reg.WriteString('sTimeFormat','HH:mm:ss');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
當次程序啟動更改的日期時間格式不生效,需要關閉重新運行程序.請大家幫忙提供建議或其它更好的辦法.

解决方案 »

  1.   

    将这句:SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);改为:PostMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
      

  2.   

    PostMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
    用這句不行,改不了.
      

  3.   

    WM_SETTINGCHANGE是不能用PostMessage的.不过可以用 SendMessageTimeout 试试。
      

  4.   

    to myy:
    這語句參數有啥問題,應該怎樣寫?
    SendMessageTimeOut(HWND_BROADCAST,WM_SETTINGCHANGE,0,0,SMTO_NORMAL,1000,0);
    [Error] PubFunction.pas(1465): Types of actual and formal var parameters must be identical
      

  5.   

    var r : Integer;SendMessageTimeOut(..., r); 
      

  6.   

    已解決,要定義為DWord類型.謝謝mwy654321,myy