Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.06.2017, 16:55
Daniil Daniil вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 22
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как заставить TimeToStr считать свое указанное время

Пример:
Я самостоятельно в edit вбиваю нужное мне время и по нажатию на кнопку это время начинает идти самостоятельно. не используя системное время.!!
Ответить с цитированием
  #2  
Старый 21.06.2017, 18:13
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Инкрементом.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 21.06.2017, 19:36
Daniil Daniil вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 22
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию доп

Цитата:
Сообщение от NumLock
Инкрементом.
может есть пример?
Ответить с цитированием
  #4  
Старый 21.06.2017, 20:31
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Daniil
может есть пример?
Да откуда. Я в отпуске в 3000 км от дома, в Сочи А искать в интернет мне лень)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 21.06.2017, 21:29
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно и чисто по-ламерски, последовательным преобразованием
Код:
function itm(ds: string): string;
var
 hour, min, sec: integer;
begin
 hour:= StrToInt(ds[1] + ds[2]);
 min:=  StrToInt(ds[4] + ds[5]);
 sec:=  StrToInt(ds[7] + ds[8]) + 1;
 if sec > 59 then
  begin
   sec:= 0;
   Inc(min);
  end;
 if min > 59 then
  begin
   min:= 0;
   Inc(hour);
  end;
 if hour > 23 then hour:= 0;
 Result:= FormatDateTime('hh:mm:ss', EncodeTime(hour, min, sec, 0));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Edit1.Text:= itm(Edit1.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Text:= '00:00:00';
 Timer1.Interval:=  1000;
 Timer1.Enabled:=   true;
end;

З.Ы. Читал топик по-диагонали, не учёл сути вопроса, если через TimeToStr, то тогда можно так
Код:
var
 tm: TDateTime;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 tm:= tm + 1/(24*3600);
 Edit1.Text:= TimeToStr(tm);
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Text:= '0:00:00';
 tm:= StrToTime(Edit1.Text);
 Timer1.Interval:= 1000;
 Timer1.Enabled:=  true;
end;

Последний раз редактировалось Alegun, 21.06.2017 в 22:08.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Daniil (22.06.2017)
  #6  
Старый 21.06.2017, 22:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Alegun, при таком коде будет потихоньку расползаться, т.к. TTimer точность имеет никакую. Я бы сделал примерно так:
Код:
type
  TForm1 = class(TForm)
  ...
  private
    SystemInitTime : TDateTime;
    MyInitTime : TDateTime;
  end;
...

// Начинаем считать
procedure TForm1.Button1Click(Sender : TObject);
begin
  MyInitTime := StrToTime(Edit1.Text);
  SystemInitTime := Now;
  Timer1.Enabled := True;
end;

// собс-но изменение значения
// вычисляем разницу системного времени между сейчас и началом отсчета и
// Добавляем ее к стартовому значению
procedure TForm1.Timer1Timer(Sender : TObject);
var
  B : TDateTime;
begin
  Timer1.Enabled := False;
  Try
    B := Now - SystemInitTime;
    B := B + MyInitTime;
    Edit1.Text := TimeToStr(B);
  Finally
    Timer1.Enabled := True;
  End;
end;
Ответить с цитированием
  #7  
Старый 22.06.2017, 11:51
Daniil Daniil вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 22
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Дополнение:

Цитата:
Сообщение от Alegun
Можно и чисто по-ламерски, последовательным преобразованием
Код:
function itm(ds: string): string;
var
 hour, min, sec: integer;
begin
 hour:= StrToInt(ds[1] + ds[2]);
 min:=  StrToInt(ds[4] + ds[5]);
 sec:=  StrToInt(ds[7] + ds[8]) + 1;
 if sec > 59 then
  begin
   sec:= 0;
   Inc(min);
  end;
 if min > 59 then
  begin
   min:= 0;
   Inc(hour);
  end;
 if hour > 23 then hour:= 0;
 Result:= FormatDateTime('hh:mm:ss', EncodeTime(hour, min, sec, 0));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Edit1.Text:= itm(Edit1.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Text:= '00:00:00';
 Timer1.Interval:=  1000;
 Timer1.Enabled:=   true;
end;

З.Ы. Читал топик по-диагонали, не учёл сути вопроса, если через TimeToStr, то тогда можно так
Код:
var
 tm: TDateTime;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 tm:= tm + 1/(24*3600);
 Edit1.Text:= TimeToStr(tm);
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Text:= '0:00:00';
 tm:= StrToTime(Edit1.Text);
 Timer1.Interval:= 1000;
 Timer1.Enabled:=  true;
end;

Немного не так, есть время в edit1.Text:=(''TimeToStr(now) текущее время, время в edit1 отнимается или прибавляется к времени которое я указываю самостоятельно в edit2, получая ответ нужно начать отсчет от того времени которое получилось, нужно заставить те числа которые в ответе, продолжить идти. например:точное время 08:00:00- 01:00:00 отнимаю один час, получаем ответ в edit2=07:00:00 (вот как раз ответ и нужно заставить отсчитывать время дальше)
Ответить с цитированием
  #8  
Старый 22.06.2017, 11:58
Daniil Daniil вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 22
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Дополнение:

Цитата:
Сообщение от Alegun
Можно и чисто по-ламерски, последовательным преобразованием
Код:
function itm(ds: string): string;
var
 hour, min, sec: integer;
begin
 hour:= StrToInt(ds[1] + ds[2]);
 min:=  StrToInt(ds[4] + ds[5]);
 sec:=  StrToInt(ds[7] + ds[8]) + 1;
 if sec > 59 then
  begin
   sec:= 0;
   Inc(min);
  end;
 if min > 59 then
  begin
   min:= 0;
   Inc(hour);
  end;
 if hour > 23 then hour:= 0;
 Result:= FormatDateTime('hh:mm:ss', EncodeTime(hour, min, sec, 0));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Edit1.Text:= itm(Edit1.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Text:= '00:00:00';
 Timer1.Interval:=  1000;
 Timer1.Enabled:=   true;
end;

З.Ы. Читал топик по-диагонали, не учёл сути вопроса, если через TimeToStr, то тогда можно так
Код:
var
 tm: TDateTime;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 tm:= tm + 1/(24*3600);
 Edit1.Text:= TimeToStr(tm);
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Text:= '0:00:00';
 tm:= StrToTime(Edit1.Text);
 Timer1.Interval:= 1000;
 Timer1.Enabled:=  true;
end;
Похоже получилось, добавил переменную, которую вывел в нужный edit.
Ответить с цитированием
  #9  
Старый 22.06.2017, 13:11
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Стоп, заданиё:
Цитата:
Сообщение от Daniil
...Я самостоятельно в edit вбиваю нужное мне время и по нажатию на кнопку это время начинает идти самостоятельно. не используя системное время.!!
я делал тоже самоё, оно работает, какие переменные, lmikle предложил более стабильный образец, без вычитаний, определитесь
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Daniil (22.06.2017)
  #10  
Старый 22.06.2017, 14:46
Daniil Daniil вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 22
Версия Delphi: Delphi 7
Репутация: 10
Хорошо Дополнение:

Цитата:
Сообщение от Alegun
Стоп, заданиё:я делал тоже самоё, оно работает, какие переменные, lmikle предложил более стабильный образец, без вычитаний, определитесь
Вбивалось вот это значение (Edit1.Text:= '0:00:00' и отсчет шел с нулей, в место нулей создал строковую переменную в которую записывался результат сложения действий с временем, переменную присвоил edit1!! Вообщем пример пригодился он рабочий!! СПАСИБО!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter