Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменение ситемной даты [D6, WinXP]


Страницы:   1 2

Леша ©   (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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо