Почему не работает повторный вызов процедуры - PascalABC.NET
Формулировка задачи:
после того, как процедура start отработала, запускается и работает процедура over, но после нажатия на прямоугольник(для того чтобы запустилась процедура старт), программа зависает и выключается соответственно.
В чем проблема?
Решение задачи: «Почему не работает повторный вызов процедуры»
textual
Листинг программы
program Program9; uses graphabc, abcobjects, abcbuttons; var b : rectangleABC; c : rectangleABC; Initstart:boolean; left, right : integer; x:=100; y:=100; procedure start; forward; procedure keyd(key : integer); begin case key of vk_left: left := 1; vk_right : right := 1; end; end; procedure keyup(key : integer); begin case key of vk_left: left := 0; vk_right : right := 0; end; end; procedure mousedown(x,y,mb : integer); begin // if (x>100) and (x<200) and (y>200) and (y<230) and (mb=1) then start:=true; if mb=1 then Initstart:=true else Initstart:=false; end; procedure over; begin b.Destroy; //уничтожаем объект //создаем что-то типа кнопки, после ее нажатия, должна запуститься процедура старт c := new RectangleABC(100,200,100,30, color.AliceBlue); end; procedure start; begin for var i:= objects.Count-1 downto 0 do objects[i].Destroy; // удаляем все объект b := new RectangleABC(x,y,100,30,color.LightGreen); //инициализирую прямоугольник и запускаю цикл while (x<150) do begin if left=1 then b.Visible:=false; //если кнопка "влево" нажата, то скрываем обеъект if left=0 then b.Visible:=true; //если кнопка отжата, то показываем его if right=1 then // если нажата правая кнопка, то двигаем объект вправо пока не отпустим кнопку или не begin; //завершится цикл b.Moveto(x+15,y+2); x:=x+1; end; sleep(10); end; x:=100;Initstart:=false; over; // по окончанию запускам процедуру end; begin onkeydown := keyd; onkeyup := keyup; onmousedown := mousedown; Initstart:=true; repeat if Initstart then start; until false; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д