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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.11.2011, 22:08
Gogolinsky Gogolinsky вне форума
Прохожий
 
Регистрация: 29.11.2011
Сообщения: 17
Репутация: 10
Восклицание Создать цикл

Есть stringgrid. При нажатии на кнопку некоторые элементы в ней изменяются. Надо создать цикл, который будет изменять эти элементы до тех пор, пока все они не станут равными. Если точнее, в конце во всех ячейках должна находиться буква 'a'. Пока что приходиться самому кликать на кнопку много раз, пока не увижу, что все ячейки приняли значение a.
Вот код кнопки:
Код:
procedure TForm1.btn1Click(Sender: TObject); //Кнопка Старт
var
i, j, k, n, ves: Integer;
e, s, MinCvet, MaxCvet: string;

begin
 e:=CoordChislMinEl(strngrd1); //Координаты минимального значения в матрице (числа)
 s:=CoordMinEl(strngrd1); //Координаты минимального значения в матрице (ребро)
 ves:=MinEl(strngrd1); //Вес минимального ребра
  if strngrd2.Cells[1,StrToInt(e[2])] = strngrd2.Cells[1,StrToInt(e[4])] then //Если цвета ребер одинаковые (ребро образует цикл)
   begin
    strngrd1.Cells[StrToInt(e[4]),StrToInt(e[2])]:=''; //Исключаем рассмотренный ребра из цикла
    strngrd1.Cells[StrToInt(e[2]),StrToInt(e[4])]:='';
   end
  else
   begin
    MinCvet:=Min(strngrd2.Cells[1, StrToInt(e[2])], strngrd2.Cells[1, StrToInt(e[4])]); //Выбираем меньший цвет из двух
    MaxCvet:=Max(strngrd2.Cells[1, StrToInt(e[2])], strngrd2.Cells[1, StrToInt(e[4])]); //Выбираем больший цвет из двух
     for j:=1 to strngrd2.RowCount-1 do
      if strngrd2.Cells[1,j] = MaxCvet then
       strngrd2.Cells[1,j]:=MinCvet;
       lbl1.Caption:= lbl1.Caption + ' ' + s; //Вписываем ребро в остов
       lbl3.Caption:= IntToStr(StrToInt(lbl3.Caption)+ves); //Подсчитывем общий вес ребер в остове
       strngrd1.Cells[StrToInt(e[4]),StrToInt(e[2])]:=''; //Исключаем рассмотренный ребра из цикла
       strngrd1.Cells[StrToInt(e[2]),StrToInt(e[4])]:='';
   end;
end;
Админ: Пользуемся тегами для оформления кода!

Последний раз редактировалось Admin, 29.11.2011 в 22:20.
Ответить с цитированием
  #2  
Старый 29.11.2011, 22:16
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну и не мучайся, используй Таймер. Не забывай обновлять StringGrid, если нужно визуально наблюдать за процессом.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 29.11.2011, 22:25
Gogolinsky Gogolinsky вне форума
Прохожий
 
Регистрация: 29.11.2011
Сообщения: 17
Репутация: 10
По умолчанию

Не понятно, как таймер будет проверять содержимое ячеек. Или не будет проверять? Каквсе должно происходить?
Ответить с цитированием
  #4  
Старый 29.11.2011, 22:29
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В Таймере вызывай свою процедуру, убрав её с кнопки и вынеся отдельно, либо, если кнопка нужна вызывай:
Код:
  Btn1Click(NIL);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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