• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

таймер

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

nattaella

При нажатии на кнопку 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;
Код:

Как сделать, чтоб они выполнялись одновременно? Может использовать потоки?
 
При нажатии на кнопку 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 сек. Если вам необходимо именно по действиям процедуры ставить таймер нужно другое решение исходя их кода процедуры.
 
Можно через компонент 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 мин. к примеру), то одним из вариантов решения - это использование потоков
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab