Am 02.11.2011 19:25, schrieb Ludo Brands:
Apparently not everything is that transparent under windows:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724944%28v=vs.85%2
9.aspx

"To inform Explorer that the time zone has changed, send the
WM_SETTINGCHANGE message."


WM_SETTINGCHANGE simply notifies you that the user changed the time zone, because otherwise you might not be able to detect that (except you read the settings from the registry yourself).

Or:

http://channel9.msdn.com/coding4fun/articles/Changing-time-zones

"By itself, changing the time zone doesn't have any apparent effect except
in new processes.  In order to see the change, you need to send a system
notification message.  This notification is made by calling
SendMessageTimeout with WM_SettingChange and a parameter of "intl". "

This is wrong. Changing the timezone effects e.g. all following calls to GetLocalTime. See the following example program:

=== source begin ===

program timezonetest;

{$apptype console}
{$mode objfpc}{$H+}

uses
  SysUtils;

begin
  Writeln(FormatDateTime('c', Now));
  Writeln('Please change the timezone and then press enter');
  Readln;
  Writeln(FormatDateTime('c', Now));
  Writeln('Done');
  Readln;
end.

=== source end ===

As you see there is no message processing.

My normal timezone is Berlin. Now I've run the program and changed the timezone to Greenland (-3h). The output was the following:

=== output begin ===

03.11.2011 21:16:33
Please change the timezone and then press enter

03.11.2011 17:17:10
Done

=== output end ===

So your link which talks about "only affects new processes" is proven wrong.

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to