Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Edit и Timer...


Автор: pomogite 14.5.2006, 08:31
Как вот в этой программе сделать так чтобы при нажатии Button1 таймеру присваивалось значение, он запускался и в Эдит1 каждую секунду показывалось значение таймера и при значении = 0 выполнялось какое либо действие?
Код

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    Button3: TButton;
    Timer1: TTimer;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Interval:=3600000;
timer1.Enabled:=true;
Edit1.Text:=IntToStr(Timer1.Interval);
end;
  

Автор: Sunr1se 14.5.2006, 08:57
Создать еще один таймер, установить его интервал на 1000 и прописать в обработчике события OnTimer:

Код

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Edit1.Text := IntToStr(Timer1.Interval);
if Timer1.Interval = 0 then
  begin
  {какие-то действия}
  end;
end;

А строку номер 32 убрать. Да, кстати, в Button1Click добавь такую строчку:

Код
Timer2.Enabled := true;
 

Автор: tigger 14.5.2006, 09:03
Может так...

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  t1,t2:TDateTime;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//присваиваем значение таймеру
t1:=strtotime('0:00:10');
t2:=time;

timer1.Enabled:=true;
end;

//тут выполняется что-то при работе таймера
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:=timetostr(t1-(time-t2));
if Edit1.Text = '0:00:00' then
         begin
         timer1.Enabled:=false;
         Application.MessageBox('Настало событие','Событие',mb_ok);
         end;

end;

end.



 smile  

Автор: pomogite 14.5.2006, 09:10
Вот сделала так но почему-то неработает =(  У 2 таймера значение 500м/с
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,MMSystem;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    Button3: TButton;
    Timer1: TTimer;
    Edit1: TEdit;
    Button4: TButton;
    Timer2: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R soundres.RES}

procedure TForm1.Button1Click(Sender: TObject);
var vre,zero:cardinal;
begin
vre:=20000;
zero:=0;
Timer1.Interval:=vre;
Edit1.Text:=IntToStr(Timer1.Interval);
if Timer1.Interval<>zero then
PlaySound('SND1', 0, SND_RESOURCE);
end;





procedure TForm1.Button4Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
  begin
  Edit1.Text := IntToStr(Timer1.Interval);
  end;

end.

 

Автор: tigger 14.5.2006, 09:12
Sunr1se, как может быть выполнено это условие if Timer1.Interval = 0

 smile

Добавлено @ 09:14 
pomogite, интервал у таймера сам не уменьшается, что ты из него хочешь выжать... 

Автор: Sunr1se 14.5.2006, 09:16
pomogite поставил задачу, я ее решил. А то, что интервал никогда не будет равен нулю... Может быть, интервал будет менять в другом месте кода... 

Автор: tigger 14.5.2006, 09:18
Интервал у таймера это не то время сколько он будет работать, а через какое время будет выполняться его функция. 

Автор: pomogite 14.5.2006, 09:18
Цитата(tigger @  14.5.2006,  09:12 Найти цитируемый пост)
интервал у таймера сам не уменьшается, что ты из него хочешь выжать...  

Хочу чтобы видно было сколько остаётся до события... 

Автор: Guedda 14.5.2006, 09:27
Вот так:
Код

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    Button3: TButton;
    Timer1: TTimer;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  DoSobitya : Integer;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Interval:=1000;
  timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender : TObject);
begin
  Edit1.Text:=IntToStr(DoSobitya);
  Dec(DoSobitya); //Уменьшаем на одну секунду
end;

initialization
  DoSobitya := 3600; //Сколько секунд до события

end.
 

Автор: pomogite 14.5.2006, 10:02
Всё равно время не уменьшаеться, просто стоит начальное значение  =( 

Автор: tigger 14.5.2006, 10:27
pomogite, у меня же в примере все написано, или я чего-то не понимаю... smile  

Автор: Guedda 14.5.2006, 10:54
Цитата(pomogite @  14.5.2006,  11:02 Найти цитируемый пост)
Всё равно время не уменьшаеться, просто стоит начальное значение  =(  

Хм... 
Покажи, пожалуйста, код для таймера и для кнопки. У меня все работает... 

Автор: Poseidon 14.5.2006, 11:13
pomogite, вот, смотри
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)