СообЧа > База Знаний > Программирование > Delphi

Вопрос

Столкнулся с одной проблемой…

Дано:

Timer (RxTimer)

Interval1=1000; // 1 sec. Enabled; Cycled

Interval2=300000; // 5 min. Enabled; Cycled

Panel1

Найти :

OnTimer1:

Panel1.Caption:=//? Время оставшееся от Interval2

Мне надо, что-бы на Panel.Caption шел обратный счетчик Interval2… т.е. каждую секунду он писал типа: 05:59…05:58…и.т.д. т.е. сколько осталось до истечения Interval2.

Ну Вы поняли для чего это… типа на один тур дается 5 мин. Вверху есть часики, показывающие время до конца тура… Вот уже все написал, кроме этого…И не знаю как делать… Как получить данные остатка Interval2, хотябы в милисикундах…

Ответ

Ну а кто тебе мешает из пяти минут каждую секунду вычитать по секунде?

И вовсе для этого никаких компонентов иметь не надо. Создай свежий проект, намажь на форму Panel1: TPanel. У формы заполни свойство OnCreate. После этого скопируй текст модуля отсюда. Запускай, наслаждайся.

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private { Private declarations } FSeconds: Cardinal; procedure WMTimer(var M: TWMTimer); message WM_TIMER; procedure StartTimer(Seconds: Cardinal); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} const ID_TIMER: Cardinal = 10; procedure TForm1.FormCreate(Sender: TObject); begin StartTimer(300); end; procedure TForm1.StartTimer(Seconds: Cardinal); begin FSeconds:=Seconds; SetTimer(Handle, ID_TIMER, 1000, nil); end; procedure TForm1.WMTimer(var M: TWMTimer); begin if M.TimerID=ID_TIMER then begin Dec(FSeconds); if FSeconds>0 then begin Panel1.Caption:=IntToStr(FSeconds div 60)+':'+ FormatFloat('00', FSeconds mod 60); end else begin Panel1.Caption:='Game Over'; KillTimer(Handle, ID_TIMER); end; end; end; end.

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация