![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
У Вас проблема в том, что Вы зачем-то в процедуре отрисовки ячейки заново заполняете весь грид.
|