|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Закрашивание ячеек грида по нажатию кнопки
Здравствуйте. Мне необходимо закрасить ячейки, в зависимости от значений в них( учитываются только значения в зеленых ячейках). Например, если таблица заполнена так:, то после нажатия на кнопку "Найти минимальный путь", должно получится так:.
Принцип такой: Начиная с нижней левой зеленой ячейки, сравнивается зеленая ячейка справа и сверху, и та, в которой значение меньше закрашивается вместе с желтой ячейкой между двумя зелеными. Когда происходит выход из цикла закрашивается строка до конца или столбец до верха, в зависимости от "причины" выхода из цикла. Но вот почему-то закрашивание не происходит. Гугл не помог... В 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; Помогите, пожалуйста. |