8. События формы
Александр Бондар
Событие
|
Описание
|
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
devdelphi.ruВсем привет дорогие друзья. Совсем недавно передо мной встала одна проблема: создание слайдов (слайд-шоу) в собственном приложении. Другими словами, необходимо было организовать рекламу из картинок, с различными красивыми переходами, задержкой и так далее.
Если честно, то я не знал, как мне лучше всего поступить: либо делать самому какие-то варианты решения задачи, либо искать готовый вариант.
Немного поковырялся в сети Интернет и нашел достаточно интересных вариантов, в том числе как платных, так и бесплатных. Особенно мне приглянулся компонент 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.
Как я уже сказал, ничего сложного в этом всем нет. Имеется отличное демо, инструкция по установке, официальный сайт, пример и простой компонент, из которого Вы можете делать эффектные, красивые слайды, примерно следующего формата:
FastReport VCL 5. Улучшение интерактивности
Блог Чорнага кашакаНапример, самый универсальный способ — это создать обработчик события 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-экспорт и встраивание шрифта
Блог Чорнага кашакаМного лет тому назад я делал программу, которая при добавлении записи в базу данных генерировала документ в FastRepot, экспортировала его в PDF-файл и отправляла по электронной почте. Из-за использования электронной почты передо мной стояла задача минимизации размера PDF-файла. Для этого я провел тестирование различных вариантов экспорта документа из FastReport в PDF-формат:
- экспорт с помощью библиотеки экспорта от сторонних производителей (например, RareFind FastReport Export Filters);
- экспорт с помощью входящего в FastReport класса TfrxPDFExport;
- экспорт с использованием библиотек для работы с 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.
Версия 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 |
Итак, новый экспорт документов из FastReport в формат PDF, разработанный для FastReport VCL 5, создает файлы меньшего размера, чем экспорт предыдущих версий. Если при экспорте в PDF без встраивания шрифтов, эта разница еле заметна, то при экспорте в PDF со встраиванием шрифтов файлы получаются меньше в 6,5 раз для документа с одним шрифтом и более чем в 13 раз для документа, содержащего в себе 10 шрифтов.
Анализ приложения защищенного виртуальной машиной
Александр (Rouse_) БагельВ данной статье будет рассмотрено построение защиты приложения с использованием различных программных «трюков» таких как: сброс точки входа в ноль, шифрование тела файла и дешифровшик
FastReport VCL 5. Мы уже не ждали, а он припёрся
Блог Чорнага кашакаО работе над FastReport 5 говорили еще лет 7-8 тому назад. Потом ходили только слухи о том, что работа над новой версией идёт. Но куда идёт, и какими темпами официально не сообщалось. Завеса тайны приоткрылась только в начале лета 2010 года. Был опубликован примерный функционал FastReport VCL 5 и назначен её выпуск на осень. Пришла осень…, закончился сентябрь…, октябрь…, близился к концу ноябрь…, а релиза все нет. В последний день осени вместо пресс-релиза о выпуске FastReport 5 компания FastReports, Inc сообщила:
Потом у 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 на начало 2011-го года. Работы над FastReport VCL v.5 и FastCube VCL v.2 повлекли за собой серьёзные внутренние архитектурные изменения обоих продуктов (в том числе — для обеспечения бесшовной совместимости), в силу которых альфа-версия FastReport VCL v.5 отправлена на доработку. Мы приносим извинения за перенос сроков выпуска продукта.
Надеюсь, что «Новые иконки в окне предпросмотра и в Дизайнере отчетов» — это не основное новшество в FastReport VCL 5. На следующей неделе обновлю свою версию FastReport 4 до 5-ки и узнаю, так ли это. Обещаю написать об этом в апреле (год на всякий случай не называю).«Рады сообщить вам, что новая долгожданная версия FastReport VCL 5 выпущена!
Рассылка специально идёт 2 апреля — ведь это не шутка!
Обратите внимание на полный список нововведений:
…
Если вы ещё не попробовали FastReport 5 — воспользуйтесь нашим спецпредложением для наших клиентов на обновление до 5й версии: http://cp.fast-report.com/upgrades
P.S. FastReports, Inc, спасибо за долгожданный релиз FastReport VCL 5! Извините, если слишком резко высказал свои мысли.
7. Свойства и методы формы. Лабораторные Delphi, C++ (4)
Александр БондарСоздание непрямоугольных форм в Delphi и C++Builder
Создание овальной формы
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! ]]