Добавление объектов в таблицу

 В таблицу можно вставлять посторонние объекты. Для чего это может быть нужно? Например, чтобы выделить какие-нибудь значения ячеек. Можно, конечно, использовать условное выделение (мы рассматривали подобный пример) - но не всегда его возможностей бывает достаточно.

 

 Рассмотрим пример, в котором каждое значение ячейки представлено в виде маленькой шкалы, которая отображает уровень зарплаты. Вот что должно получиться в результате:

 

clip0173

 

 Красным помечены значения менее 100, желтым - менее 3000, зеленым - более 3000.

 

 Приступим к созданию отчета. Положим на лист объект "Кросс-таблица БД" и настроим его содержимое:

 

clip0177

 

 Настроим внешний вид таблицы. Для этого выберем цвет заголовков, поменяем английские надписи на русские (Зарплата, Сотрудник, Год, Итого) и отключим свойство "Авто-размер" (AutoSize). В результате должна получиться такая таблица:

 

clip0176

 

 Теперь добавим элементы, которые будут отображать шкалу, в таблицу. Для этого выберите объект "Рисование/Прямоугольник" в панели объектов и положите его внутрь ячейки таблицы:

 

clip0174

 

 Таким же образом добавьте еще два прямоугольника. Должно получиться следующее:

 

clip0175

 

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

 

 

 В обработчике напишем следующее (обратите внимание на названия объектов - вставленные в таблицу объекты имеют именно такие имена):

 

procedure DBCross1Cell0OnBeforePrint(Sender: TfrxComponent);

begin

// Value - это текущее значение ячейки

if Value < 100 then

begin

  // это первый объект

   DBCross1Object1.Color := clMaroon; // красный

  // это второй объект

   DBCross1Object2.Color := clWhite;

  // это третий объект

   DBCross1Object3.Color := clWhite;

end

else if Value < 3000 then

begin

   DBCross1Object1.Color := $00CCFF;  // желтый

   DBCross1Object2.Color := $00CCFF;

   DBCross1Object3.Color := clWhite;

end

else

begin

   DBCross1Object1.Color := $00CC98;  // зеленый

   DBCross1Object2.Color := $00CC98;

   DBCross1Object3.Color := $00CC98;

end;

end;

 

 Это все - если запустить отчет, мы увидим таблицу, приведенную в начале этого раздела.