Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2010, 02:05   #1
LiNeR70
 
Регистрация: 24.08.2010
Сообщений: 5
Сообщение Решение задачи со временем

Задача в том, что бы по прошествию 15 секунд изменять системное время на 14 секунд обратно)) не нашел аналогов на форумах, прошу помогите пожалуйста
LiNeR70 вне форума Ответить с цитированием
Старый 24.08.2010, 02:39   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

1. Поставить таймер на 15 секунд.
2. При срабатывании таймера - установить системное время.
3. Перейти к п1.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 24.08.2010, 11:27   #3
LiNeR70
 
Регистрация: 24.08.2010
Сообщений: 5
По умолчанию

2. При срабатывании таймера - установить системное время.

вот именно с этим проблемы, как изменить только секунды и загнать их в цикл?))
LiNeR70 вне форума Ответить с цитированием
Старый 24.08.2010, 17:24   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

GetSystemTime + SetSystemTime.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.08.2010, 13:23   #5
LiNeR70
 
Регистрация: 24.08.2010
Сообщений: 5
По умолчанию

Большое спасибо на делфи до этого пробовал сделать, только не совсем понял зачем Getsystemtime, вопрос еще такой, как в си сделать цикл шаг которого будет равен секунде? или как нибудь попросить его считать секунды?))

Последний раз редактировалось LiNeR70; 25.08.2010 в 14:16.
LiNeR70 вне форума Ответить с цитированием
Старый 25.08.2010, 15:50   #6
VerhoLom
Пользователь
 
Регистрация: 25.08.2010
Сообщений: 12
Плохо

Цитата:
Сообщение от LiNeR70 Посмотреть сообщение
Большое спасибо на делфи до этого пробовал сделать, только не совсем понял зачем Getsystemtime, вопрос еще такой, как в си сделать цикл шаг которого будет равен секунде? или как нибудь попросить его считать секунды?))
1. Getsystemtime нужен для того, чтобы Вы могли перевести время назад, а такое можно сделать только получив текущее время, чем Getsystemtime и занимается...

2.
Код:
int t=1;
while(t){
         sleep(1000);
         // чего-то делаем
         if(!t) break;
}
VerhoLom вне форума Ответить с цитированием
Старый 25.08.2010, 19:05   #7
LiNeR70
 
Регистрация: 24.08.2010
Сообщений: 5
По умолчанию

Всем спасибо, задача решена так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
     function gethours: integer;
function getmins: integer;
function getsecs: integer;



type
  TForm1 = class(TForm)
  Timer1: TTimer;
  Button1: TButton;
  procedure Timer1Timer(Sender: TObject);
  procedure Button1Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

function gethours: integer;
var
  s: string;
  h: integer;
begin
  s := timetostr(time);
  h := strtoint(s[1] + s[2]);
  Result := h;

end;

function getmins: integer;
var
  s: string;
  h: integer;
begin
  s := timetostr(time);
  h := strtoint(s[4] + s[5]);
  Result := h;
end;

function getsecs: integer;
var
  s: string;
  h: integer;
begin
  s := timetostr(time);
  h := strtoint(s[7] + s[8]);
  Result := h;
end;


procedure SetSysDateTime;
var
  ST : _SYSTEMTIME;

begin
  GetSystemTime(ST);
 ST.wSecond := ST.wSecond-14 ;
  SetSystemTime(ST);

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if getsecs>=15 then
  begin
   setsysdatetime;
   sleep(1000*15);
   end
else sleep(1000);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Close;
end;

end.
Но только проблема в том что программа виснет после запуска))
LiNeR70 вне форума Ответить с цитированием
Старый 24.01.2011, 14:32   #8
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

Хоть сообщение и было давнешнее,но столкнулся с проблемой с функциями-они при подсчёте часа и минут,захватывали (когда часы и минуты с 0 по 9) знак ":",решил таким образом,вдруг кому пригодится:
Код:
function gethours: integer;
var
  s:string;
  h:integer;
begin
  s:=timetostr(time);
  if s[2]=':' then h:=strtoint(s[1]) else h:=strtoint(s[1]+s[2]);
  Result:=h;
end;

function getmins: integer;
var
  s:string;
  h:integer;
begin
  s:=timetostr(time);
  if s[5]=':' then h:=strtoint(s[4]) else h:=strtoint(s[4]+s[5]);
  Result:=h;
end;
Dj_SheLL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задачи на C# masicev Помощь студентам 1 15.10.2009 15:33
Решение задачи на C++ tools Фриланс 8 19.12.2008 14:53
решение задачи Claster Общие вопросы Delphi 17 16.09.2008 21:08
Решение задачи на Си kisha Общие вопросы C/C++ 9 19.11.2007 23:31
решение задачи TuNeR Microsoft Office Excel 2 15.10.2007 09:31