Блог Александра Божко
Архивы
Рубрики

FireMonkey

Недавно нашел в просторах Рунета (не скажу, что совсем случайно) интересную программу. FireMonkey Style Editor – название говорит за себя. Программа предназначена для создания и редактирования FireMonkey стилей.

Работа с редактором довольно проста. Собственно, ничего сложного, загружаем существующий FireMonkey стиль и редактируем любой из компонентов, используя инспектор объектов, позволяющий менять свойства любого из элементов стилей. Все практически так же как и в естественной среде Delphi.

Список возможностей редактора (взято с сайта программы):

  • быстрый выбор нужного элемента стиля;
  • быстрый доступ к свойствам стиля через инспектор свойств;
  • фильтрация по стилю;
  • копирование, вставка, удаление элементов стиля;
  • добавление отдельных элементов из другого стиля;
  • предпросмотр готового стиля;
  • перетаскивание элементов в структуре стиля;
  • так же есть улучшенные диалоги (TBrush, TColor, TGradient, TPath, TImage);
  • поддержка стилей FireMonkey XE2, FireMonkey2.0 XE3.

И хотя в настоящий момент на сайте автора доступна лишь бета версия продукта, и еще имеются некоторые проблемы, с помощью FireMonkey Style Editor уже сейчас вполне можно создавать оригинальные стили.

Остается пожелать автору успешного развития его продукта.

Если вы хотите узнать больше о стилях в FireMonkey, рекомендую посмотреть запись вебинара “Стили FireMonkey с Евгением Крюковым”(в настоящее время ссылка не доступна).

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

События

Вебинары Embarcadero серии Developer Direct: демонстрации и обсуждения

Всеволод Леонов проведет пять вебинаров с участием Ярослава Бровина (разработчик FireMonkey, Embarcadero), Михаила Филиппенко (Генеральный директор Fast Reports), Дмитрия Кузьменко (Генеральный директор «Айбейз» ibase.ru) Александра Алексеева  (Embarcadero MVP, координатор русской версии журнала Blaise Pascal Magazine).

Расписание вебинаров:

  • 2 ноября 2012 г. – 12:00 Компоненты FireMonkey 2.0: теория и практика
  • 16 ноября 2012 г. – 12:00 Система отчетов FastReport для Fire Monkey 2.0 в Delphi XE3
  • 23 ноября 2012 г. – 12:00 InterBase XE3: возможности кроссплатформенной СУБД
  • 30 ноября 2012 г. – 12:00 Обработка ошибок в проектах Delphi
  • 7 декабря 2012 г. – 12:00 Переход от Delphi к C++Builder и обратно

Регистрация.

Для жителей СНГ: разница по времени с Москвой величина переменная и может меняться в связи с (не) переходом на зимнее время. Сверьте часы заранее!

 CodeRage 7

В этом году традиционная многодневная техническая онлайн конференция будет разбита на две части. С 6-го по 8-е ноября для Delphi разработчиков,  с 10-го по 12-е декабря для C++ Builder разработчиков.

Регистрация.

 Акции

В последнем квартале 2012-го компания Embarcadero запустила сразу несколько акций.

Получи HTML5 Builder, бесплатно!

До конца года вы можете купить Delphi или C++BuilderXE3 в редакции Professional или старше и получить в подарок HTML5  Builder.

Получи Ultimate по цене Enterprise!

Вы можете приобрести Delphi XE3 Ultimate или C++ Builder Ultimate по цене Enterprise редакции.

Экономия до $1000!!!

Upgrade с любой предыдущей версии!

Покупайте XE3 по цене upgrade. Хотя прайс-лист и указывает, что upgrade возможен только с версии 2009 и старше, продукты любых версий Delphi, C++Builder в редакции Professional и старше доступны для upgrade только до 31 декабря 2012.

 RAD XE3 BonusPack, бесплатно!

Акция продлена до 31-го декабря. При покупке любого из продуктов в редакции Professional или старше – подарок из трех продуктов сторонних производителей.

Если вы заинтересованы в приобретении продуктов Embarcadero по акциям и у вас возникли вопросы – свяжитесь со мной. Мои контакты размещены  на сайте компании DC Link (Харьков).

Новости сайтов

Собственно, немного решил обновить дизайн блога и агрегатора DelphiFeeds.ru. Пока длится процесс и “творческий поиск”, сайты может немного “колбасить”. Но к 18 ноября, надеюсь, все будет завершено. Почему к 18 ноября? У DelphiFeeds.ru юбилей – 3 года. Надеюсь вас приятно удивить.

Анонсы

Кроме всего прочего, в течение отчетного периода довелось много заниматься непосредственно программированием. В частности, наконец-то разобрался с переводом Rave отчетов на FastReport. О чем и планирую вам доложить в одном из следующих постов. В планы так же входит ознакомление с FR для FireMonkey.

Предыдущий пост вызвал довольно оживлённую дискуссию относительно оптимальности приведенного решения. Напомню, что ставилась задача в отфильтрованном гриде необходимо некоторым образом модифицировать все записи. Действительно, приведенный вариант был далеко не оптимальный. С подачи резидента DevExpress (Константин, спасибо) я набросал еще несколько вариантов решения данной задачи.

Наиболее приемлемым мне показался этот:

if cxDBGridDBTableView1Approved.Filtered then
  cxDBGridDBTableView1Approved.Filtered:= False;

qryTiming.filter:= cxDBGridDBTableView1.DataController.Filter.FilterText;
 qryTiming.DisableControls;
 qryTiming.filtered:= True;
 qryTiming.first;

 while not  qryTiming.Eof do
 begin
   qryTiming.Edit;
   qryTimingApproved.AsInteger:= Approving;
   qryTiming.Post;
   qryTiming.Next;
 end;

qryTiming.filtered:= False;
qryTiming.EnableControls;

Обратите внимание на то, если изменяемое поле присутствует в условии фильтрации, то фильтр по нему сбрасывается. В противном случае, проход через все записи в наборе данных не будет обработан корректно. Так устроен  DataSet. Читать далее

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

“…какими свойствами определяются координаты поверхностей и условно центра фигуры после загрузки произвольного объекта DAE в Model3D во время исполнения программы? Т.к. даже центр объекта далеко не всегда совпадает с центром модели…”

Собственно, данный вопрос давно интересовал меня самого. Использование моделей, созданных во внешних 3D редакторах – мощный инструмент. Но для того, что бы он стал действительно полезным, нам необходимо правильно расположить модель на форме. Это не всегда просто сделать даже в режиме проектирования, не говоря уже о RunTime.

Google SketchUp 8

Google SketchUp 8

И, для того, чтобы  разобраться с данным вопросом, я решил провести несколько экспериментов. Для создания модели я использовал Google SketchUp 8, основное преимущество которого – бесплатность. Я  уже упоминал об этом редакторе ранее. Читать далее

За последние дни мне пришло сразу несколько писем с вопросами относительно использования FireMonkey 3D. Прошу меня простить, если не сразу отвечаю на них, но ответы часто требуют некоторой подготовки. К тому же, не на все ваши вопросы можно ответить в двух словах. Естественно, что отвечать я планирую в данном блоге.

Данный пост родился в процессе подготовки одного из таких “ответов”. Описанный ниже прием я решил вынести в отдельный пост исключительно ради более удобной структуризации материала.

Как импортировать COLLADA (.dae) модель в FireMonkey программно (в Run Time).

Изначально, в секции uses необходимо подгрузить два модуля FMX.DAE.Importer и FMX.Import.

Приведенный ниже код демонстрирует как решить поставленную задачу.

var
MI: TDAEModelImporter;
ImSe: TModelImportServices;

begin
 MI:=TDAEModelImporter.Create;
 ImSe:=  TModelImportServices.Create;
 ImSe.RegisterImporter(MI);

 Model3D1.LoadFromFile('H:\ScreenShorts\SU_Model\cube.dae');

...
end;

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

О том, какие нюансы существуют при импорте моделей в FireMonkey - в следующем посте.

А пока напоминаю:

  1. До окончания конкурса осталось менее недели!
  2. Воспользоваться специальными предложениями Embarcadero вы можете только до 29 июня.

Другие статьи серии:

FireMonkey. Tips & Tricks #0
FireMonkey. Tips & Tricks #1
FireMonkey. Tips & Tricks #2 (Upd2)
FireMonkey. Tips & Tricks #4

В преддверии Чемпионата Европы по футболу я решил реанимировать свою экспериментальное приложение, моделирующее полёт мяча на футбольном поле. Более того, появилось желание придать этому приложению некоторую осмысленность. На идею создания миниигры меня натолкнул конкурс в  футбольной телепередаче. Суть проста. Журналист берет сумку с футболками и едет на тренировочную базу футбольной команды. Игроки команды с центра поля пытаются попасть в перекладину. Попавшему вручается футболка с надписью “Я попал!”.

Естественно, никто не попадает… Журналист забирает футболки и уезжает. Зато на память остается масса позитива…

Даже самому захотелось попинать мячик. А кто мешает? К тому же заготовка футбольного поля и летающий мяч уже есть. Осталось сделать систему управления, внешний антураж и, пожалуй, самое сложное – определить попадание мяча в перекладину. За основу я взял более точную модель, работающую с помощью таймера.

Управление

Для того, чтобы задать параметры удара нам необходимо обозначить силу удара и его направление. Направление задается углами по осям X и Y. Конечно, проще всего было бы реализовать, например, с помощью TComboTrackBar. Но такой вариант имеет серьезный недостаток – достаточно выставить параметры удара один раз, и после этого продолжать бить с теми же параметрами. Решение для организации более интересного геймплея я подсмотрел в рекламных банерах. Все очень просто.

Два компонента TPie динамически изменяют свои значения (реализовано с помощью таймера). За силу удара отвечает TProgressBar. Обработчик таймера выглядит приерно так:

procedure TMy3DForm.tmAngleYTimer(Sender: TObject);
begin
if UD then
PieYAngle.StartAngle:= PieYAngle.StartAngle+1
else
PieYAngle.StartAngle:= PieYAngle.StartAngle-1;

if (PieYAngle.StartAngle=0) OR (PieYAngle.StartAngle=-90) then
UD:= not UD;
end;

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

Реализовав все это, я обнаружил, что попасть в перекладину не легче чем настоящим мячем на настоящем поле.

Попадание.

Определение попадания мяча в перекладину интересная с академической точки зрения задача. В FireMonkey нет никаких встроенных механизмов обнаружения коллизий, поэтому сам факт попадания пришлось рассчитывать. Вычисления я делал последовательно по плоскостям. Т.е., если мяч попадает в плоскость, ворот, то считаем может-ли он пересечься с перекладиной по высоте, а затем и по ширине (т.е. не пролетел-ли он левее или правее перекладины). При этом учитываются толщина перекладины и радиус мяча.

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

Что дальше?

В добавок к сделаному я хотел бы еще оснастить футбольное поле несоклькими 3D модалями, для большей зрелищности процесса. Как только приложение будет протестировано, я планирую опубликовать его здесь с иходным кодом. Надеюсь до начала Евро 2012 я успею это сделать.

А до начала Чемпионата не пропустите конференцию “Кросс-платформа 2012″!

Другие статьи серии:

Firemonkey на практике #0
Firemonkey на практике #1
Firemonkey на практике #2. Освещение и материал поверхности 3D объектов
Firemonkey на практике #2. Движение 3D объектов
Firemonkey на практике #3. Использование 3D моделей
Firemonkey на практике #5.

Прежде чем приступить к написанию этого поста хочу напомнить, что скоро заканчивается срок действия специального предложения от Embarcadero, согласно которому обновиться до XE2 могут владельцы любой версии Delphi, C++ Builder или Rad Studio. Одновременно заканчивается и акция “Купите один продукт – второй получите бесплатно!”.

Вы еще можете успеть воспользоваться акционным предложением и купить Delphi, C++ Builder или Rad Studio on-line.  А резиденты Украины могут воспользоваться акционным предложением на сайте “Delphi в Украине”.

Несколько слов про четвертый апдейт. По части 3D в FireMonkey поменялось довольно много. Кое что из написанного мной в предыдущих постах утратило актуальность. Вероятно прийдется произвести ревизию текста и кода.

Ну а теперь, непосредственно к теме повествования.

В FireMonkey приложениях можно успешно использовать 3D модели. Об этом я говорил в предыдущих постах. Для того, что бы отобразить модель на форме используется компонент TModel3D. В настоящий момент поддерживаются три формата моделей (*.ase, *.dae и *.obj). За выбор модели отвечает свойство MeshCollection. Проблема же заключается в том, что разные 3D редакторы поддерживают эти форматы по разному. И некоторые модели способны “повесить” IDE при загрузке. Сегодня существует достаточно много редакторов, но большинство из них платные. Да и создание моделей требуют определенных навыков. Готовые же модели также стоят приличных денег. Тем не менее, бесплатные решения бывают хорошими, особенно если их создает Google.

Рекомендую Google SketchUp. Легкий бесплатный 3D редактор. Но самое ценное то, что существует огромная коллекция бесплатных моделей для этого редактора. И эти модели абсолютно корректно открываются в Delphi (следует выполнить экспорт в формат *.dae).

Нашлась даже модель родного ОСК “Металлист”, где уже через три месяца пройдут игры Евро 2012. Как видно на ролике, эта довольно сложная модель прекрасно отображается в FireMonkey программе.

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

Код приложения приводить не буду, при желании вы сами сможете установить Google SketchUp и совершить экскурсию по стадионам, принимающим Евро 2012 с помощью FireMonkey.

Если вы знаете другие бесплатные редакторы и коллекции моделей – буду признателен за ссылку.

И в заключение – небольшой анонс. В ближайшее время на DelphiFeeds.ru будет объявлен новый конкурс. Следите за новостями.

Другие статьи серии:

Firemonkey на практике #0
Firemonkey на практике #1
Firemonkey на практике #2. Освещение и материал поверхности 3D объектов
Firemonkey на практике #2. Движение 3D объектов
Firemonkey на практике #4. Ты попал!
Firemonkey на практике #5.

Перед тем как почесть этот пост я советую посмотреть ролик Всеволода Леонова, посвященный анимации.

Собственно, существует, как минимум два способа реализовать движение объектов в FireMonkey.

Первый из них – банально менять координаты объекта по таймеру.

Второй – использовать компонент TFloatAnimation.

На видео проиллюстрирована реализация движения тела, брошенного под углом к горизонту обеими способами.

И здесь можно увидеть, что траектории полета мячей немного отличаются. Почему? Давайте попробуем разобраться.

Левый мяч “летит” с помощью таймера. Код примерно такой:

Читать далее

Не могу пройти мимо этой статьи. Визуализация физики биллиарда с помощью FireMonkey. Anders Ohlsson.

Отличный пример с исходным кодом. Рекомендую всем. кто хочет познакомиться с 3D возможностями FireMonkey.

Как и обещал, продолжаю повествование о FireMonkey.

Сегодня несколько слов об освещении 3D сцены и об окраске поверхностей 3D объектов. Не смотря на кажущуюся простоту, тема довольно  интересная.

Представьте себе обычную комнату, с мебелью и другими предметами интерьера, в которой полностью отсутствует освещение. Теперь давайте создадим новую 3D форму, поместим в ней несколько 3D объектов и… покрасим ее в черный цвет. Примерно так:

self.Color:= TAlphaColors.Null;

Фактически, таким образом,  мы получим модель идеальной темной комнаты. В которой, как справедливо заметил Конфуций, очень трудно искать черную кошку. В роли кошек, в нашем случае выступают 3D фигуры. Ни одной фигуры на форме, как вы понимаете, не видно. Вот с этого места, на мой взгляд, и следует рассказывать об освещении и свойстве 3D объектов FireMonkey - Material.

property Material: TMaterial read FMaterial write SetMaterial; Читать далее

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика