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

Delphi XE2

Как я уже упоминал, на работе для разработки приложений была приобретена полная VCL Subscription от DevExpress. До этого у нас имелись лишь отдельные пакеты, к тому же они приобретались более года назад и многие продукты успели обновиться. К сожалению, мне не сразу удалось установить обновления и посмотреть последнюю версию DevExpress. Между тем, изменения обратили на себя внимание практически сразу. Помните, я писал о том, как создать “правильную” ribbon форму c помощью DevExpress (сколько раз обещал себе провести на блоге субботник и систематизировать все записи)? Так вот, теперь все стало довольно просто и среди списка стандартных Delphi файлов которые можно создать (File|New|Other… Delphi Files) появилось два вида DevExpress форм – хорошо знакомая ribbon форма в стиле офиса 2007 и новая – в стиле офиса 2010.

devexpress_new_delphi_project

Сия новинка пришлась весьма кстати, поскольку я уже собирался изощряться и создавать нечто подобное руками. К счастью, делать этого не пришлось. В данном посте я и попытаюсь рассказать о том, что из себя представляет DevExpress VCL v 12.1 Ribbon 2010 Form и как с ней работать. Читать далее

Итак, конкурс «FireMonkey для учебы» завершен. На этот раз, у читателей DelphiFeeds.ru и подписчиков страницы сайта на FaceBook есть возможность самим определить победителя. Для этого нужно принять участие в голосовании.

Здесь я продублирую список конкурсных работ и ссылки для скачивания.

Тесты по английскому от Евгения Чмель.

Программа использует СУБД, для запуска скомпилированной версии вы можете воспользоваться вторым архивом.

http://delphifeeds.ru/konkurs/echmel_funny_english.zip
http://delphifeeds.ru/konkurs/echmel_funny_english_install.zip

Движение робота. Виктор Погулкин.

“Направляю вам работу. Она 100% подойдет учебному процессу, т.к. такие задания в большом количестве содержатся в учебнике информатики для младших классов. Там надо из точки “а” в точку “б” проложить путь по клеточкам.

Здесь я сделал так – можно выбрать простой вид (как в учебнике), а можно и 3D – это сложнее. Дальше выбирается номер задания (к сожалению, успел сделать только 2) путем ввода 1 (по умолчанию стоит) или 2-ки в компонент “едет”. Потом ученик должен нажимая кнопки “вперед”, “назад”, “влево”, “вправо” запрограммировать робота (программа появляется в “листбоксе”). Потом нажимаем “запуск” и робот анимировано движется в направление цели.

Пока проверить можно только визуально, чего, в принципе, достаточно. Конечно, есть что доработать, но общая идея, я полагаю, достаточно хороша и будет понятна комиссии https://www.lechenievisraile.com/лечение-без-посредников.

http://delphifeeds.ru/konkurs/robot3dmove.zip

http://delphifeeds.ru/konkurs/robot_program_exe.zip

«Я математик».Владислав Баженов

Программа предназначена для тренировки устного счёта.
Описание и руководство пользователя внутри архива.
Ждем ваших комментариев.
http://delphifeeds.ru/konkurs/im_math.zip (Исполняемый файл и описание внутри)

Детский суфлер. Сергей Попов.

Программа, помогающая детям заучивать тексты различной сложности:
http://delphifeeds.ru/konkurs/detskiy_sufler.zip

http://delphifeeds.ru/konkurs/detskiy_sufler_exe.zip

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

“…какими свойствами определяются координаты поверхностей и условно центра фигуры после загрузки произвольного объекта 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.

На прошлой неделе был выпущен набор исправлений для 4-го апдейта.

Перечень того, что испралено приведен здесь.

Обновление доступно для скачивания зарегистрированным пользователям.

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

Вышел Help Update 5 для Delphi XE2 и C++Builder XE2. Добавлено очень много материала по FireMonkey.

Подробнее можно почитать здесь.

Размер обновления – 931 М. Доступен для зарегистрированных пользователейю Качать и устанавливать необходимо вручную.

Сегодня я снова вернусь к “жизнеописанию” своего проекта. Возможно, в этом посте вы найдете еще один аргумент, для того, что бы перейти на Delphi XE2. Начну я с небольшого вступления.

На семинаре Embarcadero в Киеве в сентябре прошлого года я услышал историю о переводе на юникод очень большого проекта. Собственно, и истории ни какой не было. Был проект, который разработчики, с одной стороны, и хотели бы перевести на старшую версию Delphi. А с другой стороны у них в проекте 5 млн. строчек кода. И, естественно, перспектива рефакторинга и последующего тестирования такого количества кода их весьма пугает. А так ли страшно это на самом деле?

Я уже говорил, что проект у меня относительно не большой. Но вчера я обнаружил, что у меня у самого 0,6 млн. строк. Т.е. в теории выйти на сопоставимые порядки сложности приложения вполне реально, даже если не решать “сверхзадач” (я ни в коем случае не призываю оценивать сложность проекта количеством кода!).

Но таким объемом кода надо эффективно управлять и контролировать его. Конечно, hint’ы и warning’и помогают хоть как-то избегать ляпов. Но довольно часто разработчики просто не обращают на них внимания (что в корне не правильно), тупо полагаясь на оптимизатор.  Даже в довольно именитых наборах компонентов, при сборке исходников hint’ы и warning’и встречаются в изобилии. И полная ревизия всех сообщений компилятора – задача не простая.

И вот здесь очень удобно использовать QA Audits – инструмент, впервые появившийся в Delphi 2010. Использовать это средство в полном объеме могут владельцы Enterprise, Ultimate и Architect редакций Delphi. Читать далее

Прежде чем приступить к написанию этого поста хочу напомнить, что скоро заканчивается срок действия специального предложения от 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.

Прежде всего, сегодня вышел обещанный Delphi XE2 и C++ Builder XE2 Update 4.

Зарегистрированные пользователи могут скачать iso образ Delphi XE2 и C++ Builder XE2 с включенным Update 4,  либо воспользоваться автоматическим обновлением.

Пока не могу сказать ничего конкретного по поводу данного релиза. Качаю.

Кроме того, сегодня состоится очередной вебинар с Евгением Крюковым, посвященный стилям в FireMonkey.

Не пропустите!

Для тех, кто хочет глубже разобраться с LiveBinding - Understanding RAD Studio LiveBindings;

Для тех, кто читает DelphiFeeds.ru – получать новостную ленту можно с помощью FaceBook.

О действующих акциях компании Embarcadero вы можете узнать здесь.

http://cc.embarcadero.com/myreg
Продукты DevArt
Купить онлайн:



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