Задать вопрос
@Porto_b

Раскраска StringGrrid Дельфи, сохранение цвета?

Имеется StringGrid на форме. Есть пользовательская функция которая подготавливает переменные для использования в событие DrawCell объекта StringGrid.
procedure SetColor(ARow, ACol : integer; Col : TColor);
begin
SC := True; 
AR := ARow;  //Строка (Глобальные переменные)
AC := ACol;   //Столбец
CL := Col;    //Цвет
Form1.StringGrid1.Refresh;
SC := False;
end;


Основной код программы где принимается решение закрасить ячейку
...
 if step > 0 then      //Если step больше нуля, вычисляем предыдущую ячейку и закрашиваем её в желтый цвет                     
                  SetColor(cl,(cindex+((step-1) * (step-1))), clYellow); 
                   
SetColor(cl, ind, clBlue);   //Текущую ячейку закрашиваем в синий цвет  cl - строка, ind - столбец.
...


Событие Draw
...
  if SC then
           if (ARow = CL) and (ACol = AC) then
           Canvas.Brush.Color:=CL;

           Canvas.FillRect(Rect);
           Canvas.TextRect (Rect,Rect.Left,Rect.Top,Cells[ACol,ARow]);
           Canvas.TextRect (Rect,Rect.Left+2,Rect.Top+2,Cells[ACol,ARow]);
...


Все бы хорошо но предыдущий закрашенный в желтый цвет ячейка становиться белым а текущая как надо закрашивается в синий цвет. То есть работает но не сохраняется цвет предыдущей ячейки и теряет она желтый цвет при закрашивание текущей ячейки. Как сделать чтобы цвет сохранился?
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
Как сделать чтобы цвет сохранился?
Создать массив закрашенных ячеек. Использовать OnDrawCell.
Ответ написан
Комментировать
HemulGM
@HemulGM Куратор тега Delphi
Delphi Developer, сис. админ
DrawCell - это событие, которое происходит каждый раз при отрисовке каждой ячейки. Следовательно, когда ты устанавливаешь значения переменным AR, AC, то при отрисовке, которую ты вызываешь методом Refresh, происходит вызов DrawCell для каждой ячейки. И раз ты заменяешь значения этим переменным, то и закрашиваются у тебя только последние установленные.

Чтобы закрасить нужные ячейки, ты должен иметь возможность в любой момент получить состояние нужной ячейки (закрашивать ей, или нет).

Как уже предложили выше, можешь использовать массив. Который должен совпадать по размерам с таблицей. Т.е. быть двумерным и иметь соответствующее кол-во "строк" и "столбцов". А в методе SetColor ты будешь устанавливать в массив значение, например "-1" или <цвет>. "-1" - не закрашивать, ну а любое значение - закрашивать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы