Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.05.2014, 19:53
Аватар для hsMapk
hsMapk hsMapk вне форума
Новичок
 
Регистрация: 17.04.2014
Сообщения: 60
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию Как остановить цикл?

Вобщем создаётся матрица, которая записывается в грид по такому условию:
Код:
       if M[k,kk]='' then
             begin

всё работает,но после записи цифр из матрицы в грид,они быстро мигают(т.е. цикл выполняется бесконечно), но при этом числа не заменяются,а просто мигают и остаются на своих местах.ПОМОГИТЕ ПЛЗ ОСТАНОВИТЬ ЦИКЛ ПОСЛЕ ЗАПИСИ
Ответить с цитированием
  #2  
Старый 02.05.2014, 21:39
phomm phomm вне форума
Новичок
 
Регистрация: 07.10.2013
Адрес: Тюмень
Сообщения: 50
Версия Delphi: 7/2007/XE+/FPC
Репутация: 22
По умолчанию

Нужно больше [s]золота[/s] кода
Ответить с цитированием
  #3  
Старый 02.05.2014, 21:43
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Неа, по одной строчке ответить невозможно (поддерживаю УКа phomm), показывайте весь цикл (выход вообще-то exit)
Ответить с цитированием
  #4  
Старый 03.05.2014, 01:30
Аватар для hsMapk
hsMapk hsMapk вне форума
Новичок
 
Регистрация: 17.04.2014
Сообщения: 60
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

так мне exit прямо в цикле прописать???оно форму не закроет а только выйдет из цикла да?
Ответить с цитированием
  #5  
Старый 03.05.2014, 01:32
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Точно, форму закроет Close
Ответить с цитированием
  #6  
Старый 03.05.2014, 01:33
Аватар для hsMapk
hsMapk hsMapk вне форума
Новичок
 
Регистрация: 17.04.2014
Сообщения: 60
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

ща попробую
Ответить с цитированием
  #7  
Старый 03.05.2014, 01:40
Аватар для hsMapk
hsMapk hsMapk вне форума
Новичок
 
Регистрация: 17.04.2014
Сообщения: 60
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

вобщем всё дело в цикле на закраску ячеек картинками.при вставке 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  
Старый 03.05.2014, 01:43
Аватар для hsMapk
hsMapk hsMapk вне форума
Новичок
 
Регистрация: 17.04.2014
Сообщения: 60
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

либо здесь что то не так(заполнение грида матрицей)
Код:
  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  
Старый 03.05.2014, 05:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Вообще-то, выход из цикла - это break. А exit - это выход из текущей процедуры.
2. Что бы не моргало, надо отрисовку делать в OnPaint соотв. ячейки.
Ответить с цитированием
  #10  
Старый 03.05.2014, 06:56
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от lmikle
1. Вообще-то, выход из цикла - это break. А exit - это выход из текущей процедуры...
Попутал, извнт, часто путаю брейк с экситом


Обратите внимание на то, какое филигранное использование блоков with..do в этом цикле наблюдается - зачем-то объявляются, и сразу внутри игнорируются, масломасляное прям такое
Ответить с цитированием
  #11  
Старый 03.05.2014, 11:26
Аватар для hsMapk
hsMapk hsMapk вне форума
Новичок
 
Регистрация: 17.04.2014
Сообщения: 60
Версия Delphi: Delphi 7
Репутация: 5
По умолчанию

а можно поподробнее про отрисовку???
Ответить с цитированием
  #12  
Старый 03.05.2014, 20:31
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

У Вас проблема в том, что Вы зачем-то в процедуре отрисовки ячейки заново заполняете весь грид.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter