9. События формы. Лабораторные Delphi, C++ (5)

Основные события формы в Delphi и C++Builder

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

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

8. События формы

Наиболее важные события формы представлены в следующей таблице.

Таблица 1. Основные события формы

Событие

Описание

OnActivate

Возникает после того, как форма становится активной — при первоначальном запуске приложения или когда форма после потери фокуса при перемещении фокуса к другой форме того же приложения вновь получает фокус.

OnClick

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

OnClose

Возникает непосредственно перед закрытием формы, после события OnCloseQuery.

OnCloseQuery

Возникает до закрытия формы перед событием OnClose. В обработчике этого события можно на основании действий пользователя разрешить или отменить закрытие формы. Обработчику события передается параметр CanClose типа Boolean. Чтобы отменить закрытие формы свойству CanClose следует присвоить значение False. Значением по умолчанию является True — форма будет закрыта.

OnCreate

Возникает всего один раз в момент создания формы. Предшествует событиям OnShow и OnActivate.

OnDeactivate

Возникает при деактивации формы — при потере фокуса, когда клиент переключается на другую форму того же приложения.

OnDblClick

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

·  OnMouseDown

·  OnClick

·  OnMouseUp

·  OnDblClick

·  OnMouseDown

·  OnMouseUp.
Событие будет отправлено приложению лишь после того, как пользователь второй раз отпустит кнопку мыши.

OnKeyDown

Возникает при нажатии пользователем на клавиатуре любой клавиши, включая ту, которая не вводит никаких символов (Ctrl, Shift, Alt и т.д.). Предшествует событию OnKeyPress.

OnKeyPress

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

OnKeyUp

Возникает, когда пользователь отпускает нажатую клавишу, включая ту, которая не вводит никаких символов (Ctrl, Shift, Alt и т.д.). Происходит после событий OnKeyDown и OnKeyPress.

OnMouseDown

Возникает, когда пользователь нажимает на форме любую кнопку мыши. Предшествует событию OnClick.

OnMouseEnter

Событие происходит, когда пользователь переводит указатель мыши на поверхность формы — перемещая его с другого компонента формы или из-за пределов формы.

OnMouseLeave

Возникает, когда указатель мыши покидает форму.

OnMouseMove

Возникает, когда указатель мыши перемещается на форме.

OnMouseUp

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

OnMouseWeel

Событие возникает, когда пользователь вращает колесо мыши.

OnMouseWeelDown

Событие возникает, когда пользователь вращает колесо мыши вниз.

OnMouseWeelUp

Событие возникает, когда пользователь вращает колесо мыши вверх.

OnPaint

Возникает при прорисовке формы, когда размеры формы увеличиваются.

OnResize

Возникает при любом изменении размеров формы как в сторону увеличения, так и в сторону уменьшения.

OnShow

Возникает при начальной загрузке формы перед событием OnActivate, а также в случае, когда форма становится видимой (свойству Visible присваивается значение True).

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

Создаем красивые слайды (слайд-шоу) в своем приложении при помощи 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! Извините, если слишком резко высказал свои мысли.

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

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! ]]

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