|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как остановить цикл?
Вобщем создаётся матрица, которая записывается в грид по такому условию:
Код:
if M[k,kk]='' then begin всё работает,но после записи цифр из матрицы в грид,они быстро мигают(т.е. цикл выполняется бесконечно), но при этом числа не заменяются,а просто мигают и остаются на своих местах.ПОМОГИТЕ ПЛЗ ОСТАНОВИТЬ ЦИКЛ ПОСЛЕ ЗАПИСИ |
#2
|
|||
|
|||
Нужно больше [s]золота[/s] кода
|
#3
|
||||
|
||||
Неа, по одной строчке ответить невозможно (поддерживаю УКа phomm), показывайте весь цикл (выход вообще-то exit)
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
||||
|
||||
так мне exit прямо в цикле прописать???оно форму не закроет а только выйдет из цикла да?
|
#5
|
||||
|
||||
Точно, форму закроет Close
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
||||
|
||||
ща попробую
|
#7
|
||||
|
||||
вобщем всё дело в цикле на закраску ячеек картинками.при вставке exit в разные места ничего не выполняется.вот код, который не могу исправить:
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var FLAGG: Boolean; begin FLAGG:=False; k:=1; kk:=1; for k:=1 to 10 do for kk:=1 to 10 do begin with StringGrid1 do begin StringGrid1.Cells[k-1,kk-1]:=M[k,kk]; FLAGG:=True; end; end; with StringGrid1, StringGrid1.Canvas do if StringGrid1.Cells[ACol,ARow ]=' ' then ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, 0, True); with StringGrid1, StringGrid1.Canvas do if StringGrid1.Cells[ACol,ARow ]='*' then ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, 1, True); with StringGrid1, StringGrid1.Canvas do if StringGrid1.Cells[ACol,ARow ]='0' then ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, 6, True); if StringGrid1.Cells[ACol,ARow ]='1' then ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, 5, True); if StringGrid1.Cells[ACol,ARow ]='2' then ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, 2, True); if StringGrid1.Cells[ACol,ARow ]='3' then ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, 3, True); if StringGrid1.Cells[ACol,ARow ]='4' then ImageList1.Draw(StringGrid1.Canvas, Rect.Left, Rect.Top, 4, True); end; |
#8
|
||||
|
||||
либо здесь что то не так(заполнение грида матрицей)
Код:
for k:=1 to 10 do for kk:=1 to 10 do begin if M[k,kk]<>'' then M[k,kk]:=''; end; RANDOMIZE; i:=1; while (i<18) do begin k:=Random(10) +1; kk:=Random(10)+1; if M[k,kk]='' then begin i:=i+1; if ((k>1) and (k<=9)) and ((kk>1) and (kk<=9)) then begin if (M[k-1,kk-1]='') and (M[k+1,kk+1]='') and (M[k-1,kk]='') and (M[k,kk-1]='') and (M[k+1,kk]='') and (M[k,kk+1]='') and (M[k-1,kk+1]='') and (M[k+1,kk-1]='') then begin M[k,kk]:=IntToStr(Random(5)); end; end; if (k=1) and (kk=1) then begin if (M[k,kk+1]='') and (M[k+1,kk+1]='') and (M[k+1,kk]='') then begin M[k,kk]:=IntToStr(Random(5)); end; end; if (k=1) and (kk=10) then begin if (M[k+1,kk]='') and (M[k+1,kk-1]='') and (M[k-1,kk]='') then begin M[k,kk]:=IntToStr(Random(5)); end; end; if (k=10) and (k=1) then begin if (M[k,kk+1]='') and (M[k-1,kk+1]='') and (M[k-1,kk]='') then begin M[k,kk]:=IntToStr(Random(5)); end; end; if (k=10) and (kk=10) then begin if (M[k,kk-1]='') and (M[k-1,kk-1]='') and (M[k-1,kk]='') then begin M[k,kk]:=IntToStr(Random(5)); end; end; if (k=1) and (kk<10) and (kk>1) then begin if (M[k,kk-1]='') and (M[k,kk+1]='') and (M[k+1,kk]='') and (M[k+1,kk-1]='') and (M[k+1,kk+1]='') then begin M[k,kk]:=inttostr(Random(5)); end; end; if (k=10) and (kk<10) and (kk>10) then begin if (M[k-1,kk-1]='') and (M[k-1,kk]='') and (M[k-1,kk+1]='') and (M[k,kk-1]='') and (M[k,kk+1]='') then begin M[k,kk]:=inttostr(Random(5)); end; end; if (kk=1) then begin if (M[k-1,kk]='') and (M[k+1,kk]='') and (M[k+1,kk+1]='') and (M[k,kk+1]='') and (M[k-1,kk+1]='') then begin M[k,kk]:=inttostr(Random(5)); end; end; if(kk=10) then begin if (M[k-1,kk]='') and (M[k+1,kk]='') and (M[k,kk-1]='') and (M[k-1,kk-1]='') and (M[k+1,kk-1]='') then begin M[k,kk]:=inttostr(Random(5)); end; end; end; |
#9
|
|||
|
|||
1. Вообще-то, выход из цикла - это break. А exit - это выход из текущей процедуры.
2. Что бы не моргало, надо отрисовку делать в OnPaint соотв. ячейки. |
#10
|
||||
|
||||
Цитата:
Обратите внимание на то, какое филигранное использование блоков with..do в этом цикле наблюдается - зачем-то объявляются, и сразу внутри игнорируются, масломасляное прям такое Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#11
|
||||
|
||||
а можно поподробнее про отрисовку???
|
#12
|
|||
|
|||
У Вас проблема в том, что Вы зачем-то в процедуре отрисовки ячейки заново заполняете весь грид.
|