Здравствуйте. Мне необходимо закрасить ячейки, в зависимости от значений в них( учитываются только значения в зеленых ячейках). Например, если таблица заполнена так:
, то после нажатия на кнопку "Найти минимальный путь", должно получится так:
.
Принцип такой:
Начиная с нижней левой зеленой ячейки, сравнивается зеленая ячейка справа и сверху, и та, в которой значение меньше закрашивается вместе с желтой ячейкой между двумя зелеными. Когда происходит выход из цикла закрашивается строка до конца или столбец до верха, в зависимости от "причины" выхода из цикла. Но вот почему-то закрашивание не происходит. Гугл не помог...
В DrawCell пишу код:
Код:
//Закрасить минимальный путь
with StringGrid1, StringGrid1.Canvas do
begin
if clrd=true then
begin
ARow:=RowCount-2;
ACol:=1;
while ((ACol<=ColCount-1) or (ARow>=1)) do
begin
if (Cells[ACol+2,ARow]<Cells[ACol,ARow-2])then
begin
Brush.Color := clBtnFace;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top + 2, Cells[ACol, ARow]);
ARow:=ARow-2;
end;
if (Cells[ACol+2,ARow]<Cells[ACol,ARow-2])then
begin
Brush.Color := clBtnFace;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top + 2, Cells[ACol, ARow]);
ACol:=ACol+2;
end;
if (Cells[ACol+2,ARow]<Cells[ACol,ARow-2])and (Cells[ACol+2,ARow]<Cells[ACol,ARow-2]) then
begin
Brush.Color := clBtnFace;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top + 2, Cells[ACol, ARow]);
ACol:=ACol+2;
ARow:=ARow-2;
end;
end;
end;
Код кнопки:
Код:
procedure TForm1.Button4Click(Sender: TObject);
begin
if (StringGrid1.Cells[1,StringGrid1.RowCount-2]<>'') then
begin
clrd := True;
Refresh;
end
else
ShowMessage('Табица заполнена не полностью!');
end;
Начальное значение clrd:=false;
Помогите, пожалуйста.