Компонент Delphi StringGrid









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




События StringGrid
11. OnClick
14. OnEnter
15. OnExit
19. OnKeyDown
11. OnKeyUp
14. OnMouseUp




StringGrid Delphi

Событие OnDrawCell




   Событие OnDrawCell компонента StringGrid Delphi управляет отрисовкой таблицы. Размещая в обработчике события OnDrawCell программый код, можно раскрашивать ячейки, выводить рисунки, и делать текстовые надписи, занимающие в ячейке не только одну, но и несколько строк.

   Пожалуй, событие OnDrawCell одно из самых непонятных для новичков. По сравнению с другими событиями в Delphi, вызывает непонимание то, каким способом событие OnDrawCell можно вызвать.

   Ответ же на этот вопрос чрезвычайно прост - в его вызове просто нет необходимости! Таблица сама постоянно вызывает это событие для того, чтобы отрисовать свои ячейки. Рассмотрим обработчик события OnDrawCell:

procedure TForm1.StringGrid1DrawCell(Sender: TObject;
  ACol, ARow: Integer; Rect: TRect;
  State: TGridDrawState);
begin

end;

   ACol и ARow - ячейки, просматриваемые таблицей в данный момент, Rect - прямоугольник в рамках ячейки, заданной индексами ACol и ARow. Если в коде обработчика присутствует условие, использующее эти переменные, то при его истинности происходит отрисовка соответствующей ячейки.

   Так что искусствено вызывать событие OnDrawCell нет необходимости. Необходимо лишь создать в обработчике условие, указывающее на ячейки, в которых нужно отобразить графику.

   Сама графика в таблице выводится стандартными средствами Delphi. Компонент StringGrid обладает свойством Canvas, и для рисования в ячейках таблицы необходимо пользоваться богатым набором методов класса Canvas Delphi.

   В качастве простого примера рассмотрим закрашивание одной ячейки с индексами (1, 1):

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

   Нужно иметь в виду, что при закрашивании ячейки её текстовое содержимое тоже будет закрашено, поэтому если его нужно сохранить, то текст тоже нужно отрисовать дополнительно. Содержимое обработчика события OnDrawCell в этом случае будет выглядеть так:

with StringGrid1, StringGrid1.Canvas do
if ((ACol=1)and(ARow=1)) then
 begin
  Canvas.Brush.Color:=clRed;
  FillRect(Rect);
  TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
 end;


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

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

    Карта сайта