4.4 Таблицы изображений — компоненты DrawGrid и StringGrid

Компонент DrawGrid используется для создания в приложении таблицы, которая может содержать графические изображения (см. пример на рис. 4.6). Этот компонент подобен компоненту StringGrid (см. раздел 3.3.6), поскольку последний является производным от DrawGrid. Поэтому в DrawGrid присутствуют все свойства, методы, события компонента StringGrid, кроме относящихся к тексту, т.е. кроме свойств Cells, Cols, Rows, Objects. С этой точки зрения компонент StringGrid обладает существенно большими возможностями, чем DrawGrid, поскольку он может хранить в ячейках и изображения, и тексты. А если вы захотите внести текст в какие-то ячейки DrawGrid, то вам надо будет использовать для этого методы вывода текста на канву (см. раздел 3.2), что не очень удобно.

Рис. 4.6
Пример таблицы DrawGrid

Рассмотрим свойства компонентов DrawGrid и StringGrid, относящиеся к изображениям, поскольку свойства StringGrid, относящиеся к тексту, уже рассматривались в разделе 3.3.6.

Компоненты DrawGrid и StringGrid имеют канву Canvas, на которой можно размещать изображения методами, изложенными в разделе 4.2. Имеется метод CellRect, который возвращает область канвы, отведенную под заданную ячейку. Этот метод определен как

function CellRect (ACol, ARow: Longint): TRect;
где ACol и ARow — индексы столбца и строка, начинающиеся с 0, на пересечении которых расположена ячейка. Возвращаемая этой функцией область является областью канвы, в которой можно рисовать необходимое изображение. Например, оператор
DrawGrid1.Canvas.CopyRect(DrawGrid1.CellRect(1, 1),
BitMap.Canvas, Rect(0, 0, BitMap.Height, BitMap.Width));
копирует методом CopyRect (см. раздел 4.2) в ячейку (1, 1) таблицы DrawGrid1 изображение из компонента BitMap. Эта ячейка является второй слева и второй сверху в таблице, поскольку индексы начинаются с 0. Учтите, что если размеры ячейки меньше, чем размер копируемого изображения, то в ячейке появится только левая верхняя часть картинки.

Изображение на канве компонентов DrawGrid и StringGrid, как и на канве любого компонента, подвержено стиранию при перекрытии окна приложения другими окнами или, например, при сворачивании приложения. Поэтому необходимо принимать меры, описанные в разделе 4.2, чтобы с помощью обработчика событий OnPaint восстанавливать испорченное изображение. Это делает компонент DrawGrid не слишком удобным для использования.

Все свойства и события, позволяющие определить выбранную пользователем ячейку таблицы, были рассмотрены в разделе 3.3.6. Там же вы найдете описание свойств, отвечающих за внешний вид и допустимость перестройки пользователем таблицы во время выполнения приложения.


к началу страницы