![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменение ситемной даты [D6, WinXP]
Леша © (2005-06-24 12:34:00)Необходимо сделать при входе в мою программу отображение системной даты и если нужно - ее изменение.
Как узнать текущую дату я знаю. Но как установить новую дату?
Например используя MaskEdit и Button
Кто знает, подскажите пожалуйста.
Леша (2005-06-24 15:12:00) [1]Огромное всем спасибо. Сейчас это уже и не кажется проблемой... а сначала было сложно и непонятно...
Еще раз всем спасибо.
Леша (2005-06-24 15:10:00) [2]begin...end - правильно и круто. Понял ошибки...у меня избыточный код. Сейчас переделаю...
begin...end (2005-06-24 15:06:00) [3]> Леша (24.06.05 14:57) [22]
procedure TForm1.Button1Click(Sender: TObject);
var
D: _SystemTime;
begin
GetSystemTime(D);
// Теперь все поля в D заполнены текущими датой и временем
// Поэтому осталось поменять только то, что нужно (год, месяц и день)
// и передать изменённую структуру в SetSystemTime, не забыв про проверку на ошибки
D.wYear := ...;
D.wMonth := ...;
D.wDay := ...;
Win32Check(SetSystemTime(D));
Form1.Caption := DateToStr(Now)
end.
evvcom (2005-06-24 15:01:00) [4]GetSystemTime(K);
K.wYear:=2005;
K.wMonth:=06;
K.wDay:=10;
SetSystemTime(K);
gydvin (2005-06-24 15:01:00) [5]Лишь бы работало
вроде верно
Леша (2005-06-24 14:57:00) [6]Не знаю на сколько грамотно написан код, но вот конечный результат. Похоже все работает (т.е. глюков пока не обнаружено).
procedure TForm1.Button1Click(Sender: TObject);
var
d:_systemtime;
k:_systemtime;
Hour, Min, Sec, MSec: Word;
begin
GetSystemTime(K);
d.wYear:=2005;
d.wMonth:=06;
d.wDay:=10;
d.wHour:=K.wHour;
d.wMinute:=K.wMinute;
d.wSecond:=K.wSecond;
d.wMilliseconds:=K.wMilliseconds;
SetSystemTime(d);
Form1.Caption:=DateToStr(now);
end;
Anatoly Podgoretsky (2005-06-24 14:57:00) [7]Это системная привелегия, можно получить по полной за подобное.
Леша (2005-06-24 14:50:00) [8]Anatoly Podgoretsky - не понял??? Да мне и не нужно его трогать. Мне нужно дату поменять.
А значения нужно все заполнять...иначе не меняется дата, а значит заполнять нужно и значения времени...
Anatoly Podgoretsky (2005-06-24 14:47:00) [9]Не трожь системное время.
begin...end (2005-06-24 14:40:00) [10]> Леша (24.06.05 14:34) [16]
> не понятно почему трогает значение часов
Потому что Now для получения даты/времени использует не GetSystemTime, а Get LocalTime.
А чем эти две функции отличаются, уже сказали в предыдущих постах.
Леша (2005-06-24 14:37:00) [11]begin..end
Спасибо за разъяснение.
Леша (2005-06-24 14:34:00) [12]Сделал так. Все, дату меняет, но не понятно почему трогает значение часов.
procedure TForm1.Button1Click(Sender: TObject);
var
d:_systemtime;
Hour, Min, Sec, MSec: Word;
begin
DecodeTime(now, Hour, Min, Sec, MSec);
d.wYear:=2005;
d.wMonth:=06;
d.wDay:=10;
d.wHour:=Hour;
d.wMinute:=Min;
d.wSecond:=Sec;
d.wMilliseconds:=MSec;
SetSystemTime(d);
Form1.Caption:=DateToStr(now);
end;
begin...end (2005-06-24 14:34:00) [13]> Леша (24.06.05 14:12) [8]
Тёзка, Вы поля "час", "минута" и т.д. в структуре _SystemTime заполняли? Нет. Значит, в этих полях может находиться всё, что угодно (локальные переменные сами не инициализируются). И потом Вы пытаетесь это "всё, что угодно" передать в SetSystemTime, после чего даже не проверяете результат, который она возвращает. Чтобы узнать, в чём дело, можно строкуSetSystemTime(d)заменить наWin32Check(SetSystemTime(d)). Скорее всего, появится сообщение об ошибке "Неверный параметр", что и подтверждает вышесказанное.
Отсюда вывод -- надо полностью инициализировать структуру _SystemTime. Например, так можно увеличить на единицу год:
var
D: TSystemTime;
begin
GetSystemTime(D);
Inc(D.wYear);
Win32Check(SetSystemTime(D))
end.
> Леша (24.06.05 14:24) [14]
А если не надо время менять, то нужно его оставить, как есть. А для этого нужно его сначала получить . А как -- см. код выше.
Леша (2005-06-24 14:24:00) [14]Действительно, если все заполнить меняет. Но мне не нужно время менять. Щас буду думать.
gydvin (2005-06-24 14:20:00) [15]до сих пор дату в норму привожу
Леша (2005-06-24 14:18:00) [16]Как получить я знаю.
Я бьюся над тем сейчас, чтобы можно было изменить системную дату.
gydvin (2005-06-24 14:18:00) [17]гы-гы а ты все заполни только че попробывал все меняет
evvcom (2005-06-24 14:18:00) [18]
> Нет я в Краснодаре GMT+3
А в региональных настройках тоже GMT+3? GetSystemTime возвращает время GMT, причем с переходом на летнее время оно естественно не меняется, а GetLocalTime для Москвы зимой дает GMT+3, а летом GMT+4.
gydvin (2005-06-24 14:16:00) [19]а получить можно
s:=timetostr(Now);
s:=datetostr(Now);
Леша (2005-06-24 14:12:00) [20]Да так попробовал, но дата не меняется... Увы
procedure TForm1.Button1Click(Sender: TObject);
var
d:_systemtime;
begin
d.wYear:=2005;
d.wMonth:=06;
d.wDay:=10;
SetSystemTime(d);
end;
end.