Jump to content
СофтФорум - всё о компьютерах и не только

Подскажите


Recommended Posts

Privet. Ya napisal kod v C++ Builder. Polu4ilos tak:

Esli 4to mojesh popravit.

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

static sec=0,min=59,hour=23;

static temp=0;

temp=temp+Timer1->Interval;

if(temp>=1000)

{

temp=0;

sec=sec+1;

}

if(sec>59)

{

sec=0;

min=min+1;

if(min>59)

{

min=0;

hour=hour+1;

}

}

if(hour>23)

hour=0;

Label1->Caption=IntToStr(hour)+" : "+IntToStr(min)+" : "+IntToStr(sec);

}

Link to comment
Share on other sites

skilk:

function TimerInterval2Time(TimerInterval:Integer):TTime;var Hour,Min,Sec:Word;begin Hour:=Trunc(TimerInterval/3600000); TimerInterval:=TimerInterval-(Hour*3600000); Min:=Trunc(TimerInterval/60000); TimerInterval:=TimerInterval-(Min*60000); Sec:=Trunc(TimerInterval/1000); Result:=EncodeTime(Hour, Min, Sec, 0);end;
procedure TForm1.Button1Click(Sender: TObject);begin Label1.Caption:=TimeToStr(TimerInterval2Time(543634));end;
Edited by Сергей Плоткин
Link to comment
Share on other sites

Спасибо, но есть ещё одна проблема.

Интервал таймера стал отбражаться как надо (часы, минуты, секунды), но мне надо что бы интервал отображался реально, то есть если Timer1.Interval=10000, то на Label интервал убывал, а он стоял постоянно равным 10 секундам.

Link to comment
Share on other sites

skilk:

Тебе обратный отсчет что-ль нужен таким жутким способом? Тогда делай так:

1) Прописывай глобальную переменную Amount типа Integer, равную нулю по-умолчанию

2) Интервал таймера ставь в одну секунду (1000)

3) в OnTimer пиши:

const Int=10000;begin Amount:=Amount+1000; If Int-Amount>0 then Label1.Caption:=TimeToStr(TimerInterval2Time(Int-Amount)) else   begin     Timer1.Enabled:=False;     ShowMessage('Done');   end;end;
Link to comment
Share on other sites

skilk:

Можно, хотя я и объяснил тебе все по шагам...

Юнит:

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;type TForm1 = class(TForm)   Label1: TLabel;   Timer1: TTimer;   procedure Timer1Timer(Sender: TObject); private   { Private declarations } public   { Public declarations } end;var Form1: TForm1; Amount: Integer=0;implementation{$R *.dfm}function TimerInterval2Time(TimerInterval:Integer):TTime;varHour,Min,Sec:Word;beginHour:=Trunc(TimerInterval/3600000);TimerInterval:=TimerInterval-(Hour*3600000);Min:=Trunc(TimerInterval/60000);TimerInterval:=TimerInterval-(Min*60000);Sec:=Trunc(TimerInterval/1000);Result:=EncodeTime(Hour, Min, Sec, 0);end;procedure TForm1.Timer1Timer(Sender: TObject);constInt=10000;beginAmount:=Amount+1000;If Int-Amount>0 thenLabel1.Caption:=TimeToStr(TimerInterval2Time(Int-Amount)) else  begin    Timer1.Enabled:=False;    ShowMessage('Done');  end;end;end.

Форма:

object Form1: TForm1 Left = 192 Top = 114 Width = 870 Height = 640 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel   Left = 32   Top = 24   Width = 87   Height = 13   Caption = 'Обратный отсчет' end object Timer1: TTimer   OnTimer = Timer1Timer   Left = 232   Top = 240 endend
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...