Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ цикл

Автор: iriska_2 29.05.2007 3:36

подскажите пожалуйста
у меня сейчас бесконечный цикл, я хочу сделать выход из этого цикла по нажатию кнопки, как это сделать? blink.gif

Автор: Гость 29.05.2007 4:20

может я некорректно задала вопрос
как проверить нажата кнопка или нет?

Автор: мисс_граффити 29.05.2007 4:30

можно чуть подробнее?
где этот цикл, к чему он привязан? внутри какого-то обработчика события?

вариант использования RadioButton или CheckBox не рассматривается? Или, может, обойтись вообще без бесконечного цикла (пользоваться таймером, например).

Автор: Гость 29.05.2007 4:46

я пишу прогу, где шар отбивается от стенок, по нажатию кнопки мне надо, чтобы прога завершилась

Автор: Гость 29.05.2007 4:47

т.е. закончился цикл движения шара

Автор: volvo 29.05.2007 4:52

Ну, а что насчет ответа на вопрос:

Цитата
где этот цикл, к чему он привязан?


Понимаешь, пока неизвестно, как организован цикл, возможно, его ВООБЩЕ нельзя остановить. Возможно, придется кое-что добавлять... А гадание на кофейной гуще - это не сюда...

Автор: Гость 29.05.2007 4:56

цикл возникает при двойном щелчке по форме

Код

constructor  bol.createe(sx,sy:integer;box:tPaintBox);
begin
  currX:=sX;
  currY:=sY;
  destX:=sX;
  destY:=sY;
  deltaX:=0;
  deltaY:=0;
  shar(box,sx,sy);
end;

procedure bol.shar(box:tPaintBox;sdx,sdy:integer);
var key, x,y:integer;
begin
    Box.Canvas.Pen.Width:=3;
    Box.Canvas.Pen.Color:=clred;
    Box.canvas.ellipse(currX-25,currY-25,currX+25,currY+25);
    Box.canvas.font.name:='Arial';
    Box.canvas.font.style:=[fsBold,fsItalic];
    Box.canvas.font.size:=50 div 5;
    x:=sdx -25+(50 - Box.canvas.textwidth('sony'))div 2;
    y:=sdy -25+(50 - Box.canvas.textheight('sony'))div 2;
    Box.canvas.textout(x,y,'sony'); Box.Canvas.Pen.Color:=clBtnFace;
end;

procedure bol.del(box:tPaintBox);
begin
  Box.Canvas.Pen.Width:=3;
  Box.Canvas.Pen.Color:=clBtnFace;
  Box.canvas.ellipse(currX-25,currY-25,currX+25,currY+25);
end;

procedure bol.run0(box:tPaintBox);
begin
  while (curry-25)<>0 do begin
    time;
    del(box);
    currx:=currx+1;
    curry:=curry-1;
    shar(box,currx,curry);
  end;
  run1(box);
end;

procedure bol.time;
var t:integer;
begin
  t:=5000000;
  while t<>0 do t:=t-1;
end;

procedure bol.run1(box:tPaintBox);
begin
  while ((currx+25)<609) and ((curry+25)<609) and ((currx-25)>0) do begin
    time;
    del(box);
    currx:=currx+1;
    curry:=curry+1;
    shar(box,currx,curry);
  end;
if (currx+25)>608 then run2(box);
if (curry+25)>608 then run3(box);
if (currx-25)<1 then run4(box);
end;

procedure bol.run2(box:tPaintBox);
begin
  while ((curry-25)>0) and ((curry+25)<609) and ((currx-25)>0) do begin
    time;
    del(box);
    currx:=currx-1;
    curry:=curry+1;
    shar(box,currx,curry);
  end;
if (curry-25)<1 then run1(box);
if (curry+25)>608 then run3(box);
if (currx-25)<1 then run4(box);
end;

procedure bol.run3(box:tPaintBox);
begin
  while ((curry-25)>0) and ((currx+25)<609) and ((currx-25)>0) do begin
    time;
    del(box);
    currx:=currx-1;
    curry:=curry-1;
    shar(box,currx,curry);
  end;
if (curry-25)<1 then run1(box);
if (currx+25)>608 then run2(box);
if (currx-25)<1 then run4(box);
end;

procedure bol.run4(box:tPaintBox);
begin
  while ((curry-25)>0) and ((currx+25)>0) and ((curry+25)>0) do begin
    time;
    del(box);
    currx:=currx+1;
    curry:=curry-1;
    shar(box,currx,curry);
  end;
if (curry-25)<1 then run1(box);
if (currx+25)>608 then run2(box);
if (curry+25)>608 then run3(box);
end;

Автор: volvo 29.05.2007 5:18

Ух ты blink.gif

Да у тебя не цикл, а рекурсия... Отсюда так просто не выйдешь....