|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
загнать время TTimer в Label.Caption
Есть объект 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 сказал Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. Последний раз редактировалось 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: В очередной раз, низкий поклон помогавшим! |