Создаем красивые слайды (слайд-шоу) в своем приложении при помощи PicShow

picshowВсем привет дорогие друзья. Совсем недавно передо мной встала одна проблема: создание слайдов (слайд-шоу) в собственном приложении. Другими словами, необходимо было организовать рекламу из картинок, с различными красивыми переходами, задержкой и так далее.

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

Немного поковырялся в сети Интернет и нашел достаточно интересных вариантов, в том числе как платных, так и бесплатных. Особенно мне приглянулся компонент PicShow, который является бесплатным и имеет в свое вооружении более 176 различных эффектов (переходов между слайдами, картинками). Особых проблем с установкой компонента не было, а также не было и проблем с его работой, ведь в архив с компонентом было отличное демо, представленное разработчиками, по которому можно сделать отличный собственный проект и понять, как компонент PicShow работает.

Начнем со скачивания компонента, а затем его установки. Скачать можно с официального сайта, пройдя по следующей ссылке. С установкой также не должно быть проблем, так как внутри архива (или на сайте) имеется отличная инструкция для установки. Но если все делать по-быстрому, то  заходим Component-Install Component, переходим во вкладку Into new package и там указываем путь к нашим pas-файлам компонента PicShow, после чего устанавливаем как обычный компонент и у нас должна появится новая вкладку Delphi Area, на которой и размещены:

  • TPicShow
  • TDBPicShow

Первый компонент непосредственно работает с изображениями, размещенные на локальном компьютере, а второй компонент предназначен для работы с картинками из базы данных. Для того чтобы проиграть слайд с определенным эффектом, то мы можем это сделать при помощи следующего кода:

PicShow1.StyleName:=’имя эффекта слайда’;
PicShow1.Picture.LoadFromFile(Filenames.Strings[count]);
PicShow1.Execute;

Первой строкой мы задаем имя нашего эффекта слайда, то есть эффект, который будет появляться при смене изображения. Второй строкой мы задаем путь к нашему слайду, то есть изображения, а при помощи последней строки кода, мы запускаем (выполняем) наш слайд. Чтобы это все было эффектно, красиво и с задержкой, данный код следует поместить на таймер и задать ему определенный интервал.

Для получения полного списка эффектов слайдов, можно воспользоваться следующей функцией:

GetStyleNames(Names: TStrings):Integer

Она возвратит список эффектов слайдов, которые Вы можете использовать в своем проекте, чтобы не прописывать их вручную. Кроме этого, можно задавать не имя самого эффекта, а его номер, это делается при помощи свойства Style:TShowStyle.

Как я уже сказал, ничего сложного в этом всем нет. Имеется отличное демо, инструкция по установке, официальный сайт, пример и простой компонент, из которого Вы можете делать эффектные, красивые слайды, примерно следующего формата:

picshow_delphi

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

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! Извините, если слишком резко высказал свои мысли.

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