Компонент Delphi StringGrid









                                           ГЛАВНАЯ           СВОЙСТВА           СОБЫТИЯ           ПРИЁМЫ  ПРОГРАММИРОВАНИЯ



StringGrid Delphi

Как закрасить ячейку StringGrid




   Закрасить одну ячейку таблицы StringGrid Delphi поможет метод FillRect такого свойства компонента StringGrid, как Canvas (холст), отвечающего за все графические возможности компонента. Для закрашивания ячейки StringGrid этот метод следует вызвать в обработчике события DrawCell. Ячейка таблицы представляет собой прямоугольник, а обработчик события OnDrawCell имеет переменную

var Rect: TRect;

которая как раз и представляет собой прямоугольник с координатами, заданными индексами столбца ACol и строки ARow, подлежащий графической обработке. В итоге, вот как можно реализовать процедуру закрашивания одной ячейки таблицы StringGrid Delphi:

procedure TForm1.StringGrid1DrawCell(Sender: TObject;
  ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
begin
StringGrid1.Canvas.Brush.Color:=clRed;
if ((ACol=2)and(ARow=2)) then
  StringGrid1.Canvas.FillRect(Rect);
end;

   В результате ячейка с координатами (2, 2) будет окрашена в красный цвет.

   Пользуясь тем же методом, можно не только закрасить одну ячейку StringGrid в желаемый цвет, но и закрасить несколько ячеек по сложному закону. Например, создадим из закрашенных ячеек таблицы StringGrid шахматную доску. Для этого в предыдущей процедуре условный оператор:

if ((ACol=2)and(ARow=2)) then
  StringGrid1.Canvas.FillRect(Rect);

нужно заменить на два условных оператора:

// Первый условный оператор
if (((ACol=1)or(ACol=3)or(ACol=5)or(ACol=7))
               and
((ARow=1)or(ARow=3)or(ARow=5)or(ARow=7)))
  then StringGrid1.Canvas.FillRect(Rect);
// Второй условный оператор
if (((ACol=2)or(ACol=4)or(ACol=6)or(ACol=8))
               and
((ARow=2)or(ARow=4)or(ARow=6)or(ARow=8)))
  then StringGrid1.Canvas.FillRect(Rect);

   Ячейки таблицы StringGrid Delphi размером 9*9 послушно закрасятся подобно шахматной доске. Для упрощения данного условия можно создать два множества и использовать оператор проверки содержания элемента во множестве. Вот результирующая процедура:

procedure TForm1.StringGrid1DrawCell(Sender: TObject;
  ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
const M1 = [1, 3, 5, 7];
      M2 = [2, 4, 6, 8];
begin
StringGrid1.Canvas.Brush.Color:=clRed;
if (ACol in M1)and(ARow in M1)
               or
   (ACol in M2)and(ARow in M2)
  then StringGrid1.Canvas.FillRect(Rect);
end;




Читайте также:

    Сайт из коллекции Компоненты Delphi    

    Карта сайта