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

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

 

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

 

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;

 

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