таймер

  • Автор темы nattaella
  • Дата начала
N

nattaella

#1
При нажатии на кнопку BitBtn1 у меня одновременно должны начать выполняться процедура RunRight(0); и в LEdit4 показываться числа от 15 до 0 с интервалом в 1 сек. :

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var p:integer;
begin
RunRight(0);
for i:=5 downto 1 do begin
LEdit4.Text:=inttostr(i);
sleep(1000);
Application.ProcessMessages;
LEdit4.Text:=inttostr(i-1);
end;
end;
Код:
Как сделать, чтоб они выполнялись одновременно? Может использовать потоки?
 

nayke

Well-known member
04.08.2010
310
0
#2
При нажатии на кнопку BitBtn1 у меня одновременно должны начать выполняться процедура RunRight(0); и в LEdit4 показываться числа от 15 до 0 с интервалом в 1 сек. :

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var p:integer;
begin
RunRight(0);
for i:=5 downto 1 do begin
LEdit4.Text:=inttostr(i);
sleep(1000);
Application.ProcessMessages;
LEdit4.Text:=inttostr(i-1);
end;
end;
Код:
Как сделать, чтоб они выполнялись одновременно? Может использовать потоки?
Можно через компонент TTimer
на click вешаете
Код:
begin
RunRight(0);
k:=0;
EndTimer:=15;
Timer1.enabled:=true;
в обработчике таймера

Код:
label4.caption:=k;
timer1.enabled:=not(k=EndTimer);
inc(k);
переменные k,EndTimer глобальные целые.
Однако это не означает, что ваша процедура будет идти 15 сек. Если вам необходимо именно по действиям процедуры ставить таймер нужно другое решение исходя их кода процедуры.
 

ikot

Active member
11.06.2008
27
0
#3
Можно через компонент TTimer
на click вешаете
Код:
begin
RunRight(0);
k:=0;
EndTimer:=15;
Timer1.enabled:=true;
в обработчике таймера

Код:
label4.caption:=k;
timer1.enabled:=not(k=EndTimer);
inc(k);
переменные k,EndTimer глобальные целые.
Однако это не означает, что ваша процедура будет идти 15 сек. Если вам необходимо именно по действиям процедуры ставить таймер нужно другое решение исходя их кода процедуры.
использование таймера не решит проблемы, так как код будет выполнятся последовательно, т.е. сначала выполнится процедура RunRight, а только затем включится таймер. И поскольку никому, кроме автора, неизвестно что делает эта процедура (а она может, например, заморозить работу основной программы на 30 мин. к примеру), то одним из вариантов решения - это использование потоков