![]() |
|
#1
|
|||
|
|||
![]() Есть 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
|
||||
|
||||
![]() Ну и не мучайся, используй Таймер. Не забывай обновлять StringGrid, если нужно визуально наблюдать за процессом.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
![]() Не понятно, как таймер будет проверять содержимое ячеек. Или не будет проверять? Каквсе должно происходить?
|
#4
|
||||
|
||||
![]() В Таймере вызывай свою процедуру, убрав её с кнопки и вынеся отдельно, либо, если кнопка нужна вызывай:
Код:
Btn1Click(NIL); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |