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