Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

Помогите чайнику с DateTimePicker   Найти похожие ветки 

 
RoLeX   (2003-09-21 21:44) [0]

Вот кусок моей программы на Delphi:

...
procedure TForm1.Timer1Timer(Sender: TObject);
var
ph:THandle;
tp,prevst:TTokenPrivileges;
rl:DWORD;
begin
if (RadioButton1.Checked) and (RadioButton6.Checked) and (DateTimePicker1.Date=now) and (DateTimePicker2.Time=Now) then
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ph);
LookupPrivilegeValue(Nil,"SeShutdownPrivilege",tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=2;
AdjustTokenPrivileges(ph,FALSE,tp,SizeOf(prevst),prevst,rl);
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF,0);
end;
end;
...

Вот чё она должна делать:
Условие: Когда Timer1Timer, если RadioButton1 выделена и RadioButton6 выделена и дата в DateTimePicker1 равна дате которая сейчас, и время в DateTimePicker2 равно времени сейчас, тогда:
Сделать выключение компа: OpenProcessToken.......ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF,0);
Но почемуто когда все эти условия выолняются комп не выключается. Я делал всё и так и сяк. И пришёл к выводу, что "...(DateTimePicker1.Date=now) and (DateTimePicker2.Time=Now)..." написано не совсем правильно.
Как напиать "...(DateTimePicker1.Date=now) and (DateTimePicker2.Time=Now)..." по другому???


 
Alex Konshin ©   (2003-09-22 00:27) [1]

Возьми мой TDateComboBox на http://home.earthlink.net/~akonshin/index.htm
Он показывает и время, и дату одновременно.


 
Alex Konshin ©   (2003-09-22 00:36) [2]

На будущее:
Тип TDateTime - это обычный тип double. Целая часть этого числа - это номер дня от какой-то фиксированной даты в прошлом (не помню какой, посмотри в help), дробная часть - это часть от текущих суток - из нее и вычисляется время.
Соответственно Now содержит обе этих части, а DateTimePicker1.Date и DateTimePicker2.Time - только по одной из них (другая нулевая). Поэтому-то у тебя сравнение и неуспешное.
То есть, тебе нужно брать соответственно целую и дробную часть от Now и их уже и сравнивать.
Второй момент: ты зря сравниваешь дату и время на равенство (как и вообще любые числа с плавающей запятой), так как совпадение их маловероятно. В твоем случае нужно использовать "меньше или равно", т.е. "<=".


 
RoLeX   (2003-09-22 16:37) [3]

Когда заменяю "=" на "меньше или равно", т.е. "<=". То выключается сразу!


 
ZEE ©   (2003-09-22 16:49) [4]

...(DateTimePicker1.Date=Date) and (DateTimePicker2.Time=Time)...


 
RoLeX   (2003-09-22 17:26) [5]

To "ZEE" -> ...(DateTimePicker1.Date=Date) and (DateTimePicker2.Time=Time)...
Тоже бесполезно! Когда время приходит, ноль реакции!


 
ZEE ©   (2003-09-22 17:31) [6]

а так?
if FormatDateTime("dd.mm.yyyy",DateTimePicker1.Date)+" "+FormatDateTime("hh:nn",DateTimePicker2.Time)=FormatDateTime("dd.mm.yyyy hh:nn",Now) then ...


 
RoLeX   (2003-09-22 17:50) [7]

if FormatDateTime("dd.mm.yyyy",DateTimePicker1.Date)+" "+FormatDateTime("hh:nn",DateTimePicker2.Time)=FormatDateTime("dd.mm.yyyy hh:nn",Now) then ...
Не компилирует: пишет ошибка: "Incompatible types: "String" and "Boolean""


 
MacroDenS ©   (2003-09-22 18:15) [8]

Да ладно не парься, просто сделай преобразование такое:

if (RadioButton1.Checked) and (RadioButton6.Checked) and (DateToStr(DateTimePicker1.Date)=DateToStr(now)) and (TimeToStr(DateTimePicker2.Time)=TimeToStr(Now)) then begin
..........
end;

и все получится


 
RoLeX   (2003-09-22 19:39) [9]

А как из DateTimePicker2.Time вычесть Now ???
Типа сколько времени осталось до DateTimePicker2.Time



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
3-18221
yuray76
2003-09-15 17:08
2003.10.06
Количество коннектов к базе Interbase...


14-18623
Феликс
2003-09-18 22:05
2003.10.06
Реклама


1-18297
prorok2
2003-09-24 09:29
2003.10.06
Неправильное отображение таблицы в TRichEdit


14-18607
Udjin
2003-09-17 17:58
2003.10.06
Интересный факт


3-18233
DmitryMN
2003-09-15 23:41
2003.10.06
Зависание клиента