FastReport VCL 5. Улучшение интерактивности

   Интерактивные отчеты позволяют определить в отчёте действие, которое произойдет при щелчке мыши на каком-нибудь объекте отчета в окне предварительного просмотра. В предыдущих версиях FastReport существовало несколько способов сделать отчет интерактивным.
   Например, самый универсальный способ — это создать обработчик события OnClick. Этот обработчик может быть двух типов:

  • глобальный — обработчик события для всех объектов отчета TfrxReport.OnClickObject: TfrxClickObjectEvent;
  • локальный — обработчик события для отдельного объекта отчета TfrxReportComponent. OnPreviewClick: TfrxPreviewClickEvent.

Этот способ позволяет программным образом управлять реакцией на щелчок мыши по объектам в предварительном просмотре и ограничивается только фантазией программиста/пользователя и возможностями языка программирования.
   Сделать отчет интерактивным в FastReport можно и без написания кода. Например, можно использовать «разворачиваемые» группы. У заголовка группы есть свойство DrillDown. Включение этого свойства позволяет сделать группу интерактивной. Это означает, что группа будет реагировать на щелчок мышью в окне предварительного просмотра. Щелкнув мышью на заголовке группы, ее можно развернуть (показать все ее записи) или свернуть (скрыть все ее записи), оставив только заголовок и, при необходимости, подвал.
   В FastReport VCL 5 был добавлен еще один способ управления интерактивностью отчетов без написания кода — объекту TfrxView добавили свойство Hyperlink: TfrxHyperlink (далее «гиперссылка»). Это свойство пришло на смену свойству TfrxView.URL из FastReport 4 и расширило его возможности.
   У TfrxHyperlink есть два основных свойства — Kind и Value, и несколько вспомогательных — ValuesSeparator, ReportVariable, Expression, DetailPage, DetailReport.
   Свойство Kind — это вид гиперссылки. Оно имеет тип TfrxHyperlinkKind и может принимать следующие значения:

  • hkURL — строка для запуска в ShellExecute (ссылка на сайт, документ, программу…);
  • hkAnchor — якорь (специальная именная метка, по которой определяется номер страницы и позиция на странице для перехода по гиперссылке; ее, например, удобно использовать для создания страницы с содержанием отчета);
  • hkPageNumber — номер страницы;
  • hkDetailPage — дополнительные страницы отчета (например, скрытая страница шаблона с детальным отчетом);
  • hkDetailReport — дополнительный отчет;
  • hkCustom — свойство Hyperlink игнорируется (например, если необходимо обработать только OnPreviewClick).


   Свойство Value содержит значение, которое используется для перехода по клику на гиперссылку. Например, в нём можно указать имя якоря при Kind=hkAnchor, строку для запуска в ShellExecute при Kind=hkURL, номер страницы при Kind=hkPageNumber. Его значение может заполняться динамически с помощью формулы заданной в свойстве Expression.
   Свойство DetailPage содержит название страницы в текущем шаблоне. При Kind= hkDetailPage по клику на гиперссылку в диалоге предварительного просмотра открывается дополнительная закладка в которую загружается часть отчета, которая сформирована на основании страницы шаблона, имя которой указано в свойстве DetailPage.
   Свойство DetailReport содержит название шаблона в формате FastReport. При Kind=hkDetailReport по клику на гиперссылку в диалоге предварительного просмотра открывается дополнительная закладка, в которую загружается отчет сформированный по шаблону, указанному в свойстве DetailReport. При этом если в дополнительном отчете есть переменная с именем, указанным в свойстве ReportVariable, то ей присваивается значение свойства Value.
   Выше я писал, что свойство Hyperlink пришло на смену свойству URL, но свойство URL тоже можно использовать. Теперь изменение из скрипта свойства URL приведет к изменению свойств Kind и Value у Hyperlink по следующим правилам:

  • если первый символ свойства URL = ‘#’, то в гиперссылке будет якорь;
  • если первый символ свойства URL = ‘@’, то в гиперссылке будет номер страницы;
  • иначе в гиперссылке будет строка для запуска в ShellExecute.

Например, если в скрипте написать «Memo.URL := ‘@5’;», то свойство Memo.Kind будет равно hkPageNumber, а Memo.Value равно «5» и по клику мышкой по нему в предварительном просмотре отчета будет сделан переход на 5-ю страницу.
   Как мы видим, свойство Hyperlink в FastReport VCL 5 позволяет в предварительном просмотре с минимальными настройками управлять реакцией на щелчок мыши по объектам. Это свойство существенно расширило возможности создания интерактивных отчетов в FastReport и упростило этот процесс.

Читать на сайте автора.

FastReport. PDF-экспорт и встраивание шрифта

   В списке новшеств FastReport VCL 5 значится «В PDF-экспорт улучшено встраивание шрифтов: вместо целого шрифта встраивается только используемое в отчёте подмножество символов шрифтов. Это позволяет значительно сократить размер файла«. В своих программах я часто работаю с документами в PDF-формате, поэтому вопрос размера документа, экспортированного из FastReport в PDF-файл меня интересует.
   Много лет тому назад я делал программу, которая при добавлении записи в базу данных генерировала документ в FastRepot, экспортировала его в PDF-файл и отправляла по электронной почте. Из-за использования электронной почты передо мной стояла задача минимизации размера PDF-файла. Для этого я провел тестирование различных вариантов экспорта документа из FastReport в PDF-формат:

  1. экспорт с помощью библиотеки экспорта от сторонних производителей (например, RareFind FastReport Export Filters);
  2. экспорт с помощью входящего в FastReport класса TfrxPDFExport;
  3. экспорт с использованием библиотек для работы с PDF-файлами (например, llPDFLib).

В приведенном выше списке варианты экспорта расположены в порядке возрастания размера получаемого файла, а значит в порядке убывания ценности в рамках поставленной задачи. Поэтому мой выбор тогда пал на RareFind FastReport Export Filters. Но к моему сожалению, эта библиотека повторила судьбу многих библиотек для Delphi — она давно «умерла» (последняя версия вышла в феврале 2006). Я думаю, что в наше время и на перспективу стоит рассматривать только экспорт входящий в поставку FastReport, т.к. он «умрет» только вместе с FastReport.
   Для того, чтобы текст в PDF-документе выглядел одинаково на различных устройствах существует возможность встроить используемый шрифт в PDF-файл как ресурс. Если шрифт не встроен в PDF-документ, то Acrobat Reader попробует найти его на компьютере. Если шрифт найти не удалось, то Acrobat Reader попробует эмулировать его и текст будет читаемый, но документ будет выглядеть по-другому. Большинство программ для просмотра и печати документов в формате PDF этого делать не умеют. Поэтому единственная возможность всегда корректно отобразить PDF-документ — это встроить в него используемые шрифты. Единственным недостатком встраивания шрифта является существенное увеличение размера PDF-файла.
   TfrxPDFExport тоже умеет встраивать используемые шрифты в PDF-файл. Для этого у него есть свойство «EmbeddedFonts». Если оно True, то, согласно документации к FastReport 4, «все шрифты, использованные в отчете, будут также помещены в выходной файл PDF для корректного отображения файла на компьютере, где этих шрифтов может не быть, размер выходного файла значительно увеличивается«. Не зря автор документации выделил слова «значительно» жирным шрифтом. Экспорт в PDF со встроенными шрифтами в FastReport 3-4 увеличивал размер файла в десятки, а то и сотни раз (в зависимости от используемых шрифтов и их количества), сводя возможность его использования к нулю.
   После экскурса в теорию и историю, проверим как обстоят дела с размером файла у экспорта в PDF сейчас. Для этого я использовал три версии FastReport:

  • 4.11 — была установлена у меня на момент релиза FastReport VCL 5;
  • 4.15 — последняя версия FastReport VCL 4 на текущий момент;
  • 5.04 — текущая версия FastReport VCL 5.

   Результаты экспорта одностраничного документа, шаблон которого содержит MasterData с одним MemoView, у которого установлен шрифт «Arial» (размер файла в байтах):

Версия FastReport EmbeddedFonts=False EmbeddedFonts=True Увеличение в, раз
4.11 2 367 520 294 220
4.15 2 357 80 933 34
5.04 2 351 77 905 33

Размер полученного файла очень сильно зависит от встраиваемого шрифта. Например, если в этом шаблоне «Arial» заменить на «Times New Roman», то размер PDF-файла вырастет на 1%, а если «Arial» заменить на «Forte», то уменьшится в 10 раз.
   А вот результаты экспорта одностраничного документа, шаблон которого содержит MasterData с десятью MemoView, у каждого из которых установлен свой шрифт (размер файла в байтах):

Версия FastReport EmbeddedFonts=False EmbeddedFonts=True Увеличение в, раз
4.11 13 316 9 762 210 733
4.15 13 386 750 136 56
5.04 13 307 730 183 55

   Видно, что от версии к версии размер получаемого PDF-файла без встраивания шрифтов почти не меняется. Чего не скажешь о размере PDF-файла со встроенными шрифтами. Экспорт в FastReport 4.11 справляется с этим значительно хуже новой версии. Но почему у версий 4.15 и 5.04 получился такой похожий результат? оО Сравнив содержимое frxExportPDF.pas этих версий легко убедиться, что они почти совпадают. Оказывается, «по просьбам трудящихся» разработчики FastReport включили экспорт в PDF из первого релиза FastReport VCL 5 в последнюю версию FastReport VCL 4.
   Итак, новый экспорт документов из FastReport в формат PDF, разработанный для FastReport VCL 5, создает файлы меньшего размера, чем экспорт предыдущих версий. Если при экспорте в PDF без встраивания шрифтов, эта разница еле заметна, то при экспорте в PDF со встраиванием шрифтов файлы получаются меньше в 6,5 раз для документа с одним шрифтом и более чем в 13 раз для документа, содержащего в себе 10 шрифтов.

Читать на сайте автора.

Анализ приложения защищенного виртуальной машиной

В данной статье будет рассмотрено построение защиты приложения с использованием различных программных «трюков» таких как: сброс точки входа в ноль, шифрование тела файла и дешифровшик

http://alexander-bagel.blogspot.com/2014/04/vm.html

FastReport VCL 5. Мы уже не ждали, а он припёрся

   Вчера вечером, разгребая спам, я наткнулся на письмо от FastReports, Inc с темой «Внезапно релиз FastReport VCL 5». О как! Мы уже и не ждали, а он припёрся. Тут же в голове возникла знаменитая фраза, которую сказал дедушка Ленин 7 ноября 1917 года: «Товарищи! Рабочая и крестьянская революция, о необходимости которой всё время говорили большевики, свершилась! «. Спросите: «Почему такая реакция? «. Для тех, кто не в теме расскажу предысторию этого события.
   О работе над FastReport 5 говорили еще лет 7-8 тому назад. Потом ходили только слухи о том, что работа над новой версией идёт. Но куда идёт, и какими темпами официально не сообщалось. Завеса тайны приоткрылась только в начале лета 2010 года. Был опубликован примерный функционал FastReport VCL 5 и назначен её выпуск на осень. Пришла осень…, закончился сентябрь…, октябрь…, близился к концу ноябрь…, а релиза все нет. В последний день осени вместо пресс-релиза о выпуске FastReport 5 компания FastReports, Inc сообщила:

Мы приняли решение перенести релиз FastReport VCL 5 на начало 2011-го года. Работы над FastReport VCL v.5 и FastCube VCL v.2 повлекли за собой серьёзные внутренние архитектурные изменения обоих продуктов (в том числе — для обеспечения бесшовной совместимости), в силу которых альфа-версия FastReport VCL v.5 отправлена на доработку. Мы приносим извинения за перенос сроков выпуска продукта.

   Потом у FastReports, Inc был договор с Embarcadero Technologies, Inc о включении FastReport в качестве штатного генератора в Embarcadero RAD Studio XE2. Затем последовали выпуск FastReport RAD Edition, FastReport FMX, FastReport Mono и других продуктов… Итак, не сложно догадаться, разработчикам компании было не до FastReport VCL 5. И вот, согласно народной мудрости «Обещанного три года ждут» (с 2011-го по 2014-й), читаю:

«Рады сообщить вам, что новая долгожданная версия FastReport VCL 5 выпущена!
Рассылка специально идёт 2 апреля — ведь это не шутка!
Обратите внимание на полный список нововведений:

Если вы ещё не попробовали FastReport 5 — воспользуйтесь нашим спецпредложением для наших клиентов на обновление до 5й версии: http://cp.fast-report.com/upgrades

   Надеюсь, что «Новые иконки в окне предпросмотра и в Дизайнере отчетов» — это не основное новшество в FastReport VCL 5. На следующей неделе обновлю свою версию FastReport 4 до 5-ки и узнаю, так ли это. Обещаю написать об этом в апреле (год на всякий случай не называю).

P.S. FastReports, Inc, спасибо за долгожданный релиз FastReport VCL 5! Извините, если слишком резко высказал свои мысли.

Читать на сайте автора.

7. Свойства и методы формы. Лабораторные Delphi, C++ (4)

Создание непрямоугольных форм в Delphi и C++Builder

Запустите на выполнение Delphi или C++Builder. Создайте новый проект, выбрав в меню File | New | VCL Forms Application — Delphi (File | New | VCL Forms Application – C++Builder). Появится форма нового проекта.

Создание овальной формы

С вкладки Additional положите на форму компонент Image. Задайте для него следующие свойства:

Читать на сайте автора.

Delphi for Android: играем звук при встряхивании

Обещанного 3 года ждут. А план таков, что программку для детей мы всё-равно еще не скоро допишем (сомневаюсь что есть смысл её дописывать). Поэтому давайте

Читать на сайте автора.

Delphi for Android: играем звук при встряхивании

Обещанного 3 года ждут. А план таков, что программку для детей мы всё-равно еще не скоро допишем (сомневаюсь что есть смысл её дописывать).
Поэтому давайте зафигачим что-нибудь простенькое и бесполезное. Например что-то типа эмулятора кнута Индианы Джонса. As seen on tv. Типа того, что показывали в Теории Большого Взрыва много лет сезонов назад. Только вместо кнута будем использовать колокольчик. А назовём проект LazyShaker.
Для тех, кто предпочитает не засорять сознание ситкомами расскажу суть. Программка должна воспроизводить звук при встряхивании. Всё. Способы применения — самые разнообразные, но в основном одинаково бесполезные и ограничивающиеся привлечением внимания.
Исходный код проекта я выложил на github. А собранное приложение на Google Play.
Под катом объяснение того…

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

Читать на сайте автора.

AppMethod: первые впечатления от trial-a

  Установщик trial-a скачивался не то чтобы быстро. 50мб тянулись дольше 10 минут. Причём, это ограничение со стороны Embarcadero (по крайней мере, для Латвии), так

Читать на сайте автора.

AppMethod: первые впечатления от trial-a

 
Установщик trial-a скачивался не то чтобы быстро. 50мб тянулись дольше 10 минут. Причём, это ограничение со стороны Embarcadero (по крайней мере, для Латвии), так как обычно такие файлы скачиваются за пару секунд.
Зато сама установка прошла минут за 20 (включая скачивание всех пакетов). Однако не стоит забывать что это trial версия и исходные коды RTL и FMX не устанавливались. Также, вроде не устанавливался ни Fast Report, ни логгер-забыл-как-он-там-называется, ни Beyond compare.
Первое, что бросается в глаза — переделанный внешний вид. Все иконки на основных тулбарах заменены (на плоские иконки (оппа-metro-style!) без антиалиасинга).

Созданный в Delphi XE5 проекты открылись, собрались установились в телефон и заработали без каких-либо проблем.
Внимание, если при…

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]

Читать на сайте автора.

Официально вышел AppMethod

  Trial версию можно получить тут: http://www.appmethod.com/free-trial (требуется простейшая регистрация, ключ приходит на email). На цены можно посмотреть тут: http://www.appmethod.com/pricing   Бесплатной версии судя по

Читать на сайте автора.