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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2008, 12:16   #1
DenSuper007x
Пользователь
 
Регистрация: 12.03.2008
Сообщений: 24
По умолчанию Отображение в Label периода с помощью таймера

Создайте приложение, на форму которого помещены компоненты: Timer, Label и Edit. Напишите обработчик события OnTimer компонента Timer, который каждую секун-ду отображает с помощью компонента Label период времени (в формате ЧЧ:ММ:СС), прошедший с момента, указанного в компоненте Edit (также в формате ЧЧ:ММ:СС).
Помогите плиз, ет последняя задача что мне нужна, и чёт она не получается
DenSuper007x вне форума Ответить с цитированием
Старый 25.03.2008, 13:59   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
ет последняя задача что мне нужна, и чёт она не получается
Что именно не получается?
Где код ваших попыток? Вопрос совершенно элементарный, честнее было бы сказать - не хочу, мол, ничего делать, сделайте за меня, а я пусть так неучем и останусь...
mihali4 вне форума Ответить с цитированием
Старый 25.03.2008, 14:26   #3
DenSuper007x
Пользователь
 
Регистрация: 12.03.2008
Сообщений: 24
По умолчанию

var
Form1: TForm1;
StartTime:TDateTime;

implementation

{$R *.dfm}

procedure TForm1.TimerTimer(Sender: TObject);
begin
Label1.Caption:=TimeToStr(now-StartTime);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
StartTime:=strtotime(Edit1.Text);
TimerTimer(sender);
end;

Только он бьет ошибку, потому что таймер работает посекундно, а в первую секунду Edit1 пустой
DenSuper007x вне форума Ответить с цитированием
Старый 25.03.2008, 14:36   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Только он бьет ошибку, потому что таймер работает посекундно, а в первую секунду Edit1 пустой
Ну так делаем первым оператором в FormCreate такой:
Edit1.Text:=TimeToStr(now);
А чтобы не делать преобразования туда-сюда, пишем:
StartTime:=now;
И тогда уже выглядеть это должно так:
procedure TForm1.FormCreate(Sender: TObject);
begin
StartTime:=now;
Edit1.Text:=TimeToStr(StartTime);
...

Последний раз редактировалось mihali4; 25.03.2008 в 14:39.
mihali4 вне форума Ответить с цитированием
Старый 25.03.2008, 14:39   #5
DenSuper007x
Пользователь
 
Регистрация: 12.03.2008
Сообщений: 24
По умолчанию

И всё что-ли?
DenSuper007x вне форума Ответить с цитированием
Старый 25.03.2008, 14:42   #6
DenSuper007x
Пользователь
 
Регистрация: 12.03.2008
Сообщений: 24
По умолчанию

Мне не нужно отчитывать время от начала работы приложения,в Edit1 должно быть произвольное время.
DenSuper007x вне форума Ответить с цитированием
Старый 25.03.2008, 14:42   #7
DenSuper007x
Пользователь
 
Регистрация: 12.03.2008
Сообщений: 24
По умолчанию

Вот в этом-то и запарка
DenSuper007x вне форума Ответить с цитированием
Старый 25.03.2008, 19:34   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если еще не прдумал, то сделай так. На форме еще нужен Button.
В свойствах Timer ставишь интервал 100. Потом пишешь такой код.
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  timer1.Interval:=1000;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var Fix,Now:TDateTime;
begin
if timer1.Interval =1000 then
   begin
     Now:=time();
     Fix:=Strtotime(edit1.Text);
     label1.Caption:=timetostr(now-fix);
    end;
 end;
end.
Вводишь в Edit время в формате 12:12:12 нажимаешь кнопку и вперед.
Можно обойтись без кнопки, тогда интервал оставляешь 1000, а время в Эдите задаешь программно.
puporev вне форума Ответить с цитированием
Старый 25.03.2008, 20:51   #9
DenSuper007x
Пользователь
 
Регистрация: 12.03.2008
Сообщений: 24
По умолчанию

Можно обойтись без кнопки, тогда интервал оставляешь 1000, а время в Эдите задаешь программно.[/QUOTE]
А как программно?
DenSuper007x вне форума Ответить с цитированием
Старый 25.03.2008, 21:24   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от DenSuper007x Посмотреть сообщение
Мне не нужно отчитывать время от начала работы приложения,в Edit1 должно быть произвольное время.
По событию OnKeyDown для Edit1 останавливаем таймер (при этом проверяем - если VK_RETURN - значит время введено и только тогда таймер опять запускаем).
Резоннее тогда и убрать из создания формы
StartTime:=strtotime(Edit1.Text);
TimerTimer(sender);
Ну, и таймер сделать Enabled:=False изначально.
Да, и к тому же мы, как я понял, упустили важный момент:
Цитата:
каждую секун-ду отображает с помощью компонента Label период времени, прошедший с момента, указанного в компоненте Edit
То есть по условию-то получается, что отсчет должен начинаться, когда текущее время станет больше указанного в эдите. Или я усложняю?
Но и в этом случае ничего сложного - просто капшен лейбла по событию таймера будем менять не всегда, а только после того, как "текущее время станет больше указанного в эдит". До этого момента таймер будет просто осуществлять эту проверку.

Последний раз редактировалось mihali4; 25.03.2008 в 21:30.
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интервал Таймера... Roof Общие вопросы Delphi 27 08.07.2008 20:19
использование таймера KancJler Помощь студентам 13 19.04.2008 01:13
Выбор товара из раннего периода? ASR Microsoft Office Excel 11 28.01.2008 15:08
Отображение песен в Label. !Анатолий Общие вопросы Delphi 13 17.11.2007 15:59
Вопрос по label. Как сделать так чтобы label была прозрачной. Lonix Компоненты Delphi 2 01.04.2007 06:23