![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть объект TTimer (таймер), соответственно время на таймере начинает капать с того момента, как
Код:
Timer.Enabled := True //Запуск таймера |
|
#2
|
||||
|
||||
|
label1.caption:= timetostr(now);
|
|
#3
|
|||
|
|||
|
Виноват, не пояснил: у меня таймер (Timer1) с интервалом 20 минут работает, поэтому ему на событие OnTime нельзя назначить, чтобы он собственное время работы в TimerLabel.Caption присваивал!
Сам только что допёр до такого способа: добавил на форму еще 1 таймер который уже работывает с интервалом в 1 секунду и, соответственно, на событие OnTimer я ему назначаю присвоение TimerLabel.Caption времени работы первого таймера. . Вот так мы и получаем динамичную обнову лейбла т.к. интервал у нас - 1 секунда на этом таймере)Код:
procedure TForm.Timer2Timer(Sender: TObject); begin TimerLabel.Caption := TimeToStr(Time); end; TimeToStr(Time) - этим мы выводим системное время, а мне нужно как-то время работы таймера1 с начала его запуска вывести. |
|
#4
|
|||
|
|||
|
Сделай отсечку времени в момент начала работы таймера 1 и потом выводи разницу между запомненым и текущим временами.
Типа: Код:
var TimeBegin : TDateTime; procedure TForm1.Timer1Timer(Sender : TObject); begin TimeBegin := Now; ... end; procedure TForm1.Timer2Timer(Sender : TObject); begin Label1.Caption := TimeToStr(Now - TimeBegin); end; |
|
#5
|
||||
|
||||
|
TimeBegin := Now лучше задавать вместе с Timer1.Enble:= true
А для второго таймера - как lmikle сказал Последний раз редактировалось Karsh, 25.03.2009 в 02:25. |
|
#6
|
|||
|
|||
|
И опять же только что сам пришел к тому что надо вначале проги описать глобальную переменную StartTime типа TDateTime; присвоить ей системное время в момент включения первого таймера; В событии OnTimer второго таймера описать 2 переменные EndTime и ResultTime обе типа TDateTime; присвоить EndTime системное время на момент срабатывания второго таймера (т.е. каждую секунду); присвоить переменной ResultTime разницу: EndTime - StartTime, ну и естественно вывести всё это дело на нужный лейбл:
Код:
TimerLabel.Caption := TimeToStr(ResultTime); И тем не менее: Electronic_Arts,lmikle,Karsh спасибо! PS: Ночью мозг как-то тормозит (сначала спрашиваю а потом уже приходит в голову норм мысль и начинаю делать сам). |
|
#7
|
|||
|
|||
|
Подскажите, а каким способом можно получить текущее системное время, переведённое в 24-часовой формат(подозреваю, что как-то с помощью функции FormatDateTime, но что-то не могу сообразить, как именно). И как сделать чтобы время работы таймера на капче лейбла выводилось выше 24-часов (не обнуляясь, в момент перехода с 24 на 0 часов).
|
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
|||
|
|||
|
Цитата:
Знаю такой способ пока: проверять, если EndTime - StartTime = '00:00:00' то прибавлять к этому делу +24:00:00, но, думаю как-то это совсем "по-левому". |
|
#10
|
|||
|
|||
|
Цитата:
Код:
var dt: TSystemTime; begin DateTimeToSystemTime(Now, dt); Label1.Caption := 'Hour: ' + IntToStr(dt.wHour); Label2.Caption := 'Minute: ' + IntToStr(dt.wMinute); Label3.Caption := 'Second: ' + IntToStr(dt.wSecond); end; Цитата:
Код:
Label1.Caption := IntToStr(HoursBetween(StartDateTime, Now)); _____________ P.S. Кстати, если посмотреть исходный код функции Now, то можно увидеть, что под Windows вызывается API-шная функция GetLocalTime, заполняющая структуру SYSTEMTIME с полями wHour, wMinute, wSecond и т.д. Так что если программа для Windows, то можно использовать прямо эту функцию, не пользуясь функцией Now: Код:
var sysTime: _SYSTEMTIME; begin GetLocalTime(sysTime); Label2.Caption := 'Hour: ' + IntToStr(sysTime.wHour); Label3.Caption := 'Minute: ' + IntToStr(sysTime.wMinute); Label4.Caption := 'Second: ' + IntToStr(sysTime.wSecond); end; Последний раз редактировалось Nyctos Kasignete, 05.04.2009 в 18:39. |
|
#11
|
||||
|
||||
|
Я такое делал, только у меня в обратную сторону к 00:00:00 считало, для вас адаптировал:
Код:
unit Unit10;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm10 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
LeftSeconds: Integer;
public
{ Public declarations }
end;
var
Form10: TForm10;
implementation
{$R *.dfm}
procedure TForm10.FormCreate(Sender: TObject);
begin
LeftSeconds := 3600*24-5;
end;
procedure TForm10.Timer1Timer(Sender: TObject);
Var H, M, S: String;
T: Integer;
begin
T := LeftSeconds;
H := IntToStr(T div 3600);
Dec(T, T div 3600 * 3600);
M := IntToStr(T div 60);
Dec(T, T div 60 * 60);
S := IntToStr(T mod 60);
if Length(H) = 1 then H := '0'+ H;
if Length(M) = 1 then M := '0'+ M;
if Length(S) = 1 then S := '0'+ S;
Label1.Caption := H + ':' + M + ':' + S;
Inc(LeftSeconds);
end;Код:
object Form10: TForm10
Left = 0
Top = 0
Caption = 'Form10'
ClientHeight = 137
ClientWidth = 406
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 128
Top = 40
Width = 146
Height = 45
Caption = '00:00:00'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -37
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object Timer1: TTimer
Interval = 5
OnTimer = Timer1Timer
Left = 80
Top = 8
end
end |
|
#12
|
|||
|
|||
|
Если кому интересно, привожу свой окончательный вариант
(Напомню, задача была поставлена следующая: отобразить время с момента включения таймера1 и динамически выводить его на лейбл1. Было реализованно следующим образом: добавляем таймер2 с interval = 1000 (1 сек), включаем этот таймер вместе с таймером1 и пишем ему в событие OnTimer: Код:
procedure TMainForm.Timer2Timer(Sender: TObject);
var
ResultTime: TDateTime;
begin
ResultTime := Now - StartTime;
TimerLabel.Caption := IntToStr(HoursBetween(StartTime, Now)) + ':' + FormatDateTime('nn:ss', ResultTime);
end;PS: В очередной раз, низкий поклон помогавшим! ![]() |