Кнопка стоп в PascalABC.net, помогите.
Добавлено: 13.06.2022 20:06:10
Есть программа, которая должна запускаться при нажатии на кнопку старт(2 кнопки запуска с правой стороны и с левой) и останавливаться при нажатии на кнопку стоп.
Я задал такую логику работы, что при нажатии на стартовую кнопку переменная n принимает значение true и выполняется цикл программы. А при нажатии кнопки стоп n:=false и цикл должен завершиться. Но при нажатии на стартовую кнопку остальные кнопки становятся некликабельными и панель зависает, а программа продолжает работать в цикле.
Нужна помощь, что исправить в коде
Я задал такую логику работы, что при нажатии на стартовую кнопку переменная n принимает значение true и выполняется цикл программы. А при нажатии кнопки стоп n:=false и цикл должен завершиться. Но при нажатии на стартовую кнопку остальные кнопки становятся некликабельными и панель зависает, а программа продолжает работать в цикле.
Нужна помощь, что исправить в коде
- Код: Выделить всё
implementation
var
x, y, s, k: integer; i: real;
n:Boolean;
procedure Form1.start_R_Click(sender: Object; e: EventArgs);//запуск справа
begin
n:=true;
while n=true do
begin //начало самой программы
if n=false then
begin
line(250, 0, x + 250, y + 250);
circle(x + 250, y + 250, 50);
break;
end;
repeat
i := i + pi / 100;
x := round(100 * (cos(i)));
y := round(10 * (sin(i)));
lockdrawing;
ClearWindow;
line(250, 0, x + 250, y + 250);
circle(x + 250, y + 250, 50);
redraw;
sleep(s);
until i >= pi;
i := 0;
repeat
i := i + pi / 100;
x := round(100 * (-cos(i)));
y := round(10 * (sin(i)));
lockdrawing;
ClearWindow;
line(250, 0, x + 250, y + 250);
circle(x + 250, y + 250, 50);
redraw;
sleep(s);
until i >= pi;
if i >= pi then i := 0;
end; //конец программы
end;
procedure Form1.start_L_Click(sender: Object; e: EventArgs);//запуск слева
begin
n := true;
while n=true do
begin //начало самой программы
if n=false then
begin
break;
line(250, 0, x + 250, y + 250);
circle(x + 250, y + 250, 50);
end;
repeat
i := i + pi / 100;
x := round(100 * (-cos(i)));
y := round(10 * (sin(i)));
lockdrawing;
ClearWindow;
line(250, 0, x + 250, y + 250);
circle(x + 250, y + 250, 50);
redraw;
sleep(s);
until i >= pi;
i := 0;
repeat
i := i + pi / 100;
x := round(100 * (cos(i)));
y := round(10 * (sin(i)));
lockdrawing;
ClearWindow;
line(250, 0, x + 250, y + 250);
circle(x + 250, y + 250, 50);
redraw;
sleep(s);
until i >= pi;
if i >= pi then i := 0;
end; //конец программы
end;
procedure Form1.stop_Click(sender: Object; e: EventArgs);//кнопка стоп
begin
n:=false;
line(250, 0, x + 250, y + 250);//возврат маятника
circle(x + 250, y + 250, 50);// в начальное положение