Страница 1 из 1

Стиль гиперссылки при просмотре и печати

Добавлено: 25 ноя 2011, 09:24
Gluck_13
Добрый день, уважаемые коллеги!

Имеется отчет, который содержит таблицу (StiTable), некоторые из ячеек которой имеют гиперссылки.
Существует ли возможность в дизайнере или кодом сделать так, чтобы при просмотре отчета в PreviewControl эта гиперссылка имела один стиль (синий шрифт с подчеркиванием), а при печати - другой (обычный черный шрифт без подчеркивания)?

Заранее спасибо!

Стиль гиперссылки при просмотре и печати

Добавлено: 25 ноя 2011, 12:01
HighAley
Здравствуйте.
Gluck_13 писал(а):Имеется отчет, который содержит таблицу (StiTable), некоторые из ячеек которой имеют гиперссылки.
Существует ли возможность в дизайнере или кодом сделать так, чтобы при просмотре отчета в PreviewControl эта гиперссылка имела один стиль (синий шрифт с подчеркиванием), а при печати - другой (обычный черный шрифт без подчеркивания)?
Вы можете подписаться на событие OnPrint и менять формат полей перед печатью.
Для более подробного отчета, пожалуйста, пришлите ваш шаблон отчёта с данными.

Спасибо.

Стиль гиперссылки при просмотре и печати

Добавлено: 28 ноя 2011, 06:29
Gluck_13
Добрый день!

Спасибо за оперативный ответ.
Aleksey писал(а): Вы можете подписаться на событие OnPrint и менять формат полей перед печатью.
К сожалению, такой вариант не проходит, так как к моменту печати из предпросмотра рендеринг отчета уже завершен. Исходное поле (ячейка таблицы) уже выведено в отчет и размножено по количеству записей в этой таблице. Поскольку Ваш продукт не производит повторного рендеринга перед печатью, изменение свойств поля отчета не сказывается на его внешнем виде при выводе на принтер. Так что вопрос остается в силе - как сделать так, чтобы текст в ячейке таблицы имел различное оформление при предварительном просмотре и при печати?
Aleksey писал(а): Для более подробного отчета, пожалуйста, пришлите ваш шаблон отчёта с данными.
Отправляю пример отчета. Данные генерируются внутри BeginRenderEvent. Как сделать так, чтобы текст в колонке "название" при просмотре был синий и подчеркнутый, а при печати - черный и не подчеркнутый?

Спасибо за ответ.

Стиль гиперссылки при просмотре и печати

Добавлено: 28 ноя 2011, 07:42
Gluck_13
Добрый день!

После изучения исходников продукта нашел такое решение:

в BeforeRender отчета пишем:

Код: Выделить всё

var fntView = MyCell.Font;    // шрифт из дизайнера - для preview
var fntPrint = new Font(fntView, FontStyle.Regular);     // Такой же, но без подчеркивания - для Print
var brushView = MyCell.TextBrush;     // Исходный цвет - для preview
var brushPrint = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Black);   // черный - для Print

// Добавляем обработчик к интересующей ячейке
MyCell.Painting += (xs, xe) => {
	var comp = (StiText)xs;
	comp.Font = comp.IsPrinting ? fntPrint : fntView;
	comp.TextBrush = comp.IsPrinting ? brushPrint : brushView;
}
Возможно, кому-нибудь пригодится...

Кстати, в исходниках продукта не нашел место, где диспозятся шрифты, привязанные к компонентам. Если посмотреть код, генерируемый дизайнером, можно найти много конструкций типа

Код: Выделить всё

this.Table1_Cell1.Font = new System.Drawing.Font("Arial", 9F);
А где происходит Dispose этих шрифтов? Не приведут ли такие утечки ресурсов GDI к их полному исчерпанию, особенно на больших отчетах?

Стиль гиперссылки при просмотре и печати

Добавлено: 28 ноя 2011, 12:34
Aleksey
Здравствуйте,

Просто не существует такого места, где мы бы могли их стопроцентно диспоузить, так же мы не можем при закрытии отчета их уничтожать, возможно они где-либо могут еще использоваться.
Поэтому они удаляются автоматически с помощью сборщика муссора (garbage collector).

Спасибо.

Стиль гиперссылки при просмотре и печати

Добавлено: 28 ноя 2011, 13:42
Gluck_13
Здравствуйте!
Aleksey писал(а): Просто не существует такого места, где мы бы могли их стопроцентно диспоузить, так же мы не можем при закрытии отчета их уничтожать, возможно они где-либо могут еще использоваться.
Поэтому они удаляются автоматически с помощью сборщика муссора (garbage collector).
Для такого случая могут быть различные решения. Например, для создания шрифтов вместо конструктора можно использовать фабрику, кэширующую созданные шрифты на уровне экземпляра StiReport. Дополнительным профитом будет то, что элементы, имеющий идентичный по параметрам шрифт (а таких в пределах одного отчета - большинство) будут получать из кэша один и тот же экземпляр объекта шрифта. При уничтожении объекта Report-а все шрифты, созданные фабрикой, и находящиеся в кэше можно диспозить. Это не затронет шрифты, пришедшие извне.

Стиль гиперссылки при просмотре и печати

Добавлено: 29 ноя 2011, 12:51
Aleksey
Здравствуйте,

Это конечно хорошо, но есть некоторые тонкости при такой работе со шрифтами (к примеру, когда отчет переходит в другое состояние - mdc файл).
И к тому же, приминительно к шрифттам, это не имеет особого значения, так как шрифтов, в среднем, используется на отчет 5-10, и прирост по скорости, и по объему памяти будет очень незначительным.

Спасибо.