tag:blogger.com,1999:blog-17241802004333021772024-03-13T11:45:16.361+02:00TDelphiBlogБлог Delphi-программиста.
Обзоры инструментов и экспертов для Delphi. Описание JCL, JVCL, cnWizards. Дженерики в Delphi. Дневник разработки Lazy Delphi Builder. Переводы.Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.comBlogger191125tag:blogger.com,1999:blog-1724180200433302177.post-56236292326801604932016-04-06T13:22:00.000+03:002016-04-06T13:22:27.082+03:00Выложен Lazy Delphi Builder 1.14.14.362 и 364 (альфа)Выложена версия Lazy Delphi Builder 1.14.14.362.<br />
<br />
Исправлен Exception при добавлении пути в Lazy Paths.<br />
В редакторе IDE search paths исправлены ошибки с подсветкой несуществующих папок.<br />
Добавлена новая команда Replace selected with env var (auto) - которая заменяет часть пути на Environment variable (переменные ищутся в Lazy Environment variables и IDE environment variables)<br />
<br />
<a href="https://bitbucket.org/tdelphi/lazy-delphi-builder-downloads/downloads">Download
here</a><br />
<div align="left">
<br /></div>
Lazy Delphi Builder 1.14.14.364 alpha.<br />
обновлён JCL:<br />
* исправлена ошибка с некорректным ключом dcc32 -N"Snamespace"<br />
* улучшена поддержка версий Delphi XE2+<br />
* другие исправления<br />
Эту версию я ещё не тестировал. Если что-то найдёте - дайте знать.<br />
<br />Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com1tag:blogger.com,1999:blog-1724180200433302177.post-56392310687964983242016-04-01T01:38:00.001+03:002016-04-01T01:38:13.885+03:00Выложен Lazy Delphi Builder 1.14.14.360 (исправления ошибок)01.04.2016. Lazy Delphi Builder 1.14.14.360:<br />Исправления ошибок.<br />
<br />
<br />
<ul>
<li>Исправлены ошибки с относительными путями. Как для путей в LazyDBP файле так и для переменной $(BUILTIN_PROFILE_DIR)</li>
<li>Консольная версия не возвращала ERRORLEVEL если при удалении или создании папки случалась проблема</li>
<li>Очень тормозило построение дерева после удаления узла</li>
<li>MRU файлы. Последний загруженный отправляется наверх. Наконец-то.</li>
<li>Новый параметр командной строки /MaxProblemCountToStop</li>
<li>Значение BUILTIN_PROFILE_DIR переменной выводится после загрузки профиля в /debug режиме в консольной версии</li>
</ul>
<br />
<a href="https://bitbucket.org/tdelphi/lazy-delphi-builder-downloads/downloads" rel="nofollow" target="_blank">Скачивать</a>Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com0tag:blogger.com,1999:blog-1724180200433302177.post-44483350406992910512016-03-27T02:54:00.000+02:002016-03-27T02:54:37.539+02:00Lazy Delphi Builder 1.14.14.356 доступенВ этом блоге, последний раз я выкладывал анонс версии 1.10.9.269 от
2014-03-15. Новые версии продолжали выходить, я о них писал <a href="http://www.lazyproject.info/">на сайте проекта</a> и на <a href="https://plus.google.com/+LazyprojectInfo/posts">страничке Lazy Delphi
Builder в Google+</a>.<br />
Пользователям версии 1.10.9.269 от 2014-03-15 настоятельно рекомендую
обновиться – была исправлена критическая ошибка приводившая к раздуванию файла
LazyDBP и торможению работы.<br />
Основные нововведения опишу здесь. За деталями – добро пожаловать в
history_en.txt.<br />
Большие изменения<br />
<ul>
<li>Добавлена поддержка "portable" инсталляций (нужен только dccXX.exe и папка
Lib)
</li>
<li>Поддержка Delphi XE8-Seattle
</li>
<li>Добавлен тулбар и горячие клавиши для навигации по build log
</li>
<li>Интерфейс больше не блокируется на время компиляции
(Application.ProcessMessages наше всё)
</li>
<li>Режим /noop – когда никаких реальных действий с файлами не предпринимается
</li>
<li>Preset-ы для установленных в IDE packages
</li>
<li>Возможность добавить выделенные папки в IDE Library Search Paths или IDE
Browsing Paths
</li>
<li>Поддержка относительных путей. Как относительно текущей папки так и
относительно папки с LazyDBP профилем. (добавлена встроенная переменная
$(BUILTIN_PROFILE_DIR))
</li>
<li>Диалог с настройками. Теперь можно отключить удаление файлов в Корзину
по-человечески, с помощью галочки
</li>
<li>Новые параметры командной строки: /buildReleaseDcu /ResFileMasks /urb /noop
/v
</li>
<li>Команда Undo "build" (alpha) - восстанавливает Output folders из резервной
копии (.bak) после неудачной сборки.
</li>
<li>переименование прямо в дереве с файлами (F2) (без Undo)
</li>
<li>Исправлена куча ошибок (особенно в консольной версии). Спасибо за баг-репорты!</li>
</ul>
<h3>
Скриншоты</h3>
Редактор Portable инсталляций:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuv6_TIoTuEYihOAoNJb-syQuVxQmiNzC7h2CkrLEawkDOsKnXLefi7Ncxu2yFW0WPiYZmKg_jzHgCfrTHYUxx28IBUZi8FYxpoUpL_JZmb2IW6MBCgAyLmthudxK4R3n0nAlVvQrvHsM/s1600/PortableInstallation_d2010example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuv6_TIoTuEYihOAoNJb-syQuVxQmiNzC7h2CkrLEawkDOsKnXLefi7Ncxu2yFW0WPiYZmKg_jzHgCfrTHYUxx28IBUZi8FYxpoUpL_JZmb2IW6MBCgAyLmthudxK4R3n0nAlVvQrvHsM/s1600/PortableInstallation_d2010example.png" /></a></div>
<br />
<br />
Навигация в Build log:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_xilTJCs_WtfZGiksg87rfeikykiZUWtbC6rfFYQwua5VKA44rymb6IToY5fQlwSm8c9Xh18hUIC8txS4q8chKdbuBdzkXjszfVioP_7_jQt1ZwXlLNGG37csn8QLHhghZrvLFhPEANI/s1600/BuildLog_navigationToolbar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_xilTJCs_WtfZGiksg87rfeikykiZUWtbC6rfFYQwua5VKA44rymb6IToY5fQlwSm8c9Xh18hUIC8txS4q8chKdbuBdzkXjszfVioP_7_jQt1ZwXlLNGG37csn8QLHhghZrvLFhPEANI/s1600/BuildLog_navigationToolbar.png" /></a></div>
<br />
<br />
<br />Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com0tag:blogger.com,1999:blog-1724180200433302177.post-28418233149188352882015-09-16T15:14:00.000+03:002015-09-19T16:22:44.785+03:00Изменение курсора и автоматическое восстановление при выходе из метода<p>Не знаю как у вас, а у меня коде (vcl приложение) полным-полно таких конструкций:</p>
<pre class="brush: delphi;">var
tmpOldCursor: TCursor;
begin
tmpOldCursor := Screen.Cursor;
try
Screen.Cursor := crHourglass;
// код который может работать относительно долго
// например, выполнять запрос в БД
finally
Screen.Cursor := tmpOldCursor;
end;
end;</pre>
<p>И мне это надоело. По двум причинам:</p>
<ol>
<li>увеличение размера модулей - по 8 строк кода на каждый такой случай </li>
<li>разбухание секции uses, ведь чтобы это работало нужно в каждый модуль работающий с курсором добавить uses Forms, Controls; </li>
</ol>
<p>Поэтому давайте уже воспользуемся механизмом подсчёта ссылок в интерфейсах, и реализуем маленький класс избавляющий нас написания лишнего кода. Так чтобы вышеприведённый пример можно было упростить до 1й строки.</p>
<pre class="brush: delphi;">begin
TLazyCursorHelper.ChangeToHourglass;
// код который может работать относительно долго
// например, выполнять запрос в БД
end; // а здесь курсор должен восстановиться</pre>
<a name='more'></a>
<p><strike>Дайте мне знать, если вы знаете в каких случаях это не будет работать как задумывалось, или столкнётесь с такой ситуацией. В последнем случае, укажите пожалуйста в комментарии версию Delphi, платформу и была ли включена оптимизация при сборке.</strike></p>
<p>update: в комментариях дали ссылку на <a href="http://blog.barrkel.com/2010/01/one-liner-raii-in-delphi.html">более универсальное и элегантное решение от Barry Kelly</a> (который долгое время занимался разработкой компилятора dcc32 в Borland/Embarcadero). Barry уверяет, что такой способ весьма надёжен.</p>
<p><a href="https://gist.github.com/tdelphi/8af75d167229f47a227a" target="_blank">Реализация TLazyCursorHelper</a>:</p>
<script src="https://gist.github.com/tdelphi/8af75d167229f47a227a.js"></script>Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com11tag:blogger.com,1999:blog-1724180200433302177.post-39850773488130669302014-03-30T02:25:00.001+02:002014-03-30T02:25:31.755+02:00Delphi for Android: играем звук при встряхивании<p>Обещанного 3 года ждут. А план таков, что <a href="http://www.tdelphiblog.com/2013/10/1-android.html">программку для детей</a> мы всё-равно еще не скоро допишем (сомневаюсь что есть смысл её дописывать). </p> <p>Поэтому давайте зафигачим что-нибудь простенькое и бесполезное. Например что-то типа эмулятора кнута Индианы Джонса. As seen on tv. Типа того, что <a href="http://www.youtube.com/watch?v=96dLxor1pAQ">показывали в Теории Большого Взрыва</a> много <strike>лет</strike> сезонов назад. Только вместо кнута будем использовать колокольчик. А назовём проект LazyShaker.</p> <p>Для тех, кто предпочитает не засорять сознание <a href="http://lurkmore.to/%D0%A1%D0%B8%D1%82%D0%BA%D0%BE%D0%BC">ситкомами</a> расскажу суть. Программка должна воспроизводить звук при встряхивании. Всё. Способы применения - самые разнообразные, но в основном одинаково бесполезные и ограничивающиеся привлечением внимания.</p> <p>Исходный код проекта я <a href="https://github.com/tdelphi/LazyShaker" target="_blank">выложил на github</a>. А собранное приложение <a href="https://play.google.com/store/apps/details?id=com.tdelphiblog.LazyShaker" target="_blank">на Google Play</a>.</p> <p>Под катом объяснение того как всё это работает.</p> <a name='more'></a> <h4>Работа с сенсором</h4> <p>Для отслеживания встряхивания воспользуемся компонентом TMotionSensor. Опрашивать сенсор будем по таймеру (как это показано <a href="http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE5_Update/MobileCodeSnippets/Delphi/Accelerometer/">в демке</a>), каждые 5 миллисекунд. </p> <p>Сделаем свой класс TLazyShakeSensor реализующий следующий интерфейс:</p> <p>  TLazyShakeSensor = class <br />  public <br />    procedure InitSensors; <br />    procedure DeInitSensors; <br />    property OnShake: TNotifyEvent read FOnShake write FOnShake; <br />  end;</p> <p>Внутри класса спрячем:</p> <p>    FMotionSensor: TMotionSensor; <br />    FTimer: TTimer;</p> <p>    // обработчик события OnTimer для таймера</p> <p>    procedure DoOnSensorDataChanged(Sender: TObject);</p> <p>    // а этот метод будет вызывать событие OnShake <br />    procedure DoTriggerShakeEvent;</p> <h4>Воспроизведение звука</h4> <p>А для воспроизведения звука - нам вполне хватит стандартного TMediaPlayer-а. Просто бросим компонент TMediaPlayer на форму. Также сделаем метод PlayDefaulSound - который будет проигрывать звук.</p> <p>Сам звук добавим в проект через Deployment Manager. Это будет mp3 файл, который я нашёл через find-sounds.org. Для добавленного файла изменим destination path с .\ на .\assets\internal. См. скриншот ниже.</p> <p><a href="http://lh4.ggpht.com/-aHaMAsiOwV4/Uzdkd0YVSwI/AAAAAAAACQc/Tui-lcvRw_4/s1600-h/image%25255B3%25255D.png"><img title="Appmethod deployment manager" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Appmethod deployment manager" src="http://lh6.ggpht.com/-7A9LmLI0RvM/UzdkeS8l2qI/AAAAAAAACQk/9v1DECHq4UA/image_thumb%25255B1%25255D.png?imgmax=800" width="644" height="304" /></a></p> <p>Внутри формы создадим экземпляр класса TLazyShakeSensor и назначим ему обработчик события. В качестве обработчика просто объявим в коде формы свою процедуру с сигнатурой как у типа TNotifyEvent (procedure ProcName(Sender: TObject)). Из обработчика будем вызывать метод формы PlayDefaultSound; </p> <h4>GUI</h4> <p>Нам нужна возможность полностью закрыть программу, чтобы она не продолжала работать в фоне и не звенела при ходьбе. Для этого добавим на форму кнопку, к которой прикрепим стандартный action <a href="http://docwiki.embarcadero.com/Libraries/XE5/en/FMX.StdActns.TFileExit">TFileExit</a>.</p> <p>А чтобы форма не пустовала, добавим туда TImage с картинкой. Картинку возьмём в png формате <a href="https://openclipart.org/detail/179503/ringing-bell-by-algotruneman-179503">на сайте OpenClipart</a> (лицензия Public Domain). hint: Размер картинки выбирайте сами какой хотите. Здесь я не советчик, так как до сих пор не понимаю, каким образом эта картинка будет масштабироваться на устройствах с разным разрешением. Идеальным вариантом, конечно был бы использовать SVG, но к сожалению, ни android ни firemonkey такой возможности не предоставляют.</p> <h4>Ссылки по теме</h4> <ul> <li><a href="http://www.embarcadero.com/ru/products/delphi/android-ios-code-samples-xe5">Delphi Android & Ios code samples</a></li> </ul> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com0tag:blogger.com,1999:blog-1724180200433302177.post-71896275632891598232014-03-19T22:47:00.001+02:002014-03-19T22:47:50.533+02:00AppMethod: первые впечатления от trial-a<p> </p> <p>Установщик trial-a скачивался не то чтобы быстро. 50мб тянулись дольше 10 минут. Причём, это ограничение со стороны Embarcadero (по крайней мере, для Латвии), так как обычно такие файлы скачиваются за пару секунд. </p> <p>Зато сама установка прошла минут за 20 (включая скачивание всех пакетов). Однако не стоит забывать что это trial версия и исходные коды RTL и FMX не устанавливались. Также, вроде не устанавливался ни <a title="Официальный сайт Fast Report для Delphi" href="http://www.fast-report.com/ru/products/report-generator-for-delphi-fastreport-4.html" rel="nofollow" target="_blank">Fast Report</a>, ни логгер-забыл-как-он-там-называется, ни Beyond compare.</p> <p>Первое, что бросается в глаза - переделанный внешний вид. Все иконки на основных тулбарах заменены (на плоские иконки (оппа-metro-style!) без антиалиасинга). </p> <p><a href="http://lh3.ggpht.com/-LKbPs3RXnYg/UyoCcb3bGUI/AAAAAAAACQE/kt4YS-a3bGQ/s1600-h/image24.png"><img title="AppMethod main form" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="AppMethod main form" src="http://lh5.ggpht.com/-alr3Q87GKW0/UyoCc1_DX4I/AAAAAAAACQM/-3RRlTh2nrU/image_thumb22.png?imgmax=800" width="943" height="804" /></a></p> <p>Созданный в Delphi XE5 проекты открылись, собрались установились в телефон и заработали без каких-либо проблем. </p> <p>Внимание, если при запуске программы на Android устройстве у вас появляется Linker error, то это значит, что скорее всего вы забыли сделать rebuild проекту. </p> <p> </p> <p>Мне не удалось проверить работу <a href="http://www.lazyproject.info/" target="_blank">Lazy Delphi Builder</a>, так как с trial-ом вместо рабочего dcc32 всегда ставится mock exe-шка только и умеющая что выводить текст: </p> <p><em>This version of the product does not support command line compiling.</em></p> <p>Хорошая же новость в том, что Lazy Delphi Builder всё ж таки определяет установленный AppMethod и находит файлы компиляторов. Так что, по идее, должно работать. (я проверял с <a href="http://www.tdelphiblog.com/2014/03/lazy-delphi-builder-1109269-15032014.html" target="_blank">269 билдом</a>)</p> <p>Резюмируя: если б мне не приходилось большую часть времени заниматься сопровождением VCL проектов, я бы с огромным удовольствием переключился на AppMethod.</p> <p>p.s. (= И кстати, эта версия носит почётный 13й номер и ставится в папку <em>Embarcadero\Appmethod\13.0\ </em></p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com8tag:blogger.com,1999:blog-1724180200433302177.post-63658013875909098052014-03-18T21:20:00.001+02:002014-03-18T23:33:32.676+02:00Официально вышел AppMethod<p> </p> <p>Trial версию можно получить тут: <a title="http://www.appmethod.com/free-trial" href="http://www.appmethod.com/free-trial">http://www.appmethod.com/free-trial</a> (требуется простейшая регистрация, ключ приходит на email).</p> <p>На цены можно посмотреть тут: <a title="http://www.appmethod.com/pricing" href="http://www.appmethod.com/pricing">http://www.appmethod.com/pricing</a></p> <p> </p> <p>Бесплатной версии судя по всему нету. <a href="http://www.embarcadero.com/products/rad-studio/appmethod-faq" target="_blank">FAQ на страничке Embarcadero теперь утверждает</a> следующее:</p> <h6><a href="http://www.embarcadero.com/products/rad-studio/appmethod-faq#">Q) I read there will be a free edition of Appmethod. Any additional information on this?</a></h6> <p>As part of our plan to make Appmethod available to as many developers as possible, we have discussed and considered a free Appmethod subscription level for release at a future date. If a free subscription level is made available, it will have platform, form factor, screen size, feature, and distribution restrictions. While there has been discussion of a free Appmethod edition, there is as of yet no official committed plan to release a free edition beyond a Free Trial Edition.</p> <p>Я это понимаю так: </p> <p>Бесплатная версия возможно и появится в будущем, но у неё будут ограничения по платформам, form factor, размеру экрана, фичам и ограничения по распостранению. Хотя возможность предоставления бесплатной подписки и обсуждалось, в данный момент официально подтвержденного плана выпустить бесплатную версию нет. Но за trial платить не надо.</p> <p>p.s. кстати, в качестве issue tracker-a для AppMethod Embarcadero предлагает использовать Jira! bye bye Quality Central? <img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Подмигивающая рожица" src="http://lh4.ggpht.com/-LZ0jyzLLlp8/Uyi7quhJgZI/AAAAAAAACPs/f9DP56LxoUo/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" /></p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com6tag:blogger.com,1999:blog-1724180200433302177.post-12356185726330532952014-03-16T22:53:00.001+02:002014-03-16T22:53:21.121+02:00Lazy Delphi Builder 1.10.9.269 от 15.03.2014.<p>Выложил небольшой апдейт. В основном это исправление багов.</p> <p>15.03.2014. Lazy Delphi Builder 1.10.9.269: <br />0. Исправлено: угадывание версий Delphi не работало для XE5, XE6 <br />1. Исправлено: некорректно отображалось название для XE6 (спасибо nda за репорт) <br />2. Изменено: reset build status теперь работает для выделенных нескольких узлов <br />3. Исправлено: если lazyDbp файл загружался через Recent меню, его название не попадало в диалоги Open/Save <br />4. Изменено: добавлена пара новых правил для угадайки версии Delphi (не работало для VirtualTreeview) <br />5. Новое: создание при компиляции файлов для C++ Builder (чекбокс в Build dialog). NB: Если C++ Builder не установлен, то вообще ничего компилироваться не будет! (такова особенность dcc32 + моих рук)</p> <p>Скачивать <a href="https://bitbucket.org/tdelphi/lazy-delphi-builder-downloads/downloads" target="_blank">на bitbucket</a>.</p> <p>As seen on torry.net!</p> <p> <img src="http://torry.net/images/torry_logo.png" width="118" height="76" /></p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com0tag:blogger.com,1999:blog-1724180200433302177.post-92109844161766463742014-03-15T14:44:00.001+02:002014-03-15T14:45:54.341+02:00Спаси Delphi, помоги зоопарку: GSmart Aku A1<p>Всеволод как-то <a href="http://blogs.embarcadero.com/vsevolodleonov/2014/02/07/zoo/" target="_blank">предложил описать устройства</a>, которые можно успешно использовать для разработки на Delphi XE5. Вот мои пять евроцентов. </p> <p>1. Автор обзора: Алексей Тимохин</p> <p>2. Название телефона: Gigabyte GSmart Aku A1 (год выпуска 2013). Мощный (quad core) и бюджетный (5000-6000 рублей) телефон. Слабые места: камера, экран (углы обзора). <a href="http://4pda.ru/forum/index.php?showtopic=491775" target="_blank">Ссылка на обсуждение Aku A1 на форуме 4pda</a> – там же можно найти отзывы и ответ на любой вопрос.</p> <p>3. Как ставилось, были ли сложности, "лекарство", трюки, чудо (оно как-то само), шаманство и т. д. Драйвер из ASDK не сработал. Помог <a href="http://www.gigabytecm.com/en/goodscontent.php?id=10&type=2">драйвер с официального сайта</a>.</p> <p>4. Фото телефона:</p> <p><a href="http://lh5.ggpht.com/-ph4rtUjU3MY/UyRLLN4YtoI/AAAAAAAACPU/UgYsoLqw2lU/s1600-h/2014-03-15%25252014_40_58-DSC06505%25255B10%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2014-03-15 14_40_58-DSC06505" border="0" alt="2014-03-15 14_40_58-DSC06505" src="http://lh4.ggpht.com/-N2ltj8AdfqU/UyRLMaByAQI/AAAAAAAACPc/GZ-VWHSWnCs/2014-03-15%25252014_40_58-DSC06505_thumb%25255B8%25255D.png?imgmax=800" width="644" height="397" /></a></p> <p>5. Разное: недорогое мощное устройство с 2 sim-картами. На момент покупки (декабрь 2013) Aku A1 лидировал по соотношению цена/производительность+отсутствие проблем. Из недостатков – плохие углы обзора (искажение цветов), внутренняя память очень быстро забивается (тут мне помог рут и удаление части предустановленного барахла).</p> <p>У меня не возникало никаких проблем с запуском программ написанных на Delphi. (проверял разные демки а также и программы опубликованные в Play Store).</p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com0tag:blogger.com,1999:blog-1724180200433302177.post-8581702686925096872014-03-07T23:20:00.001+02:002014-03-08T03:15:00.544+02:00AppMethod – новая IDE только для Firemonkey от Embarcadero.<p>И кстати, пользуясь случаем хочу <strike>передать привет</strike> хочу <a href="http://edn.embarcadero.com/article/43677" target="_blank">дать ссылку на Roadmap для Delphi на 2014 год</a>.</p> <hr /> <p>Embarcadero готовит что-то новенькое. Причём, у этого чего-то еще будет и бесплатная редакция. Последняя бесплатная IDE, насколько я помню была у Turbo Delphi в далёком 2006, которая вроде даже была довольно популярна несмотря на некоторые ограничения.</p> <p>Продукт будет называться <strong><a href="http://www.appmethod.com/">AppMethod</a></strong>. И будет представлять собой версию RAD Studio только для Firemonkey (без VCL). Для пользователей полной RAD Studio, продукт скорее всего не будет представлять интереса. А вот для новых клиентов заинтересованных в кроссплатформенной разработке, это должно быть интересно.</p> <p>Согласно <a href="http://techcrunch.com/2014/03/06/embarcadero-launches-appmethod-a-new-multi-device-development-platform-for-native-apps/">информации от Techcrunch</a>, нам обещают бесплатную редакцию для индивидуальных разработчиков (которая будет поддерживать сборку под Android и deploy максимум на 5 устройств (интересно, как это будет ограничиваться)).</p> <p>Коммерческие лицензии будут доступны по подписке на год.</p> <h3> </h3> <h3>Имхо</h3> <p>Хотя подписка на год и портит всю малину, но всё-равно браво, маркетологи Embarcadero.</p> <p>Причины:</p> <ul> <li>Во-первых, в IDE будет меньше package-й - и запуск IDE должен стать быстрее. </li> <li>Во-вторых, меньше компонентов в палитре, что упростит повседневную работу (особенно для тех, кто только начинает) как пользователям, так и службе поддержки. </li> <li>В-третьих, бесплатная версия для Android - отличный ход для популяризации Firemonkey. Одна из характерных черт Android платформы там больше любят халяву. Там больше бесплатных приложений. Хотелось бы мечтать, что бесплатная версия всё же позволит публиковаться в Google Play, но что-то подсказывает мне что нет. Что ж. Будем меняться исходниками. Стимулируя Open Source, я надеюсь выиграет всё сообщество Delphi разработчиков. </li> <li>В-четвертых, новый бренд. молодцы, интересный ход. Упоминание Delphi почему-то частенько вызывает ярко-выраженную аллергическую реакцию. Посмотрим как с этим пойдёт. </li> </ul> <p>Ложки дёгтя:</p> <ul> <li>AppMethod, не такой выговариваемый, как Делфи. Сравните: делфи, делфай, аппмитод, аппметод. </li> <li>Годовая подписка. А что через год - что ли нельзя больше ничего собрать будет? </li> <li>Годовая подписка за разработчика/за платформу. Хотите 4 платформы - умножайте на 4? </li> </ul> <p>Источники:</p> <ul> <li><a href="http://www.embarcadero.com/ru/products/rad-studio/appmethod-faq">Официальный Appmethod FAQ на сайте Embarcadero</a> </li> <li><a href="http://www.appmethod.com/">Официальный сайт AppMethod</a> </li> <li><a href="http://techcrunch.com/2014/03/06/embarcadero-launches-appmethod-a-new-multi-device-development-platform-for-native-apps/">Анонс на techcrunch</a> </li> </ul> <p>p.s. В публичном доступе – с 18 марта (дата найдена в интернетах).</p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com9tag:blogger.com,1999:blog-1724180200433302177.post-83600115562628555522014-02-28T00:01:00.001+02:002014-02-28T00:01:53.480+02:00Lazy Delphi Builder 1.10.8.268 Alpha от 27.02.2014.<p><strong></strong></p> <p><strong>Скачивать </strong><a href="https://bitbucket.org/tdelphi/lazy-delphi-builder-downloads/downloads"><strong>здесь</strong></a></p> <p>Очень много нововведений. Существенно переписано ядро. Экспериментальный устаревший TasksEx отвечавший за работу в фоне, заменен на <a href="http://roman.yankovsky.me/?p=1100">Awaitable модуль от Романа Янковского</a>. </p> <p>Если обнаружите ошибку, пожалуйста, сообщите.</p> <hr /> <p>История изменений</p> <ol> <li>Новое: <ol> <li>Возможность использовать dccaarm, dcciosarm, dccios32 для сборки </li> <li>Появилась возможность компилировать только debug или только release - в Build dialog добавлена галочка Build release dcus. </li> <li>Добавлены preset-ы для scan file masks </li> <li>Добавлен preset "default" чтобы дать возможность сбросить настройки к значениям по умолчанию. Реализовано для: output directories, file scan masks </li> <li>В диалоге Build settings теперь показывается страница настроек Search Paths </li> <li>Выводить Total build time в конце билда </li> <li>В дереве файлов: Check Wizard (Ctrl+W) - диалог дающий возможность выделить/снять выделение с файлов относящихся к выбранной версии Delphi. </li> <li>Menu -> File -> добавлен пункт Merge profile, который позволяет обновить текущий профиль данными из другого профиля. </li> <li>Base out dir теперь сохраняется в LazyDBP файле. </li> <li>Оптимизирована скорость обработки найденных файлов </li> <li>В дереве файлов для проектов и пакетов: <ol> <li>Теперь можно увидеть статус сборки (build status) (?? - не собирался, ok - собрался корректно, er - ошибка компиляции) </li> <li>Фильтр теперь прячет папки в которых нет ни одного видимого файла </li> <li>В всплывающее меню добавлены команды: <ol> <li>Сброс статус компиляции (может быть полезно, если вы хотите пересобрать этот пакет в режиме Continue Build) - Скопировать в буфер обмена лог инсталляции Найти проблемный пакет в Build Log-е </li> <li>В Info panel теперь показывается к какой версии Delphi относится данный файл (угадайка). </li> </ol> </li> </ol> </li> </ol> </li> <li>Исправления: <ol> <li>При загрузке профиля из файла, игнорируется указанная в нём версия Delphi </li> <li>В диалоге Build settings при запуске в temp/test mode не блокируются пресеты в каталогах - можно загрузить пресет и изменить папку </li> <li>Игнорировалась значение указанное в Break after N errors (Build settings) </li> <li>Если в профиле была указана инсталляция: XE 3 Architect. А на машине, где загружаем этот профиль установлена Enterprise - то внешне все будет выглядеть прилично, но при нажатии на Compile появится ошибка Assertion failure (uLazyIdeProxy.pas, line 886) LazyInstaller.CurrentInstallation not assigned. </li> <li>При очистке профиля не очищается список Environment variables и Lazy Search paths </li> <li>Для namespaces показывается некорректный список Recent(MRU) </li> <li>В Build диалоге не отрисовывался фон в визарде </li> </ol> </li> <li>UI: <ol> <li>Installation log переименован в Build log </li> <li>Блокировать пункт меню Edit -> Find, если текущая закладка не поддерживает поиск </li> <li>В Save as диалог теперь подставляется имя файла загруженного профиля </li> <li>Build dialog: добавить возможность указать CustomCompiler (раньше это можно было сделать только напрямую в файле LazyDBP). </li> <li>В статусной строке теперь показывается количество проектов собранных с ошибкой. </li> <li>В дереве файлов оптимизирована скорость переключения из режима списка в режим дерева. (теперь быстрее примерно на 46%) </li> </ol> </li> </ol> <a name='more'></a> <h4>Скриншоты</h4> <p>Check Wizard (Ctrl+W) – этот диалог позволяет отметить/выделить в дереве файлы относящиеся к выбранной версии Delphi. (экспериментальная функция)</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Окно Check Wizard в Lazy Delphi Builder" border="0" alt="Окно Check Wizard в Lazy Delphi Builder" src="http://lh5.ggpht.com/-kDZa_BVwkqU/Uw-1xO0dzsI/AAAAAAAACN4/a8lblHrsHKY/image%25255B75%25255D.png?imgmax=800" width="439" height="435" /></p> <p> </p> <p>Search paths в Build dialog-е</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Search paths в Build dialog-е в Lazy Delphi Builder" border="0" alt="Search paths в Build dialog-е в Lazy Delphi Builder" src="http://lh3.ggpht.com/-tZyA_yZBdlA/Uw-1x0AoFRI/AAAAAAAACOA/WkmhpueNnrk/image%25255B71%25255D.png?imgmax=800" width="476" height="484" /></p> <p> </p> <p>Показ числа ошибок компиляции в Status bar</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Показ числа ошибок компиляции в Status bar в Lazy Builder" border="0" alt="Показ числа ошибок компиляции в Status bar" src="http://lh6.ggpht.com/-3wstiVMwWHw/Uw-1yQx9ZMI/AAAAAAAACOE/agIhhwpKe3Y/image%25255B92%25255D.png?imgmax=800" width="499" height="29" /></p> <p> </p> <p>Новые пункты меню в дереве с файлами</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Новые пункты меню в дереве с файлами в Lazy Delphi Builder" border="0" alt="Новые пункты меню в дереве с файлами" src="http://lh3.ggpht.com/-pGMBDiDJVEI/Uw-1yicxQYI/AAAAAAAACOQ/8u2jJ76epNc/image%25255B93%25255D.png?imgmax=800" width="486" height="403" /></p> <p> </p> <p>Встроенный preset DEFAULT позволяющий вернуться к настройкам по умолчанию</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Встроенный preset DEFAULT позволяющий вернуться к настройкам по умолчанию в Lazy Delphi Builder" border="0" alt="Встроенный preset DEFAULT позволяющий вернуться к настройкам по умолчанию" src="http://lh4.ggpht.com/-12U52HbhekU/Uw-1zFegPZI/AAAAAAAACOY/jQsE6tSH9rY/image%25255B94%25255D.png?imgmax=800" width="307" height="175" /></p> <p> </p> <p>Диалог импорта данных из другого профиля</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Диалог импорта данных из другого профиля в Lazy Delphi Builder" border="0" alt="Диалог импорта данных из другого профиля" src="http://lh5.ggpht.com/-cHEncDGjjls/Uw-1ziRXexI/AAAAAAAACOc/0fbkfczJ-jo/image%25255B95%25255D.png?imgmax=800" width="591" height="409" /></p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com0tag:blogger.com,1999:blog-1724180200433302177.post-55302279743061741972014-02-20T23:38:00.001+02:002014-02-21T22:35:26.444+02:00Лучшее в Delphi блогах за 2013 год.<p> <strong>Обновлено 2014.02.21 22:34</strong></p> <p><img style="display: inline; float: right" align="right" src="https://openclipart.org/image/300px/svg_to_png/103351/best-year-sticker.png" width="201" height="240" />Подборка ссылок на лучшие публикации по Delphi за 2013 год.</p> <hr /> <p>Аналогичные подборки за предыдущие годы:</p> <ul> <li><a href="http://www.tdelphiblog.com/2010/01/2009.html">за <b>2009</b> год</a> </li> <li><a href="http://www.tdelphiblog.com/2011/03/delphi-2010.html">за <b>2010</b> год</a> </li> <li><a href="http://www.tdelphiblog.com/2012/04/samoe-interesnoe-v-delphi-blogah-za.html">за <b>2011</b> год</a> </li> <li><a href="http://www.tdelphiblog.com/2013/03/luchshee-o-delphi-za-2012-god.html">за <b>2012</b> год</a> </li> </ul> <a name='more'></a> <hr /> <h3>Оглавление</h3> <ul> <li><a href="#firemonkey">Firemonkey. Кроссплатформенная разработка и разработка для мобильных устройств</a> <ul> <li><a href="#mobile">Мобильная разработка</a> </li> <li><a href="#ios">Delphi. Разработка для iOs</a> </li> <li><a href="#android">Delphi. Разработка для Android</a> </li> </ul> </li> <li><a href="#delphi">Delphi</a> </li> <li><a href="#help">pascal-study  svg. Переводы справочной системы Delphi</a> </li> <li><a href="#quiz">Задачки на понимание</a> </li> <li><a href="#libraries">Библиотеки и компоненты</a> <ul> <li><a href="#author">Авторские библиотеки</a> </li> <li><a href="#ribbon">Windows Ribbon Framework</a> </li> </ul> </li> <li><a href="#tools">Инструменты</a> </li> <li><a href="#tips">Полезные и не очень советы</a> </li> <li><a href="#license">Управление лицензиями RAD Studio</a> </li> <li><a href="#webinars">Вебинары.</a> </li> <li><a href="#interviews">Интервью</a> </li> <li><a href="#lulin">Поток сознания Александра Люлина</a> </li> </ul> <h3><a title="Ссылка на раздел Firemonkey" href="#firemonkey">#</a> <a name="firemonkey">Firemonkey. Кроссплатформенная разработка и разработка для мобильных устройств</a></h3> <ul> <li><a href="http://teran.karelia.pro/articles/item_6148.html">Оконные сообщения в FireMonkey</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_6117.html">Вопросы и предложения по FireMonkey (FM Platform) (IDE) #1</a>. Андрей Терехов </li> <li><a href="http://fire-monkey.ru/page/articles/_/articles/graphics/graphics-screenshot">FireMonkey. Графика. Делаем скриншот любого </a>контрола. Автор не указан </li> <li><a href="http://ginne.ru/node/61">Создание компонентов в FireMonkey на примере кнопки с картинкой</a>. Alex (ginne.ru) </li> <li><a href="http://ginne.ru/node/60">Использование шейдерных эффектов в FireMonkey 2.0</a>.  Alex (ginne.ru) </li> <li><a href="http://ginne.ru/node/59">Создание кроссплатформенного сервиса на примере снимка экрана</a>.  Alex (ginne.ru) </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/10/07/room3/">Комната 3D, Delphi, Платформа приложений FM</a>. Всеволод Леонов. </li> <li><a href="http://blogs.embarcadero.com/roschinspb/2013/04/15/tcaretru/">Каретка в Fire Monkey</a> (XE4). Сергей Рощин. </li> <li><a href="http://blogs.embarcadero.com/roschinspb/2013/04/03/subcategoryru/">Про категории и подкатегории в TActionList</a>. Сергей Рощин. </li> <li><a href="http://blogs.embarcadero.com/roschinspb/2013/04/08/tanicalculationsru/">Платформонезависимый скроллинг в Fire Monkey</a> (XE4). Сергей Рощин. </li> <li><a href="http://blogs.embarcadero.com/roschinspb/2013/09/03/popupxe5ru/">Всплывающие формы в XE5</a> (FormStyle и TCustomPopupForm). Сергей Рощин. </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2013/04/16/tlinkedlabel/">Часть 3. Разработка компонентов под FMX 2.0. Кликабельная метка</a>. Ярослав Бровин. </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2013/06/17/firemonkey-bitmap-scanline/">FireMonkey. Доступ к пикселям TBitmap. Аналог Scanline из VCL.</a> Ярослав Бровин. </li> <li><a href="http://www.webdelphi.ru/2013/01/firemonkey-ot-prostogo-k-slozhnomu-14-pervyj-opyt-raboty-s-3d/">FireMonkey. От простого к сложному #14. Первый опыт работы с 3D.</a> Владислав Баженов. </li> <li><a name="3459433026762292945"></a><a href="http://keeper89.blogspot.com/2013/07/os-x.html">Как программно завершить работу, сделать перезагрузку, перевести компьютер в ждущий режим или выйти из системы в OS X? Юрий Петров</a> </li> <li><a href="http://roman.yankovsky.me/?p=1172">Кроссплатформенность и модальные формы</a>. Роман Янковский.</li> </ul> <h4><a title="Ссылка на раздел Мобильная разработка" href="#mobile">#</a> <a name="mobile">Мобильная разработка</a></h4> <h5>Разработка кроссплатформенных мобильных приложений в Delphi. Автор: firemonkey.</h5> <ul> <li><a href="http://habrahabr.ru/company/delphi/blog/199026/">Разработка кроссплатформенных мобильных приложений в Delphi #1</a> </li> <li><a href="http://habrahabr.ru/company/delphi/blog/200490/">Разработка кроссплатформенных мобильных приложений в Delphi #2</a> </li> <li><a href="http://habrahabr.ru/company/delphi/blog/201352/">Разработка кроссплатформенных мобильных приложений в Delphi #3</a> </li> <li><a href="http://habrahabr.ru/company/delphi/blog/202302/">Разработка кроссплатформенных мобильных приложений в Delphi #4</a> </li> <li><a href="http://habrahabr.ru/company/delphi/blog/203266/">Разработка кроссплатформенных мобильных приложений в Delphi #5</a> </li> <li><a href="http://habrahabr.ru/company/delphi/blog/205194/">Несколько советов, которые помогут сделать процесс мобильной разработки более комфортным</a> </li> <li><a href="http://blogs.embarcadero.com/nikolay/2013/04/14/sensorsorientation/">Пробуем датчики. Ориентация устройства в пространстве.</a> Nikolay (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/nikolay/2013/04/03/sensorscommon/">Пробуем датчики для мобильных устройств</a> - Рассмотрим работу TSensorManager и что нам может предоставить айфон, и, в скором будущем, устройство с андроидом. Nikolay (Embarcadero) </li> </ul> <h4><a title="Ссылка на раздел Разработка для iOs" href="#ios">#</a> <a name="ios">Разработка для iOs</a></h4> <ul> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/04/23/dios_dev_hardware/">Delphi for iOS необходимое оборудование</a>. Всеволод Леонов. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/06/11/dios_dev_software/">Delphi for iOS необходимое программное обеспечение</a>. Всеволод Леонов. </li> <li><a href="http://www.webdelphi.ru/2013/03/delphi-for-ios/">Delphi for iOS: предварительный обзор продукта</a>. Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/03/delphi-for-ios-komponent-twebbrowser-dlya-firemonkey/">Delphi for iOS: компонент TWebBrowser для FireMonkey.</a> Владислав Баженов. </li> <li><a href="http://keeper89.blogspot.com/2013/07/osx-ios-delphi-xe2-xe3-xe4-1.html">Получение информации о системе в OSX и iOS с помощью Delphi (XE2, XE3, XE4) - Часть 1. Юрий Петров</a> </li> <li><a href="http://keeper89.blogspot.com/2013/07/osx-ios-delphi-xe2-xe3-xe4-2.html">Получение информации о системе в OSX и iOS с помощью Delphi (XE2, XE3, XE4) - Часть 2. Юрий Петров</a> </li> </ul> <h4><a title="Ссылка на раздел Разработка для Android" href="#android">#</a> <a name="android">Разработка для Android</a></h4> <ul> <li><a href="http://www.webdelphi.ru/2013/08/vvedenie-v-razrabotku-pod-android-instrumenty-razrabotchika/">Введение в разработку под Android: инструменты разработчика.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/08/delphi-xe5-pervoe-prilozhenie-dlya-android/">Delphi XE5: первое приложение для Android.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/09/universalnyj-sposob-snyatiya-skrinshotov-s-android-ustrojstv/">Универсальный способ снятия скриншотов с Android-устройств</a>. Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/10/delphi-xe5-rabota-so-shriftami-v-prilozheniyax-dlya-android/">Delphi XE5: работа со шрифтами в приложениях для Android.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/12/delphi-xe5-neskolko-poleznyx-i-ne-ochen-primerov-po-rabote-s-android/">Delphi XE5: несколько полезных и не очень примеров по работе с Android.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/09/problema-delphi-xe5-ne-opredelyaet-moyo-android-ustrojstvo-v-target/">Проблема: Delphi XE5 не определяет моё Android-устройство в Target.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/11/delphi-xe5-kitajskij-kalendar-dlya-android/">Delphi XE5: Китайский календарь для Android.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/12/delphi-xe5-eshhyo-odin-primer-ispolzovaniya-rest-client-library/">Delphi XE5: ещё один пример использования REST Client Library</a>. Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/09/delphi-xe5-rest-client-library/">Delphi XE5: REST Client Library</a>. Владислав Баженов. </li> <li><a href="http://www.tdelphiblog.com/2013/12/2-android.html">Пишем детскую программку под Android: основа</a>. Алексей Тимохин. </li> <li><a href="http://www.tdelphiblog.com/2013/10/sovmestimostjandroididelphi.html">Легкий способ проверить Android устройство на совмесимость.</a> Алексей Тимохин. </li> <li><a href="http://www.tdelphiblog.com/2013/12/fmx-mobile-vpe4atlenija.html">Delphi XE5: впечатления от разработки под Android</a>. Алексей Тимохин.</li> <li><a href="http://roman.yankovsky.me/?p=996">Работа с TCanvas в Delphi под Android</a>. Роман Янковский.</li> <li><a href="http://roman.yankovsky.me/?p=1321">WordLines — работа на конкурс</a>. Роман Янковский.</li> </ul> <h5>Разработка логической игры для Android на Delphi. Николай Зверев.</h5> <ul> <li><a href="http://www.delphinotes.ru/2013/11/delphi-android-tap1.html">Delphi плюс Android? Есть идея! Tap#1</a>. Начало.<a name="8264943083650345888"></a> </li> <li><a href="http://www.delphinotes.ru/2013/11/delphi-android-tap2.html">Delphi плюс Android? Есть идея! Tap#2</a>. РИсование персонажа в дизайнере. </li> <li><a href="http://www.delphinotes.ru/2013/12/delphi-android-tap3.html">Delphi плюс Android? Есть идея! Tap#3</a>. Масштабирование персонажа. </li> <li><a href="http://www.delphinotes.ru/2013/12/delphi-android-tap4.html">Delphi плюс Android? Есть идея! Tap#4</a>. Анимация. </li> <li><a href="http://www.delphinotes.ru/2013/12/delphi-android-tap5.html">Delphi плюс Android? Есть идея! Tap#5</a>. Завершение. </li> </ul> <h5><a name="6467337224155026563"></a>Пишем для Android. Автор: Андрей Ефимов</h5> <ul> <li><a href="http://delphifmandroid.blogspot.com/2013/11/fmxmediatmediaplayer-mp3-android.html">FMX.Media.TMediaPlayer или пишем свой mp3-плеер для Android'а #1</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/11/fmxmediatmediaplayer-mp3-android-2.html">FMX.Media.TMediaPlayer или пишем свой mp3-плеер для Android'а #2</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/12/delphi-xe5.html">Проверка подключения к интернету на мобильных устройствах с Delphi XE5</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/12/blog-post.html">Перемещение элементов управления в видимую область, при отображении виртуальной клавиатуры.</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/10/blog-post.html">Жизненный цикл мобильного приложения</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/10/android.html">Работаем с кнопками на Android устройствах</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/10/blog-post_28.html">Создаём выдвижное боковое меню в приложении</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/10/tbutton-tspeedbutton.html">Как закрыть приложение при помощи кнопки TButton или TSpeedButton</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/10/android_29.html">Создание выпадающего меню в приложении на Android</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/10/blog-post_30.html">Как загрузить пользовательские стили во время выполнения приложения</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/11/delphi-xe5-ios-android.html">Delphi XE5 iOS и Android, поддерживаемые форматы медиа файлов</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/11/delphi-xe5-ios-android-map-my-location.html">Delphi XE5 iOS и Android, одна строчка кода - Map My Location</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/11/shared-preferences.html">Сохраняем настройки приложения, используя Shared Preferences</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/11/blog-post.html">Определяем, поддерживается ли наше устройство для разработки приложений</a> </li> <li><a href="http://delphifmandroid.blogspot.com/2013/11/firemonkey.html">Изменение FireMonkey стиля во время выполнения приложения</a> </li> </ul> <h3><a title="Ссылка на раздел Delphi" href="#delphi">#</a> <a name="delphi">Delphi</a></h3> <ul> <li><a href="http://www.gunsmoker.ru/2013/04/plugins-9.html">Разработка системы плагинов, часть 9: подводные камни. Александр Алексеев</a> </li> <li><a href="http://www.gunsmoker.ru/2013/08/fix-ugly-api-userless-callback.html">Исправляем плохой дизайн API: функции обратного вызова без user-аргумента. Александр Алексеев</a> </li> <li><a href="http://www.gunsmoker.ru/2013/01/WinAPI1.html">Программирование на WinAPI, часть 1 - где искать информацию. Александр Алексеев</a> </li> <li><a href="http://cemick.blogspot.com/2013/02/delphi-raise-exception.html">Подводные камни при работе с исключениями в Delphi: Raise Exception, AcquireExceptionObject, исключения операционной системы</a>. Семен Хмелёв </li> <li><a href="http://keeper89.blogspot.com/2013/02/blog-post_18.html">Вопросы производительности в конструкторах динамических массивов. </a><a href="http://keeper89.blogspot.com/2013/07/os-x.html">Юрий Петров</a> </li> <li><a href="http://www.gunsmoker.ru/2013/05/modern-delphi.html">Эволюция Delphi: современные возможности. Александр Алексеев</a> </li> <li><a href="http://www.gunsmoker.ru/2013/02/delphi-friendliness.html">"Дружественность" в Delphi. Александр Алексеев</a> </li> <li><a href="http://www.gunsmoker.ru/2013/01/optimization-basics.html">Основы оптимизации прикладных программ на Delphi. Александр Алексеев</a> </li> <li><a href="http://cemick.blogspot.com/2013/02/delphi-raise-exception.html">Подводные камни при работе с исключениями в Delphi: Raise Exception, AcquireExceptionObject, исключения операционной системы</a>. Семен Хмелёв </li> <li><a href="http://alexander-bagel.blogspot.com/2013/04/blog-post.html">Атомарные операции</a>. А зачем нужен префикс LOCK, или его аналог InterlockedDecrement. Александр (Rouse_) Багель </li> <li><a href="http://alexander-bagel.blogspot.com/2013/11/pmm2.html">Карта памяти процесса</a>. Задумывались ли вы над тем, как именно используется память, доступная вашей программе, да и вообще, что именно размещается в этих двух-трех гигабайтах виртуальной памяти, с которыми работает ваше ПО? </li> <li><a name="5726185027889042608"></a><a href="http://alexander-bagel.blogspot.com/2013/03/draw-over-twincontrol.html">Рисуем поверх TWinControl</a>. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://habrahabr.ru/post/178007/">Изучаем отладчик, часть первая</a>. Александр (Rouse_) Багель </li> <li><a href="http://habrahabr.ru/post/178159/">Изучаем отладчик, часть вторая</a>. Александр (Rouse_) Багель </li> <li><a href="http://habrahabr.ru/post/178183/">Изучаем отладчик, часть третья</a>. Александр (Rouse_) Багель </li> <li><a href="http://habrahabr.ru/post/177625/">Отключение главной нити приложения от отладчика и уход от перехвата CreateFile()</a> . Александр (Rouse_) Багель </li> <li><a href="http://habrahabr.ru/post/178189/">Простой способ обнаружения эмуляторов ключа Guardant</a>. Александр (Rouse_) Багель </li> <li><a href="http://habrahabr.ru/post/178393/">Реализация перехвата вызовов API</a>. Александр (Rouse_) Багель </li> <li><a href="http://habrahabr.ru/post/181157/">Правильное применение сплайсинга при перехвате функций подготовленных к HotPatch</a>. Александр (Rouse_) Багель </li> <li><a href="http://habrahabr.ru/post/202242/">Карта памяти процесса</a>. Александр (Rouse_) Багель </li> <li><a href="http://roman.yankovsky.me/?p=942">Дженерики: ограничение «constructor»</a>. Роман Янковский.</li> <li><a href="http://roman.yankovsky.me/?p=896">Разработка «стандартных» TAction</a>. Роман Янковский.</li> <li><a href="http://roman.yankovsky.me/?p=740">TInvokeableVariantType</a>. Роман Янковский.</li> </ul> <h5>Константин Шпилько об enumerators:</h5> <ul> <li><a href="http://delphiway.ru/enumerators-%d0%b2-delphi-%d1%87%d0%b0%d1%81%d1%82%d1%8c-1/">Enumerators в Delphi. Часть 1</a>. Цикл for-in. </li> <li><a href="http://delphiway.ru/enumerators-%d0%b2-delphi-%d1%87%d0%b0%d1%81%d1%82%d1%8c-2/">Enumerators в Delphi. Часть 2</a>. Получение и использование перечислителя без for-in. </li> <li><a href="http://delphiway.ru/enumerators-%d0%b2-delphi-%d1%87%d0%b0%d1%81%d1%82%d1%8c-3/">Enumerators в Delphi. Часть 3</a>. Enumerators и class helper. </li> </ul> <h5>Переводы от Александра Алексеева.</h5> <ul> <li><a name="6075779989360404226"></a><a href="http://www.transl-gunsmoker.ru/2013/01/BOOL-VARIANTBOOL-BOOLEAN-bool.html">BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool. Это перевод </a><a href="http://blogs.msdn.com/b/oldnewthing/archive/2004/12/22/329884.aspx">BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool</a>. Автор: Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2013/03/why-does-explorer-use-term-KB-instead-KiB.html">Почему Проводник показывает сокращение KB вместо KiB? Это перевод </a><a href="http://blogs.msdn.com/b/oldnewthing/archive/2009/06/11/9725386.aspx">Why does Explorer use the term KB instead of KiB?</a> Автор: Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2013/03/remarks-VirtualAlloc-MEMLARGEPAGES.html">Заметки о VirtualAlloc с MEM_LARGE_PAGES. Это перевод </a><a href="http://blogs.msdn.com/b/oldnewthing/archive/2011/01/28/10121300.aspx">Some remarks on VirtualAlloc and MEM_LARGE_PAGES</a>. Автор: Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2013/10/help-me-optimize-this-code-which-enumerates-all-possible-GUIDs.html">Помогите с оптимизацией кода перечисления всех возможных GUID</a>. Это перевод <a href="http://blogs.msdn.com/b/oldnewthing/archive/2013/10/29/10461148.aspx">Help me optimize this code which enumerates all possible GUIDs</a>. Автор: Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2013/11/launch-unelevated-process-from-elevated-process-and-vice-versa.html">Как мне запустить ограниченный процесс из моего повышенного процесса и наоборот? Это перевод </a><a href="http://blogs.msdn.com/b/oldnewthing/archive/2013/11/18/10468726.aspx">How can I launch an unelevated process from my elevated process and vice versa?</a> Автор: Реймонд Чен. </li> </ul> <h4><a title="Ссылка на раздел Переводы справочной системы Delphi" href="#help">#</a> <a name="help">Переводы справочной системы Delphi</a></h4> <ul> <li><a href="http://pascal-study.blogspot.ru/2013/04/blog-post.html">Библиотеки и пакеты</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Libraries_and_Packages">Libraries and Packages (Delphi)</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/04/blog-post_4117.html">Пакеты</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Packages">Packages (Delphi)</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/04/blog-post_12.html">Разработка динамически загружаемых библиотек</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Writing_Dynamically_Loaded_Libraries">Writing Dynamically Loaded Libraries</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/03/blog-post.html">Ввод/вывод. Стандартные подпрограммы</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Standard_Routines_and_Input-Output">Standard Routines and Input-Output</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/08/blog-post_4590.html">Объекты автоматизации</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Automation_Objects_(Win32_Only)">Automation Objects (Win32 Only)</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/08/blog-post_8385.html">Обращение к интерфейсам</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Interface_References">Interface References</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/08/blog-post_30.html">Реализация интерфейсов</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Implementing_Interfaces">Implementing Interfaces</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/08/blog-post.html">Интерфейсы объектов</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Object_Interfaces">Object Interfaces (Delphi)</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2013/04/blog-post_9984.html">Кросс-платформенные библиотеки</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/XE3/en/Cross-Platform_Shared_Libraries">Cross-Platform Shared Libraries</a> из справочной системы Delphi </li> </ul> <h4><a title="Ссылка на раздел Задачки на понимание" href="#quiz">#</a> <a name="quiz">Задачки на понимание</a></h4> <ul> <li><a href="http://alexander-bagel.blogspot.com/2013/12/2.html">Задачка на понимание №2</a>. Это уже достаточно старая задача, лет семь (если не отказала память) живет в моих тестах на профпригодность, выдаваемых кандидатам при собеседовании. И ответ на задачку. <a href="http://alexander-bagel.blogspot.com/2013/12/2_23.html">Ответ на задачку №2, часть первая</a>. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2013/12/1.html">Задачка на понимание №1</a>. <a name="7893840830380744420"></a><a href="http://alexander-bagel.blogspot.com/2013/12/1_19.html">Ответ на задачу №1</a>. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://www.gunsmoker.ru/2013/12/hell.html">Страшный ужас. Александр Алексеев</a> </li> <li><a href="http://www.gunsmoker.ru/2013/09/task-17.html">Задачка №17. Александр Алексеев</a> </li> </ul> <h3><a title="Ссылка на раздел Библиотеки и компоненты" href="#libraries">#</a> <a name="libraries">Библиотеки и компоненты</a></h3> <ul> <li><a href="http://habrahabr.ru/post/189808/">jqGrid для Raudus</a>. Андрей Севериненко. </li> <li><a href="http://habrahabr.ru/post/170909/">Использование OpenCV в Delphi</a>. Habrahabr. Sleuthhound. </li> <li><a href="http://alexander-bagel.blogspot.com/2013/04/lua.html">Использование Lua скриптов в составе ПО</a>. Александр (Rouse_) Багель </li> <li><a href="http://www.tdelphiblog.com/2013/03/dependency-injection-i-delphi-spring-9.html">Головокружительные возможности DI и Delphi Spring: </a><a href="http://www.tdelphiblog.com/2013/03/dependency-injection-i-delphi-spring-9.html">Часть 9. Один интерфейс – несколько реализаций.</a> (перевод): Алексей Тимохин. </li> <li><a href="http://teran.karelia.pro/articles/item_5845.html">Первое использование VirtualTreeView (TVirtualStringTree)</a>. Андрей Терехов </li> <li><a href="http://www.webdelphi.ru/2013/06/obzor-5-reshenij-dlya-sozdaniya-i-raboty-s-pdf-v-delphi/">Обзор: 5 решений для создания и работы с PDF в Delphi.</a> Владислав Баженов. </li> </ul> <h5>TChart</h5> <ul> <li><a href="http://keeper89.blogspot.com/2013/01/tchart.html">Штриховка в TChart. Андрей Терехов.</a> </li> <li><a href="http://teran.karelia.pro/articles/item_5887.html">Сглаженные кривые в TeeChart</a>. Андрей Терехов </li> </ul> <h5>SynapseLib</h5> <ul> <li><a href="http://www.webdelphi.ru/2013/03/rabota-s-smtp-v-synapse/">Работа с SMTP в Synapse.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/12/kniga-o-synapse-glava-0-sokety/">Книга о Synapse. Глава 0 «Сокеты».</a> Владислав Баженов. </li> </ul> <h5>TMS Cloud Pack 2</h5> <ul> <li><a href="http://www.webdelphi.ru/2013/06/obzor-komponentov-tms-cloud-pack-2-0-0-0-1-komponent-dlya-raboty-s-google-calendar/">Обзор компонентов TMS Cloud Pack 2.0.0.0 #1: компонент для работы с Google Calendar.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/06/obzor-komponentov-tms-cloud-pack-2-0-0-0-2-komponent-dlya-raboty-s-dropbox/">Обзор компонентов TMS Cloud Pack 2.0.0.0 #2: компонент для работы с Dropbox.</a> Владислав Баженов. </li> </ul> <h5>Datasnap</h5> <ul> <li><a href="http://teran.karelia.pro/articles/item_6113.html">Знакомство с DataSnap</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_6106.html">Ссылки по DataSnap</a>. Андрей Терехов </li> <li><a href="http://habrahabr.ru/post/202688/">Пример использования DataSnap Callback: запрос данных от пользователя во время вызова серверного метода</a> </li> </ul> <h5>Fast Report</h5> <ul> <li><a href="http://www.fast-report.com/ru/blog/46/show/">Установка FastReport 4 для Lazarus</a>. <a href="http://www.fast-report.com/ru/blog/?author=den26481">Den Zubov</a> </li> <li><a href="http://www.fast-report.com/ru/blog/52/show/">Отправить отчёт по протоколу MAPI из программ на Паскале</a>. <a href="http://www.fast-report.com/ru/blog/?author=alman">Aleksey Mandrykin</a> </li> </ul> <h5>TChromium</h5> <ul> <li><a href="http://parsing-and-i.blogspot.com/2013/01/tchromium-cookies-in-delphi.html">Компонент TChromium: начало работы, установка. Маша</a> </li> <li><a href="http://parsing-and-i.blogspot.com/2013/02/tchromium-how-to-fill-and-submit-form.html">TChromium: заполнение и сабмит формы. </a><a href="http://parsing-and-i.blogspot.com/2013/01/tchromium-cookies-in-delphi.html">Маша</a> </li> <li><a href="http://parsing-and-i.blogspot.com/2013/02/how-to-clear-cookies-in-TChromium.html">Как удалить кукисы (cookies) в TChromium. </a><a href="http://parsing-and-i.blogspot.com/2013/01/tchromium-cookies-in-delphi.html">Маша</a> </li> <li><a href="http://delphiway.ru/chromium-%d0%b8-%d0%bf%d1%80%d0%be%d0%ba%d1%81%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/">Chromium и прокси-сервер</a>. Константин Шпилько. </li> </ul> <h5>SQLite</h5> <ul> <li><a href="http://parsing-and-i.blogspot.com/2013/01/sqlite-delphi-7-disqlite.html">SQLite и Delphi 7: работа с БД с помощью DISQLite. </a><a href="http://parsing-and-i.blogspot.com/2013/01/tchromium-cookies-in-delphi.html">Маша</a> </li> <li><a href="http://www.webdelphi.ru/2013/07/sqlite-v-delphi-obzor-litedac/">SQLite в Delphi. Обзор LiteDAC.</a> Владислав Баженов. </li> <li><a href="http://delphiway.ru/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-sqlite-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-zeoslib/">Работа с SQLite через ZeosLib.</a> Константин Шпилько </li> </ul> <h5>DevExpress</h5> <ul> <li>Сборник советов от X11 продолжает пополняться рецептами в этом году. Delphi, DevExpress, примеры, решения. <a href="http://www.sql.ru/blogs/x11/">http://www.sql.ru/blogs/x11/</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2013/02/ribbon-devexpress.html">Нюансы использования Ribbon от DevExpress</a>. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://www.webdelphi.ru/2013/02/devexpress-i-google-calendar-0-vvedenie/">DevExpress и Google Calendar #0. Введение.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/02/devexpress-i-google-calendar-1-vvedenie-v-expressscheduler/">DevExpress и Google Calendar #1. Введение в ExpressScheduler.</a> Владислав Баженов. </li> </ul> <h5>Yacc & Lex</h5> <ul> <li><a href="http://roman.yankovsky.me/?p=467">LISPообразное нечто. Роман Янковский. - пишем интерпретатор простого языка</a></li> <li><a href="http://roman.yankovsky.me/?p=577">Next Delphi Yacc & Lex</a>. Роман Янковский. - попытка реанимации проекта</li> <li><a href="http://roman.yankovsky.me/?p=796">Delphi и предметно-ориентированные языки</a> (DSL). Роман Янковский. Пример использования Yacc и Lex</li> </ul> <h4><a title="Ссылка на раздел Авторские библиотеки" href="#author">#</a> <a name="author">Авторские библиотеки</a></h4> <ul> <li><a href="http://www.webdelphi.ru/2013/05/testirovanie-zaprosov-k-api-google-sredstvami-delphi-komponent-oauthclient-dlya-delphi-xe-xe3/">Тестирование запросов к API Google средствами Delphi. Компонент OAuthClient для Delphi XE — XE3</a>. Владислав Баженов.</li> <li><a href="http://keeper89.blogspot.com/2013/08/numerics-delphi-fpc.html">Numerics для Delphi & FPC (работа с большими числами). </a><a href="http://keeper89.blogspot.com/2013/07/os-x.html">Юрий Петров</a>  </li> <li><a href="http://roman.yankovsky.me/?p=1100">Awaitable-значения в Delphi</a>. Роман Янковский. </li> <li><a href="http://roman.yankovsky.me/?p=1258">Анонс DelphiSpec</a>. Роман Янковский. </li> <li><a href="http://roman.yankovsky.me/?p=1355">DelphiSpec неделю спустя</a>. Роман Янковский.</li> <li> <table border="0" cellspacing="0" cellpadding="0"><tbody> <tr> <td><a href="http://delphikingdom.ru/asp/viewitem.asp?catalogid=1446">Ассоциативный хеш для построения групп</a> - <a href="http://delphikingdom.ru/asp/users.asp?ID=3478">Ирина Кудряшова</a></td> </tr> </tbody></table> </li> </ul> <h4><a title="Ссылка на раздел Windows Ribbon Framework" href="#ribbon">#</a> <a name="ribbon">Windows Ribbon Framework</a></h4> <p>Переводы статей Эрика ван Билсена об использовании Windows Ribbon Framework в Delphi. Переводил <a href="http://anotherblogaboutdelphi.blogspot.com/">Виталий Пелехатый </a>.</p> <ul> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windowsribbonframeworkfordelphi.html">Windows Ribbon Framework</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windows-ribbon-framework.html">Windows Ribbon Framework. Руководство</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windows-ribbon-framework-ribbon-designer.html">Windows Ribbon Framework. Проектирование "ленты" с помощью Ribbon Designer</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windows-ribbon-framework_24.html">Windows Ribbon Framework. Команды</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windows-ribbon-framework_25.html">Windows Ribbon Framework. Представления</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windows-ribbon-framework_4677.html">Windows Ribbon Framework. Вкладки</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windows-ribbon-framework_26.html">Windows Ribbon Framework. Контекстные окна</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/07/windows-ribbon-framework_31.html">Windows Ribbon Framework. Другие возможности "ленты"</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/08/windows-ribbon-framework.html">Windows Ribbon Framework. Масштабирование</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/08/windows-ribbon-framework-delphi.html">Windows Ribbon Framework. Интеграция с Delphi</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/08/windows-ribbon-framework_5.html">Windows Ribbon Framework. Выполнение команд</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/08/windows-ribbon-framework_9246.html">Windows Ribbon Framework. Другие типы команд</a> </li> <li><a href="http://anotherblogaboutdelphi.blogspot.com/2013/08/windows-ribbon-framework_6.html">Windows Ribbon Framework. Работа с галереями</a> </li> </ul> <h3><a title="Ссылка на раздел Инструменты" href="#tools">#</a> <a name="tools">Инструменты</a></h3> <ul> <li><a href="http://www.tdelphiblog.com/2013/09/lazy-delphi-builder197251xe5.html">Lazy Delphi Builder 1.9.7.251. 15-сен-2013 для XE5.</a> Алексей Тимохин. </li> <li><a href="http://deeptown12.blogspot.com/2013/10/shell-delphi-lazarus.html">Полезняшки. Shell-расширения для файлов Delphi и Lazarus</a>. Дмитрий Кузан </li> <li><a href="http://delphiway.ru/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8-tortoisesvn/">Полезные функции TortoiseSVN</a>. Константин Шпилько </li> <li><a href="http://delphiway.ru/commit-monitor-%d0%be%d1%82%d1%81%d0%bb%d0%b5%d0%b6%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%ba%d0%be%d0%bc%d0%bc%d0%b8%d1%82%d0%be%d0%b2-%d0%b2-svn/">Commit Monitor — отслеживание коммитов в SVN</a>. Константин Шпилько </li> <li><a href="http://delphikingdom.ru/asp/viewitem.asp?catalogid=1447">СтройКод — быстрое программирование под Delphi без знания паскаля</a> <a href="http://delphikingdom.ru/asp/users.asp?ID=25222">Илья Кислицын</a> </li> </ul> <h5>Проект "Локализатор исходного кода". Автор: <a href="https://plus.google.com/103029391702241740789">Ilya Barilo</a>.</h5> <ul> <li><a href="http://sourcelocalizer.blogspot.com/2013/03/blog-post.html">Причины создания программы "Локализатор исходного кода"</a> </li> <li><a href="http://sourcelocalizer.blogspot.com/2013/04/blog-post.html">Проверка орфографии в исходном коде проекта</a> </li> </ul> <h3><a title="Ссылка на раздел Полезные и не очень советы" href="#tips">#</a> <a name="tips">Полезные и не очень советы</a></h3> <ul> <li><a href="http://blogs.embarcadero.com/nikolay/2013/11/25/scopedenumeration/">Изящный рефакторинг перечисляемых типов</a>. Nikolay (Embarcadero) </li> <li><a href="http://delphiway.ru/%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%be%d0%bc%d0%b5%d1%80%d0%b0-%d1%84%d0%b8/">Автоматическое добавление в приложение номера фиксации SVN во время сборки</a>. Константин Шпилько </li> <li><a href="http://alexander-bagel.blogspot.com/2013/06/windows.html">Сортировка списка по аналогу "Проводника Windows"</a>. Александр (Rouse_) Багель </li> <li><a href="http://www.delphinotes.ru/2013/10/delphi_29.html">Полезняшки. С чего мы начинаем приложение в Delphi</a>. Николай Зверев </li> <li><a href="http://www.delphinotes.ru/2013/10/blog-post_23.html">Полезняшки. Ссылки на модули, “помогающие” нашему приложению, выносим в отдельный модуль</a>. Николай Зверев </li> <li><a href="http://www.delphinotes.ru/2013/10/focuscontrol-tlabel.html">Полезняшки. Переход к FocusControl при клике на TLabel</a>. Николай Зверев </li> <li><a href="http://www.delphinotes.ru/2013/11/delphi.html">Шаблоны в Delphi (но не дженерики)</a>. Николай Зверев. </li> <li><a href="http://www.delphinotes.ru/2013/10/blog-post.html">Мысли по поводу локализации строк и кодогенерации</a>. Николай Зверев. </li> <li><a href="http://www.delphinotes.ru/2013/11/utf8.html">Полезняшки. Ограничение ввода пользователя в UTF8</a>. Николай Зверев. </li> <li><a href="http://delphiway.ru/%d0%be%d1%82%d0%bb%d0%b0%d0%b4%d0%ba%d0%b0-%d1%8d%d0%ba%d1%81%d0%bf%d0%b5%d1%80%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-delphi-%d0%bd%d0%b0-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d0%b5-gexpert/">Отладка эксперта для Delphi на примере GExpert</a>. Константин Шпилько </li> <li><a href="http://www.tdelphiblog.com/2013/11/blog-post.html">Добавление ресурсов в программу</a> с помощью RC файлов. Алексей Тимохин. </li> <li><a href="http://www.tdelphiblog.com/2013/12/delphi.html">Delphi. Как указать папку "по умолчанию" для новых проектов.</a> Алексей Тимохин. </li> <li><a href="http://sourcelocalizer.blogspot.com/2013/03/dfm-delphi.html">Решение проблем с кириллицей в dfm-файлах Delphi</a>. <a href="https://plus.google.com/103029391702241740789">Ilya Barilo</a>. </li> <li><a href="http://www.delphinotes.ru/2013/06/blog-post.html">Вот и мы перешли на Юникод</a>. Николай Зверев. </li> <li><a href="http://habrahabr.ru/post/184732/">Пишем ORM для Delphi</a>. Ерофеев Артем. </li> <li><a href="http://habrahabr.ru/post/191170/">Fluent interface и Delphi</a>. Илья VLT. </li> <li><a href="http://www.webdelphi.ru/2013/02/cvetovaya-model-ryb-ili-uchimsya-smeshivat-kraski-v-delphi/">Цветовая модель RYB или учимся смешивать краски в Delphi.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2013/01/stringtable-i-rabota-s-identifikatorami-yazykov-v-delphi/">STRINGTABLE и работа с идентификаторами языков в Delphi.</a> Владислав Баженов. </li> <li><a href="http://delphiway.ru/%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d1%82%d0%b5%d1%81%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2-lazarus/">Введение в модульное тестирование в Lazarus</a>. Константин Шпилько </li> <li><a href="http://habrahabr.ru/post/178257/">Паскаль, Дельфи и Оберон сегодня</a>. Zorko </li> </ul> <h5>Базовые формы и фреймы. Николай Зверев.</h5> <ul> <li><a href="http://www.delphinotes.ru/2013/01/delphi.html">А Вы ещё не используете базовую форму и базовую фрейму в своих Delphi-проектах?</a>. Николай Зверев </li> <li><a href="http://www.delphinotes.ru/2013/01/blog-post.html">Создание базовой формы</a>. Николай Зверев </li> <li><a href="http://www.delphinotes.ru/2013/01/blog-post_30.html">Наполняем базовую форму полезным кодом</a>. Николай Зверев </li> <li><a href="http://www.delphinotes.ru/2013/03/form-events.html">Form Events, события формы для работы с пользовательскими данными</a>. Николай Зверев. </li> <li><a href="http://www.delphinotes.ru/2013/06/vcl-form-and-frame-scale-fix.html">VCL Form and Frame Scale Fix</a>. Николай Зверев. </li> </ul> <h3><a title="Ссылка на раздел Управление лицензиями RAD Studio" href="#license">#</a> <a name="license">Управление лицензиями RAD Studio</a></h3> <ul> <li><a href="http://habrahabr.ru/post/194028/">Болт с обратной резьбой для .slip-ого Embarcadero RAD Studuo XE</a>. Владимир Литвиненко. Совет, как не превысить число допустимых лицензий на одну зарегистрированную копию Embarcsdero RAD Studio XE. Возможно, будет полезно к прочтению системным администраторам и руководителям проектов, ... </li> </ul> <h5>Установка RAD Studio с «сетевыми» лицензиями. Андрей Совцов (Embracadero):</h5> <ul> <li><a href="http://blogs.embarcadero.com/asovtsov/index.php/archives/311">Приручаем «облака»: установка RAD Studio с «сетевыми» лицензиями (часть первая)</a> - что такое AppWare </li> <li><a href="http://blogs.embarcadero.com/asovtsov/index.php/archives/327">Приручаем «облака»: установка RAD Studio с «сетевыми» лицензиями (часть вторая)</a>. Подробнее об Appware. </li> <li><a href="http://blogs.embarcadero.com/asovtsov/index.php/archives/360">Приручаем «облака»: установка RAD Studio с «сетевыми» лицензиями (часть третья)</a>. Appware: загрузка лицензий и управление пользователями. </li> <li><a href="http://blogs.embarcadero.com/asovtsov/index.php/archives/386">Приручаем «облака»: установка RAD Studio с «сетевыми» лицензиями (часть четвертая)</a> </li> <li><a href="http://blogs.embarcadero.com/asovtsov/index.php/archives/421">Итоги по теме - Приручаем «облака»: установка RAD Studio с «сетевыми» лицензиями</a> </li> </ul> <h3><a title="Ссылка на раздел Вебинары" href="#webinars">#</a> <a name="webinars">Вебинары</a></h3> <ul> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/07/01/firstiosappdelphi/">Эффективный проект для iOS в Delphi, запись вебинара</a>. <a href="http://youtu.be/QhvbepVE-2o">Вебинар</a> поможет вам определиться с первым проектом приложения для iOS с помощью <a href="https://www.embarcadero.com/ru/products/delphi">Delphi XE4</a>. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/04/02/brovin_delphi_for_ios/">Вебинар Delphi for iOS с Ярославом Бровиным (запись)</a> </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/02/05/firemonkey20_componentdevelopment_brovin_2/">Вебинар с Ярослвавом Бровиным, разработчиком FireMonkey 2.0, 2-я серия (запись)</a> </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/02/18/design_process_fastrepor/">Технология FastReport, как создается и развивается</a>. Вебинар с Михаилом Филиппенко. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/11/15/fr5_preview_webinar_record/">FastReport 5, предварительный обзор с Денисом Зубовым (запись вебинара)</a> </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/02/18/anydac/">Дизайн и эволюция AnyDAC (FireDAC) с Дмитрием Арефьевым</a> </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/12/17/firedac_localsql/">FireDAC LocalSQL с Дмитрием Арефьевым (запись вебинара)</a> </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/12/24/mobilegraphicsxe5/">Графика в мобильных проектах (запись вебинара)</a>. Запись вебинара доступна по <a href="http://youtu.be/QkB48ctPx-s">ссылке</a>. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/12/03/andrey_karpov_3_rec/">Необычные приёмы в C++, запись вебинара</a>. <a href="http://youtu.be/Epd4-NYZ_OA">Запись</a> вебинара доступна. Рекомендуется в категории "расширитель кругозора". </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/03/18/cpp64bit_webinar_recorded/">64-бит в C++Builder (и не только), запись вебинара</a>. <a href="http://youtu.be/trS6zbAPL-k">Запись вебинара</a>, посвященного поддержки 64-бит в C++Builder. Полезна и для пользователей Delphi. </li> </ul> <h3><a title="Ссылка на раздел Интервью" href="#interviews">#</a> <a name="interviews">Интервью</a></h3> <ul> <li><a href="http://www.cnews.ru/reviews/?2013/04/04/524834">О планах Embarcadero - Интрвью с главой представительства Embarcadero в России, Кириллом Ранневым</a>. (cnews) </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/09/30/roman_yankovsky_mvp/">Интервью с Романом Янковским</a>. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/10/04/firstmegabytesxe5/">Первые мегабайты мобильных приложений</a>. Интервью с Валентиной Гусевой. Впечатления от использоваия Delphi для разработки для мобильных устройств. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2013/08/02/whyumlru/">Зачем UML</a>. Интервью с разработчиками компании "Гарант" </li> <li><a href="http://habrahabr.ru/post/205974/">Altium Designer: самое большое приложение (about 15 000 000 codelines), сделанное в Delphi</a> </li> <li><a href="http://habrahabr.ru/company/delphi/blog/205656/">Реальное мобильное приложение в Delphi для систем наблюдения</a> - интервью с Digifort  - техническое интервьб с Eric Flemming Bonilha, разработчиком мобильного пульта для систем видеонаблюдения. </li> </ul> <h3><a title="Ссылка на раздел Поток сознания Александра Люлина" href="#lulin">#</a> <a name="lulin">Поток сознания Александра Люлина</a></h3> <ul> <li><a href="http://programmingmindstream.blogspot.ru/2013/11/tdd.html">Что я хотел сказать о TDD, но всё как-то недосуг. "Дорога в тысячу ли начинается с одного шага"</a> </li> <li><a href="http://programmingmindstream.blogspot.ru/2013/12/dependency-injection.html">Коллега написал. Пример Dependency Injection</a> </li> <li><a href="http://programmingmindstream.blogspot.ru/2013/12/gui.html">Коллега тут написал про ВЫСОКОУРОВНЕВЫЕ (GUI) тесты</a> </li> <li><a href="http://programmingmindstream.blogspot.ru/2013/11/blog-post.html">Заметки о тестировании</a> </li> <li><a href="http://programmingmindstream.blogspot.ru/2013/11/2.html">Заметки о тестировании №2</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/03/blog-post.html">Первые шаги с dUnit. Воспоминания.</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/03/tdd-c.html">О TDD И "гигиене мозга" (C)</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/03/generic-generic.html">Generic'и без Generic'ов.... На include-ах.</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/03/blog-post_29.html">О шаблонах и примесях</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/03/blog-post_54.html">Шаблоны и тесты DUnit</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/03/dunit_9770.html">Шаблоны и тесты DUnit. Одной примесью.</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/03/blog-post_4606.html">Реализация подсчёта ссылок</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/04/blog-post.html">О ТЗ, цейтноте и "позабывании"</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/04/blog-post_7689.html">Исправление ошибок методом последовательных приближений (или методом "научного тыканья")</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/04/iunknown.html">Собственная реализация IUnknown и подсчёт ссылок. И примеси</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/11/5.html">В думах о тестировании №5</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/11/gui-back-to-basics_22.html">GUI-тестирование "по-русски". Back to the basics. Пример нажатия на кнопку формы из скрипта</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/11/gui-25-tscriptcontext.html">GUI-Тестирование "по-русски". Как всё устроено №2.5. Про TscriptContext</a> </li> <li><a href="http://18delphi.blogspot.ru/2013/11/gui.html">Коротко. О GUI-тестировании "по-русски"</a> </li> </ul> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com4tag:blogger.com,1999:blog-1724180200433302177.post-5433596755781235672013-12-29T11:20:00.001+02:002013-12-29T11:21:13.123+02:00Delphi XE5: впечатления от разработки под Android<p>Отправил свою программу на конкурс. Саму программу показывать пока не хочу. А хочу поделиться своими впечатлениями от использования Delphi XE5 и Firemonkey.</p> <p> </p> <h3>Сразу оговорюсь</h3> <ul> <li>Это мой первый проект на Firemonkey и первый опыт разработки для Android.</li> <li>Я использовал Delphi XE5 + Update 1 + все хотфиксы для Update 1.</li> <li>Тестировал только на телефоне <a href="http://www.gsmarena.com/gigabyte_gsmart_aku_a1-5610.php">GSmart Aku A1</a> (480 x 854 pixels, 4.5 inches (~218 ppi). Эмуляторы не использовал.</li> <li>Часто компилировал и запускал на Win32 в режиме <a href="http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Preview">Mobile Preview</a> (об этом ниже).</li> <li>В этом проекте решил опробовать подход "как-мне-кажется-это-делают-в-java", когда и для каждого класса создавал отдельный .pas файл. В результате получилась куча юнитов и чтобы в них не запутаться пришлось раскидать их по папкам и пространствам имён. Получилось в принципе удобно. <font color="#666666">Хотя есть у меня подозрение, что сборка проекта под Android из-за этого работал медленнее, чем в случае, если бы весь код был запихан в один .pas файл.</font></li> </ul> <h3>Грабли</h3> <h5>Deployment manager и папки</h5> <p><a href="http://docwiki.embarcadero.com/RADStudio/XE5/en/Deployment_Manager">Deployment manager</a> и папки. С этим тоже пришлось повозиться прежде чем удалось понять какие надо указывать пути в Deployment manager и как потом найти эти файлы в программе. Пришлось провести небольшое исследование. О нём напишу позже, в отдельном посте. Вот только так и не понял, как же из приложения определить путь до корня SdCard. Также не понравился UI в Deployment manager-e. Редактирование пары десятков файлов сделано не очень удобно, хотя к слову сказать просто добавить пачку файлов довольно легко. </p> <p>Сразу уточню, что я хотел недокументированного. Искал легкий способ добавления/редактирования файлов в Deployment manager из консоли. Не получилось, так файлы добавленные через Deployment manager поначалу сохраняются в .dproj файле, хотя в папке проекта и присутствует отдельный файл .deployproj. И я так и не понял в какой момент файлы переносятся из .dproj в .deployproj файл. Вот кстати наткнулся на пост о похожем исследовании от <a href="http://alhymov.blogspot.com/2013/12/deployfolder.html">Павла Алхимова “DeployFolder - Развёртывание мобильного подкаталога</a>”.</p> <a name='more'></a> <h5>TLang</h5> <p>Я писал все тексты на английском, решив позднее воспользоваться TLang для перевода на русский.</p> <p><i>Ох уж этот TLang</i>. Поначалу он находил только ресурсы с главной формы. Позже согласился собрать ресурсы из всех открытых в IDE форм. При этом упорно <a href="http://qc.embarcadero.com/wc/qcmain.aspx?d=121396" target="_blank">игнорировал ресурсы указанные в ListBoxItem.ItemData.Detail</a>. Потом выяснилось что редактор переводов TLang умеет и любит перемешивать переводы некоторых слов. Особенно, если дело касается слов для которых перевод не указан. Я так и отправил на конкурс работу в которой слово Home было переведено как Сова (не уследил). Еще добавление TLang в проект, вызывало стабильные загадочные AV в программе запущенной под Win32 при открытии формы с TabControl (лечится выключением у таб-ов свойства Autotrnslate) – но это кажется было исправлено в Update 2.</p> <h5>Запись звука</h5> <p><a href="http://docwiki.embarcadero.com/RADStudio/XE5/en/Audio_Recording" target="_blank">По умолчанию</a> (при использовании TAudioCaptureDevice) на Android платформе Delphi записывает звук в качестве ARM 8kbps <font color="#666666">(и судя по упоминаниям в интернете это кстати единственный работающий кодек для записи звука в эмуляторе)</font>. </p> <p>И при использовании TAudioCaptureDevice нет никакого способа указать другой кодек или битрейт. К счастью, в исходниках присутствует класс <a href="http://developer.android.com/reference/android/media/MediaRecorder.html" target="_blank">JMediaRecorder</a> который это умеет. Тут правда, тоже пришлось немного повозиться прежде чем удалось подобрать работающие (на моём устройстве) значения дающие звук хорошего качества. Об этом позже расскажу отдельно.</p> <h5>Мультитач</h5> <p>Пичалька. <strike>Его нет.</strike> Точнее, я его не нашёл. Удалось найти только в виде ограниченного числа жестов. Впрочем, судя по исходникам реализации интерактивных жестов (FMX.Android.*), основа для мультитача реализована, и вероятно его как-то можно вытащить наружу.</p> <h5>Жесты</h5> <p>Насколько я понял, обработчик событий для жестов срабатывает только по окончании жеста. Включить свою анимацию в момент выполнения жеста Swipe Left/Right у меня не получилось. Но пока не теряю надежды.</p> <h5>IDE</h5> <p>Очень не хватало в дизайнере поддержки горячих клавиш Ctrl/Shift+стрелки. В Update 2 эта недоработка исправлена.</p> <p>Редакторы свойств по сравнению с VCL мне показались неудобными. Хотя, возможно я слишком привык пользоваться расширенными редакторами которые устанавливаются вместе с CnWizards.</p> <p>Жаль что линковка и deploy не умеют работать в фоне. Точнее я не нашёл как это сделать.</p> <p>19" монитора становится маловато для удобной работы.</p> <h5>CnWizards</h5> <p>Из-за <a title="Описание CnWizards: оглавление" href="/p/experts.html#cnWizards" target="_blank">CnWizards</a>, F2 не работает в Project Manager.</p> <p>Автодополнение текста в <a title="Описание Code Input Helper" href="/2010/06/cnwizards-4-3-code-input-helper.html" target="_blank">Code Input Helper</a> некорректно обрабатывает модули содержащие в названии точку (т.е. все в моём проекте). </p> <h5>Фреймы, формы и стили</h5> <p>Вдохновившись работой Николая Зверева решил заюзать в проекте фреймы. И тут же напоролся на то, что список стилей (свойство StyleLookup) для контролов на фреймах и на FMX mobile формах отличается. <a href="http://qc.embarcadero.com/wc/qcmain.aspx?d=121397" target="_blank">Зарегистрировал баг в QC</a>.</p> <p>А вот использование форм не понравилось, ибо я так и не нашёл способа при открытии сделать анимированный слайд при открытии другой формы.</p> <h5>Работа со стилями</h5> <p>Я постоянно запускал FMX Mobile проект на Win32 и меня ужасно раздражал тот факт, что встроенные иконки для SpeedButton-ов игнорируются при запуске на win32, хотя и видны в дизайнере и при запуске на устройстве. В конце концов я полностью переключился на свои иконки. </p> <p>Но честно говоря я поленился разбираться о том как правильно работать со стилями. Возможно есть более правильный способ.</p> <h5>Отладка и занятый порт</h5> <p>Поначалу, при отладке на телефоне немало нервов попортила ошибка "Unable to start gdbserver on port '64311'. Port is already in use". Это известная в интернете проблема у меня проявлялась после сброса (Ctrl+F2) отлаживаемого проекта. Лечится либо перезагрузкой телефона и IDE, либо установкой другого порта: </p> <p>IDE -> Run –> Parameters –> -debugport=54321</p> <p>С другой стороны, благодаря этой проблеме получилось сделать шаг вперёд и чаще думать, вместо привычного подхода debugger driven developement. Кстати отладчик для Android работает непривычно по-другому (Ctrl+F7 например).</p> <h5>Punto Switcher и Delphi XE5</h5> <p><a href="http://punto.yandex.ru/">Punto Switcher</a> и Delphi XE5 отказались дружить на моём компьютере. Когда запущен Punto, то при закрытии моей программы, Delphi всегда вываливался в отладчик с exception-ом. Судя по стеку вызовов, какой-то конфликт с хуками Punto. </p> <p>Вторая беда с Punto - при закрытии проектов в IDE (Close all) и повторном открытии IDE полностью закрывалась. Даже несмотря на добавление Delphi в список исключений Punto и включенную галочку "Не взаимодействовать с программами исключениями". Но стоило полностью выгрузить Punto из памяти - как эти проблемы пропадали. Грешу на некорректную реализацию хуков в Punto Switcher (64-bit).</p> <p> </p> <h3>Понравилось</h3> <p>Подход Firemonkey - любой контрол является контейнером. Можно комбинировать контролы, класть один в другой, а их вместе класть в какой-нибудь элемент списка, использовать отрицательные смещения для получения нестандартного поведения.</p> <p>Record helper-ы для простых типов очень радуют.</p> <p>Delphi наконец перестал удалять IFDEF-ы из .dpr файла при добавлении нового модуля.</p> <p><a href="https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/" target="_blank">Демки</a> и <a href="http://www.embarcadero.com/ru/products/delphi/android-ios-code-samples-xe5" target="_blank">примеры (snippets)</a> очень хорошо показывают как сделать что-то одно. Очень помогли.</p> <p>Анимации и методы типа FloatAnimation очень-очень-очень упрощают жизнь.</p> <p>Action-ы + существенно упрощают жизнь, особенно при работе с жестами. </p> <p>Понравилась работа с камерой. Я опасался, что придётся повозиться с настройками. Совершенно напрасно. Программировать вообще не пришлось. Получить снимок с камеры или из галереи проще простого - для этого есть готовые action-ы.</p> <p>А есть еще Live Bindings, которые я полностью проигнорировал, потому как толком не понимаю как их использовать.</p> <p> </p> <h3>Резюмируя</h3> <p>Общие впечатления очень приятные. Делать программу – очень просто. Даже не верится. </p> <p>Firemonkey выглядит более чем работоспособным. Какие-то шероховатости еще есть, но их существенно меньше чем в предыдущих версиях (впрочем, я конечно не копал глубоко). Мне даже захотелось себе Mac и устройство на iOs, чтобы попробовать себя в разработке для совершенно новой платформы. Хотя, цены на яблочную продукцию поумерили мой пыл.</p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com8tag:blogger.com,1999:blog-1724180200433302177.post-8193929269767893272013-12-16T21:50:00.001+02:002013-12-16T21:50:50.411+02:00Delphi. Как указать папку "по умолчанию" для новых проектов<p>Надоело мне, что Delphi предлагает каждый новый проект сохранить в папке My documents. И задался я вопросом, а как бы эту папку изменить. Оказалось – очень просто. Настолько просто, что даже и рассказывать тут не о чем. Но я всё-таки расскажу так как я (почему-то) долгое время считал, что такой опции просто нет.</p> <p>Главное меню –> Tools –> Options –> Environment Options –> Default Project</p> <p>Или, с помощью IDE insight: <strong>Ctrl+.</strong> ввести <strong>default project</strong> + Enter</p> <p><a href="http://lh6.ggpht.com/-QcPX_hivY4A/Uq9ZleDFNMI/AAAAAAAACM0/SsQ69QXr00I/s1600-h/image6.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://lh3.ggpht.com/-LTy2wIYaKcg/Uq9ZmF4TGlI/AAAAAAAACM4/wnPQZbSIYtA/image_thumb4.png?imgmax=800" width="754" height="623" /></a></p> <p>В Delphi XE-XE5 эти настройки хранятся в реестре:</p> <p>HKEY_CURRENT_USER\Software\Embarcadero\BDS\12.0\Globals\DefaultProjectsDirectory </p> <p>Тип данных: REG_SZ</p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com6tag:blogger.com,1999:blog-1724180200433302177.post-63389348784797088652013-12-13T01:17:00.001+02:002013-12-13T01:17:18.536+02:002. Пишем детскую программку под Android: основа<p>Продолжаем писать <a href="http://www.tdelphiblog.com/2013/10/1-android.html">программку для детей под Android (требования мы сформулировали в первом посте)</a>.</p> <p>Начнём с того, что сделаем совсем простой проект – программку, которая умеет листать картинки при нажатии на кнопку. Картинки запакуем в ресурсы программы.</p> <p>Создаём новый проект: Firemonkey Mobile application –> Blank application</p> <h4>Разрешения</h4> <p>Отключим ненужные permissions. Так как по умолчанию включено слишком много всего.</p> <p>Project –> Options –> Uses permissions. <font color="#a5a5a5">(Или через Help Insight: Ctrl+. –> ввести Permission + Enter, но это как-то странно работает).</font><font color="#000000"> Сверху выберем All configurations Android Platform, так как <strong>список Permissions доступен только для Android платформы</strong>.</font></p> <p><a href="http://lh3.ggpht.com/-BAKuhxSWZQ0/UqpD-gPqjRI/AAAAAAAACMc/NHVUK0F-W8A/s1600-h/image9.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://lh4.ggpht.com/-2xAJNQ480aI/UqpD_EJhAMI/AAAAAAAACMk/Hdd72aY_lqI/image_thumb5.png?imgmax=800" width="759" height="607" /></a></p> <a name='more'></a> <p>Как вы видите на скриншоте жирным false отмечены те настройки, у которых значение отличается от значения по умолчанию (они были включены, и мы их отключили).</p> <p>Из всех разрешений включим только:</p> <ul> <li>Read Phone State – нужен для получения уникального идентификатора устройства </li> <li>Read External Storage – для чтения SdCard </li> <li>Write External Storage – для записи на SdCard </li> </ul> <p>Кстати, пока что нам даже эти разрешения не нужны, но могут пригодиться в дальнейшем.</p> <p>Сохраним проект (Save all) и <a href="https://github.com/tdelphi/dog-said-meow/commit/103e393deaf7732a4ac3b9e924c5ddd31ffc5609" target="_blank">зафиксируем изменения в системе контроля версий</a>.</p> <h4>Добавим ресурсы</h4> <p>В папке с проектом сделаем новую папку resources. Здесь мы будем хранить rc файлы. В папке resources создадим подпапку images – в ней будем хранить картинки.</p> <p>Картинки возьмём с сайта <a href="http://openclipart.org/share" target="_blank">OpenClipArt.org – там лицензия Public Domain</a>. <font color="#a5a5a5">Так как проект у нас учебный и открытый, то поверим им на слово и не будем искать настоящих авторов. (а вот для коммерческой разработки, картинки лучше всего покупать в каком-нибудь проверенном месте).</font></p> <p><font color="#000000">Для начала возьмём с этого сайта 4 картинки</font></p> <ul> <li>lemmling_Cartoon_cat.png </li> <li>lemmling_Cartoon_goat.png </li> <li>lemmling_Cartoon_owl.png </li> <li>lemmling_Cartoon_sheep.png </li> </ul> <p>Добавим в проект новый .RC файл: </p> <ul> <li>Ctrl+. для активации IDE insight </li> <li>ввести Text file + Enter –> появи </li> <li>в открывшемся диалоге: Alt+a, ввести .rc и нажать Enter </li> </ul> <p>Если хотите можете добавлять эти файлы и через диалог Resources and Images.</p> <p>Добавим наши картинки в animals.rc </p> <pre class="brush: delphi;">MyImage_1 RCDATA "resources\\images\\lemmling_Cartoon_cat.png"
MyImage_2 RCDATA "resources\\images\\lemmling_Cartoon_goat.png"
MyImage_3 RCDATA "resources\\images\\lemmling_Cartoon_owl.png"
MyImage_4 RCDATA "resources\\images\\lemmling_Cartoon_sheep.png"</pre>
<p>Теперь <a title="Предыдущий пост "Добавление ресурсов в программу"" href="http://www.tdelphiblog.com/2013/11/blog-post.html" target="_blank">при компиляции проекта файл с ресурсами animals.rc будет автоматически компилироваться</a> в animals.res файл.</p>
<h4>Код</h4>
<p>Для загрузки картинок из ресурсов создадим простенький класс (TImageLoader) .</p>
<pre class="brush: delphi;">type
TImageLoader = class
strict private
const
cMinPictureId = 1;
cMaxPictureId = 4;
var
FCurrentImgIndex: Integer;
public
procedure LoadPic(const aBitmap: TBitmap);
procedure SetNextPic;
procedure SetPrevPic;
end;</pre>
<p>Реализацию можно посмотреть <a href="https://github.com/tdelphi/dog-said-meow/blob/master/dog_said_meow.uImageLoader.pas" target="_blank">на github-е</a>.</p>
<h4>GUI</h4>
<p>Для начала, чтобы упростить сделаем всё на одной форме.</p>
<p>На форму бросаем панель с Align = alClient (так потом будет проще если что добавить другой контрол с другим Align-ом). </p>
<p>На панель кидаем 2 кнопки (TSpeedButton): </p>
<ul>
<li>одну назовём btnPrev с Align alLeft </li>
<li>другую кнопку назовём btnNext и установим выравнивание по правому краю (Align alRight) </li>
</ul>
<p>Кстати, мне так и не удалось добиться того, чтобы <strong>в дизайнере</strong> SpeedButton кнопки растянулись на всю высоту панели, но в runtime они растягиваются как положено.</p>
<p><font color="#a5a5a5">Интересно, почему все tutorial-ы для мобильной разработки рекомендуют использовать именно TSpeedButton вместо TButton, который умеет не только всё то же самое, что и TSpeedButton но больше. Я так толком и не понял. Есть идеи?</font></p>
<p>В обработчиках нажатия кнопок будут вызываться методы TImageLoader SetNextPic, SetPrevPic и LoadPic соответственно.</p>
<h4>Код</h4>
<p>Весь код доступен на github-е: релиз <a href="https://github.com/tdelphi/dog-said-meow/releases/tag/post_2" target="_blank">post_2</a></p>
<p>Страничка проекта: <a href="https://github.com/tdelphi/dog-said-meow">https://github.com/tdelphi/dog-said-meow</a></p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com3tag:blogger.com,1999:blog-1724180200433302177.post-6027992949401049152013-11-23T08:18:00.001+02:002013-11-24T01:16:31.365+02:00Добавление ресурсов в программу<p>В этой публикации я побуду <a href="http://lurkmore.to/%D0%9A%D0%B0%D0%BF%D0%B8%D1%82%D0%B0%D0%BD_%D0%9E%D1%87%D0%B5%D0%B2%D0%B8%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%8C" target="_blank">Капитаном О</a>чевидность и расскажу о паре способах добавления ресурсов в программу.</p> <p><b>Определение: Ресурсы</b> — данные, встроенные в <a href="http://ru.wikipedia.org/wiki/.EXE">EXE</a>, <a href="http://ru.wikipedia.org/wiki/DLL">DLL</a>, <a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B5%D0%BB%D1%8C_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_(Windows)">CPL</a> и (начиная с Windows Vista) <a href="http://ru.wikipedia.org/wiki/MUI_(%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)">MUI</a>-файлы. Доступ к этим данным можно получить через функции <a href="http://ru.wikipedia.org/wiki/Windows_API">Windows API</a>. (из Википедии).</p> <p>В Delphi XE5 аналогичный механизм используется и для хранения ресурсов в Android приложениях. Насчёт iOS приложений я не проверял, но полагаю, что должно работать и там.</p> <p>Вообще, ресурсы в Delphi – это фундамент, на котором строится вся программа. Именно в ресурсы пакуются все ваши DFM файлы (видели же строку “<i>{$R *.DFM}</i>” в .pas файлах форм? <a title="Директива компилятора {$RESOURCE filename}" href="http://docwiki.embarcadero.com/RADStudio/XE5/en/Resource_file_(Delphi)" target="_blank">это оно самое</a>), иконки, курсоры, и строки (resourcestring). Именно благодаря ресурсам работает <a title="Обзор способов локализации - подробная статья Александра Алексеева." href="http://www.gunsmoker.ru/2010/06/delphi-ite-integrated-translation.html" target="_blank">локализация программ с помощью Translation Manager</a>. Всё это происходит автоматически.</p> <p>Также, именно ресурсы рекомендуется использовать для встраивания в программу дополнительных файлов - картинок, аудиофайлов, текстов.</p> <p>Для чтения ресурсов можно использовать класс <a href="http://docwiki.embarcadero.com/Libraries/XE5/en/System.Classes.TResourceStream" target="_blank">TResourceStream</a>. А о том, как добавить ресурсы в программу, мы и поговорим.</p> <p>Начиная с Delphi 2009 в IDE появился диалог, позволяющий добавить ресурсы в проект.</p> <p><img title="Диалог Resources в Delphi XE5" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Диалог Resources в Delphi XE5" src="http://lh4.ggpht.com/-Eje8y01yNzo/UpBIpt7pxgI/AAAAAAAACMM/AK76_BHoNd8/image%25255B1%25255D.png?imgmax=800" width="534" height="246" /></p> <p>Этот диалог даёт возможность включить в проект сразу несколько файлов (проверял в XE5).</p> <p>При сборке проекта, эти файлы компилируются в .res файл. А при линковке (<a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%BE%D0%B2%D1%89%D0%B8%D0%BA" target="_blank">компоновке</a>), встраиваются в программу.</p> <p> </p> <p>Но как же программисты жили раньше? Как добавляли в программы картинки, звуки и большие текстовые файлы?</p> <a name='more'></a> <p>Я уверен, что вы знаете ответ на этот вопрос. А если даже и нет, то способны найти ответ меньше чем за минуту.</p> <p>Ответ скорее всего будет <a href="http://delphi.about.com/od/objectpascalide/a/embed_resources.htm" target="_blank">звучать так</a>:</p> <ol> <li>Создайте текстовый файл с расширением .RC </li> <li>Добавьте туда список ресурсов в формате: resource_name RCDATA “filename” </li> <li>Запустите компилятор ресурсов: brcc32 ваш_файл.rc </li> <li>Добавьте в программу строку: {$R ваш_файл.res} </li> <li>Пересоберите программу </li> <li>Если вам понадобится изменить ваш .rc файл, повторите шаги 2-5. </li> </ol> <p>Но, чтобы не собирать этот файл вручную, можно добавить RC файл прямо в проект.</p> <p>В очень старых версиях Delphi (6,7) файл с ресурсами (RC) было проще создать в блокноте, а потом добавить в проект (Add to project). </p> <p>В современных версиях Delphi, отлично работает способ создания прямо из IDE:</p> <p>File –> New –> Text file –> .rc Resource file</p> <p>Сохраним созданный файл как animals.rc</p> <p>В результате в наш .dpr файл сверху добавится строка </p> <p>{$R 'animals.res' 'animals\animals.rc'} <br /></p> <p>И теперь, при каждой компиляции, пересобираться и файл animals.rc и в программе всегда будет актуальная версия.</p> <p>С уважением, ваш Капитан Очевидность.</p> <h4>Ссылки по теме</h4> <ul> <li><a href="http://ru-delphi.livejournal.com/266721.html" target="_blank">Delphi Application Resources в ru_delphi</a> </li> <li><a href="http://forum.sources.ru/index.php?showtopic=296997" target="_blank">Версия программы из Subversion, установка versioninfo через командную строку, с помощью TortoiseSVN</a> </li> </ul> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com7tag:blogger.com,1999:blog-1724180200433302177.post-86494499341267815662013-10-26T07:57:00.001+03:002013-10-26T07:59:29.478+03:001. Пишем детскую программку под Android: план<p><a href="http://www.embarcadero.com/ru/products/delphi/android-app-development" target="_blank">Delphi для Android</a>. О сколько радостных предвкушений вызывает у меня сочетание этих слов. Я давно хотел сделать что-нибудь под Android. Для начала что-нибудь простенькое, но свое.</p> <p>Дочке сейчас полтора года, и ей очень нравятся телефоны, компьютеры и планшеты. Любая чёрненькая коробочка с кнопочками и лампочками влечёт её почище магнита. Но особое предпочтение доча отдаёт устройствам с тачскрином. “Папа, дай мне пожалуйста свой телефон, я хочу с ним поиграть, а заодно я раскидаю твои иконки так, что не сможешь потом ничего найти, поменяю звонок, переставлю время, запущу тебе кучу разных программ и позвоню парочке случайных знакомых”, хочет она сказать, но произносит только “Алё-алё! На-на-на!”. Ключевое для дочки, конечно, поиграть. Больше всего она любит программки с картинками, которые издают звуки. </p> <p>Её требования к играм очень простые:</p> <blockquote> <p>Там обязательно должна быть коровка которая говорит <em>му-му</em>, собачка которая говорит <em>гав-гав</em>, кошечка говорящая <em>мяу-мяу</em>, уточка с <em>кря-кря</em> и поезд, который говорит <em>туу-туу</em>.</p> </blockquote> <p>У меня требований чуть больше:</p> <ul> <li>там не должно быть змей, говорящих ссссс, страшно рычащих тигров, обезьянок, и других тварей, которые не водятся в нашей местности и в детских книжках</li> <li>программка должна быть проста в использовании: </li> <ul> <li>картинки должны быть большими</li> <li>программа должна чётко понимать, что прикосновение к экрану на 3 сантиметров в стороне от картинки это на самом деле прикосновение к картинке</li> <li>а если на экран нажали ладошкой, то не это никакой не мультитач, а обычное нажатие, и если на экране есть несколько животных издающих звуки, то совершенно излишне заставлять всех животных вопить благим матом, а то родители пугаются</li> <li>крайне желательно, чтобы программка умела блокировать нажатия кнопок home, back и menu (в некоторых детских программах это кстати реализовано). (сенсорные кнопки на телефонах/планшетах – это зло)</li> </ul> <li>Никакой рекламы во время игры, разумеется</li> </ul> <p>Таких программ очень много в Google Play Market-e. Но у всех у них есть какой-нибудь <a href="http://lurkmore.to/%D0%A4%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D0%BA" target="_blank">фатальный недостаток</a>.</p> <<a name='more'></a> <h5>Вопрос:</h5> <p>Насколько просто написать такую программку? А на Delphi XE5? =)</p> <p>Давайте проверим!</p> <h5>Дано:</h5> <ul> <li>Программист – пара (7 точнее) лет программирования на Delphi используя только VCL. Опыт работы с Firemonkey практически отсутствует. Опыт программирования для Android – отсутствует.</li> <li>Delphi XE5</li> </ul> <h5>Получить:</h5> <ul> <li>программку для Android для просмотра картинок с плавной анимацией</li> <li>при нажатии на картинку должен издаваться звук</li> <li>программа должна уметь обрабатывать нажатия аппаратных кнопок</li> </ul> <h5>План:</h5> <ol> <li>Сделать показ картинок</li> <li>Сделать проигрывание звуков</li> <li>Попытаться заблокировать кнопки Home, Back, Menu</li> <li>Найти подходящие картинки (лучше всего серия в одном стиле) и звуки с какой-нибудь разрешающей лицензией (Creative Commons или <a href="http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B4%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5" target="_blank">Public domain</a>) (<font color="#008000"><strong>пришлите пожалуйста ссылки, если кто знает хорошие ресурсы</strong></font>).</li> </ol> <p>Самое сложное во всём этом – 4й пункт.</p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com4tag:blogger.com,1999:blog-1724180200433302177.post-71295329600161498222013-10-20T06:31:00.001+03:002013-10-20T06:48:06.360+03:00Легкий способ проверить Android устройство на совместимость с Delphi XE5.<p>Как узнать будет ли работать программа сделанная в Delphi XE5 на Android устройстве.</p> <p>Начну сразу с простейшего способа. Официальная спецификация – ниже.</p> <ul> <li><a href="#unofficial">Неофициальные способы</a> </li> <ul> <li><a href="#easy">Легкий способ проверить своё устройство</a> </li> <li><a href="#118">Список из 118 проверенных устройств</a> </li> </ul> <li><a href="#official">Официальные способы</a> </li> <ul> <li><a href="#spec">Соответствие спецификации</a> </li> <li><a href="#list">Список проверенных устройств от Embarcadero</a> </li> </ul> </ul> <h3><img title="All-the-Myriad-Androids-Animoca" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="All-the-Myriad-Androids-Animoca" src="http://lh4.ggpht.com/-w_HgvHYL3FQ/UmNSc3gxcYI/AAAAAAAACLE/kEjyupy_UTk/All-the-Myriad-Androids-Animoca%25255B5%25255D.png?imgmax=800" width="484" height="323" /></h3> <h3><a id="unofficial">Неофициальные способы</a></h3> <h4><a id="easy">Легкий способ проверить своё устройство</a></h4> <ol> <li>Надо установить на телефон маленькую программку <a href="https://play.google.com/store/apps/details?id=com.ss.syscheck" target="_blank">SysCheck от Christopher Moeller</a> (не требует никаких прав). </li> <li>Запустить. </li> <li>И посмотреть на первые 3 строчки отчёта. </li> </ol> <p>Там будет указана версия ARM (нужна v7), версия OS (2.3.3-2.3.7 и 4.0.3-4.3)  и указано поддерживается ли NEON (должно быть yes).</p> <p><a href="http://delphi.org/2013/09/syscheck-for-xe5-compatibility/" target="_blank"><strong>Источник</strong></a></p> <h4><a id="118">Список из 118 проверенных устройств</a></h4> <p>Jim McKeeth опубликовал <a href="https://docs.google.com/spreadsheet/ccc?key=0AoEN2CEsVvJ0dGhVaWJEdWRJTVYzZ1NKT2NoQkF4N3c&usp=sharing" target="_blank">список из 118 протестированных устройств</a> (<a href="https://docs.google.com/spreadsheet/ccc?key=0AtyJxWm1ZO7bdEszaDFkbGtNdnJ4by1ZVFh4eFF1cmc&usp=sharing" target="_blank">зеркало</a>, <a href="https://docs.google.com/spreadsheet/pub?key=0AtyJxWm1ZO7bdEszaDFkbGtNdnJ4by1ZVFh4eFF1cmc&output=html" target="_blank">html версия</a>). Список получен с помощью сервиса <a href="https://www.apkudo.com/" target="_blank">Apkudo</a>. Этот сервис позволяет загрузить свой APK, и проверить его работу на большом количестве разных устройств. </p> <p>Для проверки Jim использовал простейшую программку типа Hello World. </p> <p>Из 118 устройств APK установился только на 108 (на остальных был либо тайм-аут либо не хватило свободного места). Из 108 устройств, программка не запустилась только на 3.</p> <ul> <li>Проверено устройств: 118 </li> <li>Не установилось на: 10 </li> <li>Зависло (Application not responding) на: 3 </li> <li>Успешно запустилось на: 105 </li> <li>Процент успеха: 89% </li> </ul> <p><a href="http://delphi.org/2013/09/delphi-xe5-android-device-compatibility/" target="_blank"><strong>Источник</strong></a></p> <h3><a id="official">Официальные способы</a></h3> <h4><a id="spec">Соответствие спецификации</a></h4> <p>Поддерживаются устройства архитектуры ARMv7 и ОС:</p> <table cellpadding="0" border="1"><tbody> <tr> <td> <p><b>Название ОС Android</b></p> </td> <td> <p><b>Версия ОС Android</b></p> </td> <td> <p><b>API Levels</b></p> </td> </tr> <tr> <td> <p><b>Jelly Bean</b></p> </td> <td> <p>Android 4.1.x, 4.2.x, 4.3.x</p> </td> <td> <p>API Levels 16, 17, 18</p> </td> </tr> <tr> <td> <p><b>Ice Cream Sandwich</b></p> </td> <td> <p>Android 4.0.3 and 4.0.4</p> </td> <td> <p>API Level 15</p> </td> </tr> <tr> <td> <p><b>Gingerbread</b></p> </td> <td> <p>Android 2.3.3 - 2.3.7</p> </td> <td> <p>API Level 10</p> </td> </tr> </tbody></table> <p>Не поддерживается:</p> <ul> <li>Honeycomb (Android 3.x) </li> <li>Эмулятор Gingerbread </li> <li>Устройства на процессоре Tegra 2 (поддержка <a href="http://www.arm.com/products/processors/technologies/neon.php" target="_blank">NEON</a> обязательна) </li> </ul> <p><a href="http://docwiki.embarcadero.com/RADStudio/XE5/en/Android_Devices_Supported_for_Application_Development" target="_blank">Ссылка на официальную документацию</a>.</p> <h4><a id="list">Список проверенных устройств от Embarcadero</a></h4> <p>Список можно найти в официальной документации от Эмбаркадэро.</p> <p>Сюда копировать не буду. Если интересно – сходите по ссылке.</p> <p><a href="http://docwiki.embarcadero.com/RADStudio/XE5/en/Android_Devices_Supported_for_Application_Development#Results_of_Our_Android_Device_Testing">http://docwiki.embarcadero.com/RADStudio/XE5/en/Android_Devices_Supported_for_Application_Development#Results_of_Our_Android_Device_Testing</a></p> <p>p.s. Забавно, но в Google Play уже появились и платные программки для проверки устройств на совместимость с Delphi ХЕ5. <strike>Стервятники, такие стервятники.</strike></p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com6Riga, Latvia56.9496487 24.1051863999999856.672694199999995 23.459739399999979 57.2266032 24.75063339999998tag:blogger.com,1999:blog-1724180200433302177.post-50034169296790232442013-10-11T09:03:00.001+03:002013-10-11T09:07:57.725+03:00Ссылка: Почему веб-приложения на мобильных платформах работают медленно<p> </p> <p>Delphi XE5 дает возможность создавать нативные приложения и для десктопа и мобильных платформ (пока что Android и iOs). Единый код, UI, все дела. </p> <p>Но зачем мне для этого покупать Delphi, воскликнет искушенный читатель? Я возьму какой-нибудь бесплатный мобильный Javascript фреймворк (<a href="http://cordova.apache.org/" target="_blank">Cordova</a>, PhoneGap и другие) и сделаю то же самое. Не спеши, читатель, отвечу ему я. Ведь Javascript может оказаться слиииииишком медленным. </p> <p>И вот одна статья на эту тему. <strike>Только сегодня!</strike> <strike>Только на нашей арене!</strike> <strike>Javascript против нативного кода! Сравнение производительности и предсказании будущего!</strike> Статья опубликована на Хабре 8 августа 2013.</p> <h5><a href="http://habrahabr.ru/post/188580/" target="_blank">Почему веб-приложения на мобильных платформах работают медленно</a></h5> <p> </p> <p>Статья по ссылке реально большая. И я позволю себе скопировать сюда выводы.</p> <p>Вот что следует помнить: <br />* в 2013 году JavaScript является слишком медленным, чтобы его можно было использовать на мобильных устройствах для создания приложений типа обработки фотографий и пр.: <br />— он в 5 раз медленнее нативного кода; <br />— он сравним с IE8; <br />— он медленнее, чем x86 C/C++, примерно в 50 раз; <br />— он медленнее, чем серверные Java/Ruby/Python/C# примерно в 10 раз, если программа выделяет не больше 35 Мб памяти и резко замедляется при дальнейшем выделении памяти; <br />* Наиболее реальный способ его разогнать — это увеличить производительность процессора до уровня десктопа. Возможно это и произойдет, но не в ближайшем будущем; <br />* Сам язык последнее время нисколько не ускорился и его разработчики утверждают, что при сохранении языка и API, производительность никогда не догонит нативный код; <br />* Сборщик мусора сильно тормозит при ограниченном количестве доступной памяти. Он ведет себя сильно хуже, чем на декстопах или серверах; <br />* Каждый мобильный разработчик, независимо от того — использует он сборку мусора или нет — тщательно продумывает работу с памятью; <br />* JavaScript в настоящий момент фундаментально против того, чтобы даже попробовать оценить расход памяти на мобильных устройствах; <br />* Даже если они захотят дать эту возможность, опыт подсказывает, что сделать это будет очень трудно; <br />* Есть надежда на asm.js, но он, скорее, напоминает C\C++, чем что-то динамическое типа JS.</p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com7tag:blogger.com,1999:blog-1724180200433302177.post-7828432857558011332013-10-03T00:33:00.001+03:002013-10-03T00:36:09.963+03:00Delphi XE5 с поддержкой Андроида. Первые впечатления.<p><img title="Delphi XE5 art" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="Delphi XE5 art" src="http://lh6.ggpht.com/-8J3iIDrNs_Y/UkyRFr_bMVI/AAAAAAAACDs/Mc3VfRLmJTc/image%25255B90%25255D.png?imgmax=800" width="480" height="270" /> </p> <p>Не то, чтобы я очень ждал выхода <a href="http://www.embarcadero.com/ru/products/delphi" target="_blank">Delphi XE5</a>. Поначалу. На самом деле я даже не следил за новостями. Но за пару недель до релиза (как это выяснилось позднее) ситуация поменялась. Только-только стали появляться первые обзоры от бета тестеров XE5. А я решил проверить будет ли мой <a href="http://www.lazyproject.info/" target="_blank">Lazy Delphi Builder</a> работать с компиляторами от XE5. </p> <p>Зарегистрировался на участие в бета тесте, стал следить за новостями и как-то потихоньку втянулся в активное ожидание, с ежедневной проверкой <a href="http://www.delphifeeds.ru/" target="_blank">DelphiFeeds</a> на тему новостей. Я как-то даже не верил, что у Embarcadero получится. Уж очень амбициозная цель была поставлена. Но у них получилось. Молодцы!</p> <p>Доступа к бете я тогда так и не дождался – через неделю вышла полная версия. </p> <h5>Попытка первая.</h5> <p>Очень интересно, заработает ли у меня. Будет ли всё действительно просто – или придётся сначала потанцевать с бубном.</p> <p>Trial установлен. В наличии имеется пара часов свободного времени и старенький Samsung Galaxy Mini, который как выяснилось позже, просто не поддерживается.</p> <p>Времени читать документацию нет. Пара часов пролетает в лихорадочной доустановке Android SDK, NDK, настройке IDE и попытках запустить какую-нибудь демку на телефоне (Oppa-Delphi-Style!). Сначала получил ошибку о несовпадающей версии API. Потом выяснилось, что в телефоне не хватает места. Пара часов пролетела как пара минут оставив за собой дымный след несбывшихся надежд.</p> <h5>Попытка вторая.</h5> <p>Ко второй попытке я подошел основательнее. Скачал и установил наисвежаиший Android SDK. Взял другой телефонный аппарат, которые точно поддерживается Delphi XE5. На этот раз экспериментировал с <a href="http://4pda.ru/2013/08/14/111237/">Gigabyte GSmart Aku A1</a>. Телефон тоже бюджетный но вышедший в августе 2013. </p> <p>И засел за эксперименты. </p> <p>В этот раз всё прошло как по маслу. Единственная проблемка с которой пришлось столкнуться связана с телефоном. Поиск USB драйвера для телефона превратился в квест. Windows 7 его сам не нашёл, стандартный USB драйвер из ASDK тоже не покатил. Нашёлся же драйвер "в самом неожиданном месте" - <a href="http://www.gigabytecm.com/en/goodscontent.php?id=10&type=2">на сайте производителя</a> (но тоже не сразу - <a href="http://4pda.ru/forum/index.php?showtopic=491775">спасибо форуму 4pda за наводку на правильный линк</a>).</p> <p>p.s. Собирал и устанавливал в телефон из IDE. Теперь интересно, можно ли это сделать из командной строки. (Lazy Delphi Builder тут бессилен, так как умеет только компилировать) </p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com5tag:blogger.com,1999:blog-1724180200433302177.post-41461850228912029822013-09-15T04:39:00.001+03:002013-09-16T02:00:07.491+03:00Lazy Delphi Builder 1.9.7.251. 15-сен-2013 для XE5 и XE6<p>Для тех, кто не в курсе: Lazy Delphi Builder даёт возможность пересобрать всё что надо используя только .pas файлы. И поддерживать порядок, складывая все dcu-шки в <a href="/2008/08/delphi.html">одно определённое место</a>. Лицензия - халява.</p> <p>Сценарии использования:</p> <ol> <li>Пересобрать все свои компоненты/библиотеки из исходников с нуля (актуально в случае апгрейда, чистки) </li> <li>Сборка нового релиза (всё собирается с нуля из pas-файлов) </li> <li>Установка новых больших библиотек чтобы поиграться (или пересборка старых с новыми директивами) </li> </ol> <h4>История изменений</h4> <ol> <li>Новое: теперь можно выбирать платформу для компиляции. Пока поддерживаются <strong>Win32</strong>, <strong>Win64 </strong>и <strong>OSX</strong>. Это сделано через замену вызова dcc32 на вызов dcc64 или dccOSX. Для использования других платформ, можно указывать нужный dcc вручную (см. пункт 9 в <a href="/2013/04/lazy-delphi-builder-186240-28-04-2013.html">release notes к версии 1.8.6.240</a>) <br /><a href="http://lh3.ggpht.com/-DMKFc9XBPDY/UjUQwG5Ry5I/AAAAAAAACDE/3KNwXJBJ-2g/s1600-h/image_thumb%25255B9%25255D%25255B6%25255D.png"><img title="Как выбрать компилятор для Win64 и OSX" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="Как выбрать компилятор для Win64 и OSX" src="http://lh5.ggpht.com/--3DPob0h_f0/UjUP0cD2LPI/AAAAAAAACDM/59T5_kc_axI/image_thumb%25255B9%25255D_thumb%25255B1%25255D.png?imgmax=800" width="488" height="154" /></a> </li> <li>Новое: теперь можно изменять число ошибок, после которого Lazy Builder останавливает билд (по-умолчанию 2, как и в предыдущих версиях) <br /><a href="http://lh4.ggpht.com/-eijGYGYv3ms/UjUQxu4cRSI/AAAAAAAACDU/evdBf7BjLII/s1600-h/image_thumb%25255B5%25255D%25255B5%25255D.png"><img title="Параметры сборки" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="Параметры сборки" src="http://lh5.ggpht.com/-WxqqCx9NX0E/UjUP1JSDVJI/AAAAAAAACDc/SkYrZiSBSbw/image_thumb%25255B5%25255D_thumb.png?imgmax=800" width="484" height="313" /></a> </li> <li>Исправлено: Access Violation при нажатии кнопки "Load preset", который возникал при пустом списке (спасибо за отчёты об ошибках) </li> <li>Исправлено: в выходных папках нельзя было использовать Unicode-ные (не-ansi) символы. Реализовано так: преобразование в OEM теперь выполняется только для Delphi версий младше чем D2009 (я не нашёл точной информации о том, начиная с каких версий Delphi и Windows, корректно поддерживается Юникод в командной строке, если что-то не будет работать - пишите). </li> <li>Исправлено: Удаление package из IDE не работало для Delphi версий младше чем XE2. </li> <li>Исправлено: Дерево с файлами: зависание при попытке посмотреть детальную инфу о проблменом (erroneous) пакете или проекте. </li> <li>Исправлено (надеюсь): иногда невозможно изменить выбранную версию Delphi после компиляции </li> <li>Minor: исправлены подсказки на закладке "Scan settings" </li> <li>Minor: во всех текстах dcc32 был переименован в dccXX </li> <li>Добавлена поддержка Delphi XE6 =) </li> </ol> <p>Скачать можно <a href="http://code.google.com/p/lazyproject/downloads/list">отсюда</a>.</p> <h4>Ссылки по теме</h4> <ul> <li><a href="/2013/04/lazy-delphi-builder-186240-28-04-2013.html">Lazy Delphi Builder 1.8.6.240 от 28-04-2013 для Delphi XE4 и XE5</a> </li> <li><a href="/2012/09/lazy-delphi-builder-175232-13-09-2012.html">Lazy Delphi Builder 1.7.5.232 от 13-09-2012 для Delphi XE3</a> </li> <li><a href="/search/label/Lazy%20Delphi%20Builder">Все записи по теме Lazy Delphi Builder</a> </li> <li><a href="http://www.lazyproject.info/">www.lazyproject.info</a> – домашняя страница Lazy Delphi Builder </li> <li><a href="https://groups.google.com/forum/?fromgroups#!forum/lazyproject">Lazy Delphi Builder в Google Groups</a> </li> </ul> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com2tag:blogger.com,1999:blog-1724180200433302177.post-16971946789589181452013-04-28T03:32:00.001+03:002013-12-16T22:05:36.000+02:00Lazy Delphi Builder 1.8.6.240 от 28-04-2013 для Delphi XE4 и XE5<h4>Что нового (вкратце):</h4><ul><li>Поддержка <strong>Delphi XE4.</strong> И на всякий случай, сразу и <strong>Delphi XE5</strong>, - вдруг выйдет через месяц =) </li>
<li><strong>Профили (мини)</strong>. Теперь можно сохранять профили групп настроек для дальнейшего использования. Сделано для: выходных папок, настроек билда, переменных окружения и других мелочей (см. ниже). </li>
<li><strong>Изменён формат хранения списков</strong> в файлах LazyDBP и ini. Теперь без цифр – а это значит, что сравнить два файла в Diff-viewer-е станет совсем просто. И кстати, теперь все настройки будут сохраняться в подкаталоге Data. Новый формат профилей не имеет обратной совместимости со старым. Но возможность сохранить в старом формате осталась в Save As диалоге. </li>
<li>Поддержка <strong>нескольких выражений в фильтре</strong> дерева (через точку с запятой “;”) </li>
<li>Появилась возможность <strong>вместо dcc32.exe подставлять свой файл</strong>. Это может быть .bat-ник, может быть .exe. А может быть и dcc64.exe (см. пункт 9 в истории изменений) </li>
<li>Добавлено автоопределение версии Delphi по названию файла пакета (см. Check Wizard) </li>
<li>Появился редактор для compiler defines в виде CheckListBox-а </li>
<li>Много мелких улучшений и исправлений (подробный список под катом, и в архиве с программой). </li>
</ul><p>Скачивать на домашней странице: <a href="http://www.lazyproject.info/downloads/">http://www.lazyproject.info/downloads/</a> или <a href="http://code.google.com/p/lazyproject/downloads/list">здесь</a></p><p></p><a name='more'></a> <h5>Подробный список изменений версии Lazy Delphi Builder 1.8.6.240:</h5><p>Дата релиза: 28.04.2013.</p><p>0. Добавлена поддержка Delphi XE4 и XE5 (не тестировалось - напишите мне, если у вас это работает) <br />
1. Сделать так, чтобы номера строк вообще не сохранялись для списков в .ini и .LzyDbp файлах. <br />
2. Console: В справке командной строки выводить пример использования. <br />
3. Исправлена ошибка с указанием в качестве BaseDir относительной папки (передачей в /OutputDirBase). Например написав просто Test компилироваться не будет. <br />
4. При запуске компиляции блокировать возможность изменить выбранную версию Delphi <br />
5. Возможна ситуация с Assertion Failed связанной с выбранной версией Delphi при попытке открыть диалог компиляции. Помогает перевыбор версии Delphi. <br />
6. Исправлен AV при запуске программы без установленной Delphi. <br />
7. При запуске программы без установленной Delphi, теперь блокируются контролы, требующие наличия Delphi для работы. <br />
8. При сканировании файлов, для ProgressBar-а, вместо pstProgress использовать pstMarquee. <br />
9. Дать возможность указывать свой собственный Компилятор командной строки. Или запускать свой .bat файл вместо dcc32. Сделано. Пока только с помощью редактирования LazyDBP файла: В секцию [[Build Settings]] надо добавить ключ: CustomCompiler=Полный путь к компилятору. <br />
10. В Build диалоге Рядом с Base Folder добавить кнопку вызывающую Popup Menu с пунктами: <br />
    1. Новая папка в temp директории <br />
    2. Текущая папка <br />
    3. Открыть Base-папку в Explorer-е <br />
11. Исправлено: Если во процессе обработки файлов в дерево перетащить другую папку, процесс обработки прервется. <br />
12. Empty Recycle bin не срабатывает если только что удалили и узел в дереве не раскрыт <br />
13. Ошибка в дереве при Check All required: в случае, если в дереве есть пакеты с одинаковыми названиями, но удаленные в Recycle Bin, то выделение не сработает. Это было исправлено двояко. 1 через libsuffix. 2 через проверку флага удаления. <br />
14. Увеличить размер поля для ввода defines <br />
15. Отдельный CheckList редактор для DEFINES при Compile. <br />
16. Сделать редактор для defines, чтобы полный список хранился в ини файле, а в редакторе можно было отметить галочки <br />
17. Bug: Ctrl+A в дереве с файлами в режиме списка выделяет даже отфильтрованные записи <br />
18. В дереве в Filter добавить кнопку очистки edit-a фильтра <br />
19. в дереве в Filter сделать поддержку нескольких выражений через ; (спасибо Nashev-у за идею) <br />
20. nashev: показывать в строке какой проект из скольки компилируется <br />
21. Сохранение размеров форм <br />
    1. Env options <br />
    2. Build dialog <br />
    3. MainForm <br />
22. Preset-ы (возможность сохранить/загрузить набор значений с определенным именем): <br />
    1. для Env Vars <br />
    2. Lazy include Paths <br />
    3. для Scan Folders <br />
    4. для Exclude extensions <br />
    5. в Build диалоге: <br />
        1. для Build Options <br />
        2. для Directories <br />
23. В окне About не был указан емэйл <br />
24. В окне About дать возможность скопировать ссылку в буфер обмена (правый клик -> Copy) <br />
25. Ошибка: Hint может остаться висеть и не пропасть при переключении на другое окно или на другую программу. <br />
26. обновить JCL <br />
27. Закладка Installed Packages: прятать системные пакеты (пакеты, устанавливаемые в Bin папку Delphi) <br />
28. Тестовая функция: Check Wizard (Ctrl+W) в дереве на закладке "2 Select Files to compile" <br />
29. В меню дерева на закладке "Select Files to compile" новый пункт Check Packages for Current IDE <br />
30. При изменении текущей версии Delphi, список пакетов должен обновляться. <br />
31. Теперь все настройки хранятся в подпапке Data</p><h4>Ссылки по теме</h4><ul><li><a href="http://www.tdelphiblog.com/2012/09/lazy-delphi-builder-175232-13-09-2012.html">Lazy Delphi Builder 1.7.5.232 от 13-09-2012 для Delphi XE3</a> </li>
<li><a href="http://www.tdelphiblog.com/search/label/Lazy%20Delphi%20Builder">Все записи по теме Lazy Delphi Builder</a> </li>
<li><a href="http://www.lazyproject.info/">www.lazyproject.info</a> – домашняя страница Lazy Delphi Builder </li>
<li><a href="https://groups.google.com/forum/?fromgroups#!forum/lazyproject">Lazy Delphi Builder в Google Groups</a> </li>
</ul>Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com2tag:blogger.com,1999:blog-1724180200433302177.post-22690270746443914522013-03-29T22:25:00.001+02:002017-11-25T01:37:43.938+02:00Головокружительные возможности DI и Delphi Spring. Часть 9. Один интерфейс – несколько реализаций.Это последний перевод из серии про внедрение зависимостей на примере использования Delphi Spring.<br />
Это перевод публикации Ника Ходжеса от 07 ноября 2011 года: <a href="http://www.nickhodges.com/post/Getting-Giddy-with-Dependency-Injection-and-Delphi-Spring-9-One-Interface-Many-Implementations.aspx">Getting Giddy with Dependency Injection and Delphi Spring #9 – One Interface, Many Implementations</a>. (перевод сделан с разрешения автора).<br />
<h3>
Все переводы по Spring</h3>
<ul>
<li>Я не переводил части с 1й по 5ю, потому что мне было лень - там очень много текста, и, по моему скромному мнению, эти части не содержат конкретной информации об использовании Delphi Spring, а постепенно подводят к необходимости использования Dependency Injection. Причём, Ник ведёт к этому слишком длинным и запутанным путём. См. Ссылки по теме.</li>
<li><a href="http://www.tdelphiblog.com/2011/07/dependency-injection-i-osnovy-delphi.html">DI и Delphi Spring. Часть 5. Основы Delphi Spring.</a> </li>
<li><a href="http://www.tdelphiblog.com/2012/06/dependency-injection-i-delphi-spring-6.html">DI и Delphi Spring. Часть 6. Обойдёмся без конструктора.</a> </li>
<li><a href="http://www.tdelphiblog.com/2012/07/dependency-injection-i-delphi-spring-7.html">DI и Delphi Spring. Часть 7. Контроль над созданием.</a></li>
<li><a href="http://www.tdelphiblog.com/2012/09/dependency-injection-i-delphi-spring-8.html">DI и Delphi Spring. Часть 8. Разное.</a></li>
<li><a href="http://www.tdelphiblog.com/2013/03/dependency-injection-i-delphi-spring-9.html">DI и Delphi Spring. Часть 9. Один интерфейс несколько реализаций.</a></li>
</ul>
<hr />
<i>Как обычно, <a href="http://code.google.com/p/delphi-spring-framework/">Delphi Spring Framework можно скачать с GoogleCode</a></i><br />
До сих пор мы регистрировали интерфейсы и их реализации в соотношении один к одному. Для каждого интерфейса регистрировался только один реализующий класс. Но что, если мы хотим реализовать интерфейс разными способами, выбирая реализацию в зависимости от выбора пользователя или других внешних факторов?<br />
К счастью для нас, контейнер Spring предоставляет такую возможность. Система регистрации контейнера в фреймворке Delphi Spring позволяет при каждой регистрации указать имя предоставляемой реализации, давая таким образом возможность отличать одну регистрацию от другой, даже если они регистрируют разные реализации для одного и того же интерфейса.<br />
<i>При регистрации нескольких реализаций одного интерфейса <b>без</b> указания имени «победит последний».</i><br />
<a name='more'></a>Давайте объявим простой интерфейс для кредитной карты следующим образом:<br />
<pre class="brush: delphi;">type
ICreditCard = interface
['{6490640C-0E2B-4F7D-908C-0E6A74DCC0A0}']
function IsValid(aCreditCardNumber: string): boolean;
function ChargeAmount(aCreditCardNumber: string; aAmount: Double): Boolean;
end;
</pre>
Существует множество кредитных карт, которые могут использовать клиенты, поэтому нам понадобятся разные реализации карт для различных вендоров: <br />
<pre class="brush: delphi;">GlobalContainer.RegisterType<TVisa>.Implements<ICreditCard>('VISA');
GlobalContainer.RegisterType<TMasterCard>.Implements<ICreditCard>('MasterCard');
GlobalContainer.RegisterType<TDiscover>.Implements<ICreditCard>('Discover');
GlobalContainer.RegisterType<TAMEX>.Implements<ICreditCard>('AMEX');
</pre>
Этот код регистрирует четыре разных класса (TVisa, TMasterCard, TDiscover, TAMEX) для одного и того же интерфейса (ICreditCard) с помощью строкового параметра при вызове GetService. Как только они будут зарегистрированы, вы сможете выбрать какой класс вы использовать в качестве реализации ICreditCard при обработки кредитной карты. Вы даже сможете изменить свой выбор в режиме выполнения, основываясь, скажем на выборе пользователя или на различиях обработки заказов и т.п.<br />
Например, если у вас есть четыре переключателя (radio button) которые позволяют пользователю выбрать одну из четырех кредитных карт, то вы сможете сделать следующее:<br />
<pre class="brush: delphi;">var
CurrentCard: ICreditCard
...
procedure TMultipleImplementationsForm.RadioButton1Click(Sender: TObject);
begin
CurrentCard := ServiceLocator.GetService<ICreditCard>('VISA');
end;
procedure TMultipleImplementationsForm.RadioButton2Click(Sender: TObject);
begin
CurrentCard := ServiceLocator.GetService<ICreditCard>('MasterCard');
end;
procedure TMultipleImplementationsForm.RadioButton3Click(Sender: TObject);
begin
CurrentCard := ServiceLocator.GetService<ICreditCard>('Discover');
end;
procedure TMultipleImplementationsForm.RadioButton4Click(Sender: TObject);
begin
CurrentCard := ServiceLocator.GetService<ICreditCard>('AMEX');
end;
</pre>
Приведенный выше код присвоит экземпляр соответствующего объекта реализации в одну переменную CurrentCard в зависимости от выбранного пользователем переключателя. Соответствующий объект будет возвращён на основании строки переданной в GetService. Эта строка, конечно же, должна соответствовать строке, с которой была зарегистрирована нужная реализация объекта. <br />
Таким образом вы можете зарегистрировать по имени и затем использовать столько реализаций интерфейса, сколько вам будет угодно. Очевидно, что это предоставляет массу возможностей, так как позволяет вам выбирать из любого количества реализаций и при этом в любой момент добавлять новые реализации. (примечание переводчика: представляю, какая там каша будет после лет 5 активного использования именованных динамической реализаций).<br />
<a href="http://bit.ly/vJWd5B">Пример приложения, показывающего эту технику</a>, а также некоторые другие интересные особенности могут быть найдены в <a href="http://bit.ly/tt2oRJ">примерах, которые поставляются вместе с фреймворком Delphi Spring</a>.<br />
<hr />
<h3>
Ссылки <a href="https://www.blogger.com/null" name="links">по</a> теме</h3>
<ul>
<li>Cоветую почитать и подумать о <a href="http://ru.wikipedia.org/wiki/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)">SOLID</a>.</li>
<li><a href="http://habrahabr.ru/post/166287/">Habrahabr: Dependency Injection: анти-паттерны</a> </li>
<li><a href="http://habrahabr.ru/post/91650/">Habrahabr: Использование IoC контейнеров. За и Против.</a> Обсуждение паттерна Service Locator. (.net, Unity) </li>
<li><a href="http://habrahabr.ru/post/63568/">Habrahabr: DI и IoC для начинающих, часть 3</a>. Применение Unity (.net) при написании unit-тестов. <em>По ссылке можно найти и другие части статьи</em>. </li>
</ul>
Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com5tag:blogger.com,1999:blog-1724180200433302177.post-59019413758812810172013-03-11T02:39:00.001+02:002013-03-11T02:49:54.541+02:00Лучшее в Delphi блогах за 2012 год<p><a href="/2013/03/luchshee-o-delphi-za-2012-god.html"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" align="right" src="http://lh4.ggpht.com/-t32kELFXGYE/UT0qMDFa1-I/AAAAAAAABzc/lj7gpTGgtBY/ID-10097472%25255B26%25255D.jpg?imgmax=800" width="240" height="200" /></a>Все лучшие публикации по Delphi за 2012 год в одном месте. Радует, что качество публикаций растёт с каждым годом.  </p> <p>Рад видеть среди новых авторов Александра Багеля (Rouse_), чьи советы и наработки опубликованные на форумах не раз мне помогали. Также, рад видеть новых авторов из Embarcadero (и особенно Сергея Рощина).</p> <p>Отдельно рекомендую обратить внимание на:</p> <ul> <li>Перевод справочной системы Delphi (тем, кто не читает на английском) </li> <li>Серию постов Александра Багеля (изучаем отладчик) </li> <li>Разделы Инструменты и компоненты </li> <li>Статью “Разработка через тестирование” </li> <li>Материалы по Delphi Spring </li> <li>Все публикации и переводы Александра Алексеева </li> </ul> <p></p> <hr /> <p></p> <p>Подборки ссылок за предыдущие годы: </p> <ul> <li><a href="http://www.tdelphiblog.com/2010/01/2009.html">Самые интересные публикации <b>2009</b> года</a> </li> <li><a href="http://www.tdelphiblog.com/2011/03/delphi-2010.html">Самое интересное в Delphi-блогах за <b>2010</b> год</a> </li> <li><a href="/2012/04/samoe-interesnoe-v-delphi-blogah-za.html">Лучшее в Delphi-блогах за <b>2011</b> год</a>  </li> </ul> <a name='more'></a> <hr /> <h3>Оглавление</h3> <ul> <li><a title="Перейти к разделу" href="#design">Проектирование</a> <ul> <li><a title="Перейти к разделу" href="#spring">Головокружительные возможности Dependency Injection и Delphi Spring</a> </li> <li><a title="Перейти к разделу" href="#plugins">Разработка системы плагинов в Delphi.</a> </li> <li><a title="Перейти к разделу" href="#mvc">MVC подход при разработке GUI в Delphi</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#internals">О внутреннем устройстве Delphi</a> <ul> <li><a title="Перейти к разделу" href="#help">Перевод справочной системы Delphi</a> </li> <li><a title="Перейти к разделу" href="#debug">Серия статей "Изучаем отладчик"</a> </li> <li><a title="Перейти к разделу" href="#protection">Защита программ. Работа с отладчиком.</a> </li> <li><a title="Перейти к разделу" href="#rtti">RTTI и сериализация</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#xe3">Delphi XE3</a> <ul> <li><a title="Перейти к разделу" href="#lb">Live Bindings in XE3</a> <ul> <li><a title="Перейти к разделу" href="#lbxe3">«LiveBindings in XE3» от Malcolm Groves. Перевод.</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#fm2">Firemonkey 2.0 (XE3)</a> <ul> <li><a title="Перейти к разделу" href="#fm2_brovin">Ярослав Бровин (Embarcadero) о Firemonkey 2.0</a> </li> <li><a title="Перейти к разделу" href="#fm2_vlad">Firemonkey от простого к сложному. Владислав Баженов.</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#xe3_davidi">Видео-ролики от Дейвида Ай про XE3</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#xe2">Delphi XE2</a> <ul> <li><a title="Перейти к разделу" href="#fm">Firemonkey 1.0 (XE2)</a> <ul> <li><a title="Перейти к разделу" href="#fm_vlad">Firemonkey от простого к сложному</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#vcl2fm">Переход с VCL на FMX</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#db">Работа с БД</a> <ul> <li><a title="Перейти к разделу" href="#dbx">dbExpress</a> </li> <li><a title="Перейти к разделу" href="#datasnap">DataSnap</a> </li> <li><a title="Перейти к разделу" href="#oracle">Работа с СУБД Oracle дома. Быстрый старт.</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#tools">Инструменты для Delphi</a> </li> <li><a title="Перейти к разделу" href="#libs">Компоненты и библиотеки</a> <ul> <li><a title="Перейти к разделу" href="#libs_author">Авторские работы</a> </li> <li><a title="Перейти к разделу" href="#libs_fm">Firemonkey - обзоры компонентов</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#tips">Полезные советы</a> </li> <li><a title="Перейти к разделу" href="#transl">Переводы GunSmoker-а</a> </li> <li><a title="Перейти к разделу" href="#web">Работа с сетью</a> </li> <li><a title="Перейти к разделу" href="#games">GUI, GlScene и разработка игр на FreePascal/Delphi</a> <ul> <li><a title="Перейти к разделу" href="#lampogolovii">Lampogolovii о GUI и разработке игр</a> </li> </ul> </li> <li><a title="Перейти к разделу" href="#directx">DirectX</a> </li> <li><a title="Перейти к разделу" href="#other">Другое</a> </li> </ul> <hr /> <br /> <br /> <h3><a title="Ссылка на раздел" href="#design">#</a> <a name="design">Проектирование</a></h3> <ul> <li><a href="http://delphi.frantic.im/delphi-tdd">Разработка через тестирование (TDD) и Delphi</a>. Александр Котлярский </li> <li><a href="http://habrahabr.ru/post/152025/">Моя «парадигма» работы с потоками</a> (см. комментарии). MrShoor </li> </ul> <h4><a title="Ссылка на раздел" href="#spring">#</a> <a name="spring">Головокружительные возможности Dependency Injection и Delphi Spring</a></h4> <p>Переводчик: Алексей Тимохин</p> <ul> <li><a href="http://www.tdelphiblog.com/2012/06/dependency-injection-i-delphi-spring-6.html">Часть 6. Обойдёмся без конструктора.</a> </li> <li><a href="http://www.tdelphiblog.com/2012/07/dependency-injection-i-delphi-spring-7.html">Часть 7. Контроль над созданием.</a> </li> <li><a href="http://www.tdelphiblog.com/2012/09/dependency-injection-i-delphi-spring-8.html">Часть 8. Разное.</a> </li> </ul> <h4><a title="Ссылка на раздел" href="#plugins">#</a> <a name="plugins">Разработка системы плагинов в Delphi. Продолжение старой серии статей «создаём систему плагинов»</a></h4> <p>Александр Алексеев (gunsmoker). </p> <ul> <li><a href="http://www.gunsmoker.ru/2011/12/delphi.html">Разработка системы плагинов в Delphi</a> </li> <li><a name="5777257077220706959"></a><a href="http://www.gunsmoker.ru/2012/01/delphi-2-api.html">Разработка системы плагинов, часть 2: разработка API</a> </li> <li><a name="7680018511720040678"></a><a href="http://www.gunsmoker.ru/2012/01/3.html">Разработка системы плагинов, часть 3: активные плагины</a> </li> <li><a name="5020942920695665226"></a><a href="http://www.gunsmoker.ru/2012/01/4.html">Разработка системы плагинов, часть 4: взаимодействие плагинов</a> </li> <li><a name="6923614637733481073"></a><a href="http://www.gunsmoker.ru/2012/02/5.html">Разработка системы плагинов, часть 5: отладка и обработка ошибок</a> </li> <li><a href="http://www.gunsmoker.ru/2012/05/6-ui.html">Разработка системы плагинов, часть 6: UI в плагинах</a> </li> <li><a href="http://www.gunsmoker.ru/2012/06/7.html">Разработка системы плагинов, часть 7: пакеты и оптимизация по размеру</a> </li> <li><a href="http://www.gunsmoker.ru/2012/07/8.html">Разработка системы плагинов, часть 8: расширение системы и обратная совместимость</a> </li> </ul> <h4><a title="Ссылка на раздел" href="#mvc">#</a> <a name="mvc">MVC подход при разработке GUI в Delphi</a></h4> <p>Антон Алисов</p> <ul> <li><a href="http://habrahabr.ru/post/147133/">MVC-подход к разработке пользовательских интерфейсов в Delphi. Часть 1. Галочка</a>. Антон Алисов </li> <li><a href="http://habrahabr.ru/post/147198/">[Не совсем]-MVC-подход к разработке пользовательских интерфейсов в Delphi. Часть 2. Списки</a>. Антон Алисов </li> <li><a href="http://habrahabr.ru/post/147466/">[Почти]-MVC-подход к реализации пользовательского интерфейса в Delphi. Часть 3. Объекты</a>. Антон Алисов </li> </ul> <h3><a title="Ссылка на раздел" href="#internals">#</a> <a name="internals">О внутреннем устройстве Delphi</a></h3> <ul> <li><a href="http://www.webdelphi.ru/2012/01/zametki-pro-dragdrop-v-delphi/">Заметки про Drag&Drop в Delphi.</a> Владислав Баженов. </li> <li><a href="http://teran.karelia.pro/articles/item_5606.html">Анонимные методы в Delphi. Вопрос по отладке</a>. Андрей Терехов </li> <li><a href="http://www.gunsmoker.ru/2012/12/webinar-2012-record.html">Запись вебинара "Обработка ошибок в Delphi (V2).</a>", декабрь 2012. Александр Алексеев. </li> </ul> <h4><a title="Ссылка на раздел" href="#help">#</a> <a name="help">Перевод справочной системы Delphi</a></h4> <p>Источник: <a title="http://pascal-study.blogspot.ru" href="http://pascal-study.blogspot.ru">http://pascal-study.blogspot.ru</a> Автор: svg</p> <ul> <li><a href="http://pascal-study.blogspot.ru/2012/02/blog-post.html">Идентичность и совместимость типов данных</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/02/delphi.html">Применение пространств имен в Delphi</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/02/blog-post_25.html">Переменные</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/02/blog-post_7446.html">Объявляемые константы</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/03/blog-post.html">Классы и объекты</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/03/blog-post_01.html">Поля</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/03/delphi.html">Анонимные методы в Delphi</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post.html">Методы</a>. Оригинал:<a href="http://docwiki.embarcadero.com/RADStudio/en/Methods">Methods</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post_03.html">Свойства</a>. Оригинал: <a href="http://docwiki.embarcadero.com/RADStudio/en/Properties">Properties</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post_670.html">События</a>. Оригинал: <a href="http://docwiki.embarcadero.com/RADStudio/en/Events">Events</a> </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post_19.html">Ссылки на класс</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/en/Class_References">Class References</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post_1059.html">Исключения (исключительные ситуации)</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/en/Exceptions">Exceptions</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post_2657.html">Классы и записи - помощники</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/en/Class_and_Record_Helpers">Class and Record Helpers</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post_5162.html">Встроенные типы</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/en/Nested_Type_Declarations">Nested Type Declarations</a> из справочной системы Delphi </li> <li><a href="http://pascal-study.blogspot.ru/2012/05/blog-post_7104.html">Перегрузка операторов</a>. Перевод раздела <a href="http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading">Operator Overloading</a> из справочной системы Delphi </li> </ul> <h4><a title="Ссылка на раздел" href="#debug">#</a> <a name="debug">Серия статей "Изучаем отладчик"</a></h4> <p>Цели статьи: рассмотреть основные методы работы с отладчиком, показать его расширенные и редко используемые возможности, дать понимание работы механизмов отладчика на примерах и рассмотреть некоторый набор методов противодействия. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a></p> <ul> <li><a href="http://alexander-bagel.blogspot.com/2012/10/debugger-1.html.html">Изучаем отладчик, часть первая</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2012/11/debuger-2.html">Изучаем отладчик, часть вторая</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2012/11/debuger-3.html">Изучаем отладчик, часть третья</a> </li> </ul> <h4><a title="Ссылка на раздел" href="#protection">#</a> <a name="protection">Защита программ. Работа с отладчиком.</a></h4> <ul> <li><a href="http://alexander-bagel.blogspot.com/2012/08/getlocaltime.html">Эмулируем GetLocalTime</a>. Что можно сделать для защиты trial программы, чтобы усложнить анализ кода и подмену даты. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2012/09/blog-post.html">Теория использования электронных ключей защиты.</a> <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2012/08/cratefile.html">Отключение главной нити приложения от отладчика и уход от перехвата CreateFile()</a>.<a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2012/09/guardant.html">Простой способ обнаружения эмуляторов ключа Guardant</a>. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://alexander-bagel.blogspot.com/2012/09/blog-post_10.html">Уход из под отладчика срывом стэка</a>. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> </ul> <h4><a title="Ссылка на раздел" href="#rtti">#</a> <a name="rtti">RTTI и сериализация</a></h4> <ul> <li><a href="http://teran.karelia.pro/articles/item_4504.html">Работа с XML и сериализация записей (record).</a> Производительность при сериализации в XML. Андрей Терехов<u></u> </li> <li><a href="http://teran.karelia.pro/articles/item_4505.html">Заметка о RTTI, TValue и real/double/extended</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_4506.html">Настройки программы в INI с использованием RTTI#7</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_4508.html">Цепочки событий (Event Chain) RTTI#8</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_5449.html">О глобальных переменных и RTTI#9</a>. Андрей Терехов </li> </ul> <h3><a title="Ссылка на раздел" href="#xe3">#</a> <a name="xe3">Delphi XE3</a></h3> <ul> <li><a href="http://alexander-bagel.blogspot.com/2012/09/embarcadero-delphi-xe3-12092012.html">Итоги семинара Embarcadero посвященному выпуску Delphi XE3 в Москве 12.09.2012</a>. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://www.webdelphi.ru/2012/09/znakomstvo-s-delphi-xe3/">Знакомство с Delphi XE3</a>. Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/09/delphi-xe3-obnovleniya-v-rtl/">Delphi XE3. Обновления в RTL.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/09/znakomstvo-s-visual-livebindings-v-delphi-xe3/">Знакомство с Visual LiveBindings в Delphi XE3.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/09/modul-s-xelperami-dlya-integer-char-i-tdatetime/">Модуль с хэлперами для Integer, Char и TDateTime.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/10/delphi-xe3-rabota-s-mac-os-x/">Delphi XE3: работа с Mac OS X.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/11/delphi-xe3-rabota-s-xml-v-mac-os-x/">Delphi XE3: работа с XML в Mac OS X.</a> Владислав Баженов. </li> <li><a href="http://www.delphinotes.ru/2012/10/mui-lb-fmx.html">Размышления о новинках: Metro UI, Live Bindings, FMX</a>.  Николай Зверев. </li> <li><a href="http://blogs.embarcadero.com/roschinspb/2012/10/02/actions_in_xe3/">TAction в XE3</a>. - Что изменилось? Что нового? Сергей Рощин (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/roschinspb/2012/11/30/customtext-text/">TAction в XE3. CustomText и Text.</a> Сергей Рощин (Embarcadero) </li> <li><a href="http://teran.karelia.pro/articles/item_5618.html">Delphi XE3 Metropolis UI и другое</a>.  Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_5713.html">Delphi XE3: TStringHelper</a>. Андрей Терехов </li> </ul> <h4><a title="Ссылка на раздел" href="#lb">#</a> <a name="lb">Live Bindings in XE3</a></h4> <ul> <li><a href="http://delphi2010.ru/?p=1179">FM2 и работа с данными</a> (LiveBinding). Александр Божко </li> <li><a href="http://delphi2010.ru/?p=1214">Visual LiveBinding. Пример и видео с Семинара 11 октября в Харькове.</a> Александр Божко </li> </ul> <h5><a title="Ссылка на раздел" href="#lbxe3">#</a> <a name="lbxe3">«LiveBindings in XE3» от Malcolm Groves. Перевод.</a></h5> <p>Переводчик: Сергей Тихонов</p> <ul> <li><a href="http://g-sirr.ru/livebindings-%d0%b2-xe3-tadapterbindsource-%d0%b8-%d1%81%d0%b2%d1%8f%d0%b7%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%b0%d0%bc%d0%b8-%d0%bf%d0%b5%d1%80%d0%b5/">TAdapterBindSource и связывание с объектами</a>. Оригинал: <a href="http://www.malcolmgroves.com/">Malcolm Groves</a>, <a href="http://www.malcolmgroves.com/blog/?p=1084">LiveBindings in XE3: TAdapterBindSource and binding to Objects</a> </li> <li><a href="http://g-sirr.ru/livebindings-%d0%b2-xe3-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%be%d0%b2-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%b0%d0%b4%d0%b0%d0%bf%d1%82/">Обновление Объектов через Адаптер</a>. Оригинал: <a href="http://www.malcolmgroves.com/">Malcolm Groves</a>, <a href="http://www.malcolmgroves.com/blog/?p=1186">LiveBindings in XE3: Updating Objects via an Adapter</a> </li> <li><a href="http://g-sirr.ru/livebindings-%d0%b2-xe3-%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2%d0%b0%d1%88%d0%b8%d1%85-%d0%bf%d0%be%d0%bb%d0%b5%d0%b9-%d0%bf%d0%b5%d1%80%d0%b5/">Форматирование ваших полей</a>. Оригинал: <a href="http://www.malcolmgroves.com/">Malcolm Groves</a>, <a href="http://www.malcolmgroves.com/blog/?p=1226">LiveBindings in XE3: Formatting your Fields</a> </li> <li><a href="http://g-sirr.ru/livebindings-%d0%b2-xe3-tbindsourcedb-%d0%bf%d0%b5%d1%80%d0%b5%d0%b2%d0%be%d0%b4/">TBindSourceDB</a>. Оригинал: <a href="http://www.malcolmgroves.com/">Malcolm Groves</a>, <a href="http://www.malcolmgroves.com/blog/?p=1072">LiveBindings in XE3 – TBindSourceDB</a> </li> </ul> <h4><a title="Ссылка на раздел" href="#fm2">#</a> <a name="fm2">Firemonkey 2.0 (XE3)</a></h4> <ul> <li><a href="http://blogs.embarcadero.com/ekryukov/2012/10/02/directx-10-in-firemonkey-20-rus/">DirectX 10 в FireMonkey 2.0</a>. Евгений Крюков (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/ekryukov/2012/10/02/style-performance-rus/">Производительность стилей в FireMonkey 2.0</a>. Евгений Крюков (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/ekryukov/2012/10/03/raster-style-fm2-rus/">Растровые стили в FireMonkey 2.0</a>. Евгений Крюков (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/10/16/two-styles-in-one-application/">Два стиля в одном приложении FireMonkey</a>. Всеволод Леонов (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/11/16/two-styles-in-two-applications/">Два стиля в двух приложениях FireMonkey</a>. Всеволод Леонов (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/roschinspb/2012/10/09/itextsettings/">Установка параметров текста в Fire Monkey 2</a> (интерфейс ITextSettings). Сергей Рощин (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/sharagin/2012/10/08/adjustfmstyle_rus/">Настройка FireMonkey стиля на контролах и формах</a>. Cвойство StyleLookUp. Алексей Шарагин (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/sharagin/2012/10/04/adjustvclstyle_rus/">Настройка VCL стиля на контролах и формах</a>. Свойство StyleElements. Алексей Шарагин (Embarcadero) </li> <li><a href="http://keeper89.blogspot.com/2012/01/blog-post_27.html">Firemonkey - разговор с разработчиком. Запись вебинара с Е. Крюковым.</a> </li> <li><a href="http://keeper89.blogspot.com/2012/03/firemonkey-styles.html">Запись вебинара FireMonkey Styles</a> с Евгением Крюковым </li> <li><a href="http://youtu.be/9cr-FGaDDR0">Запись вебинара "FireMonkey 2.0, разработка компонентов с Ярославом Бровиным"</a> </li> </ul> <h5><a title="Ссылка на раздел" href="#fm2_brovin">#</a> <a name="fm2_brovin">Ярослав Бровин (Embarcadero) о Firemonkey 2.0</a></h5> <ul> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/02/pickers_in_xe3/">Элементы управления Picker в FireMonkey. Кто такие, зачем нужны и как ими пользоваться? (Pickers in XE3)</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/03/flipview-1/">Слайдер изображений своими руками при помощи FMX 2.0. Часть 1</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/04/flipview-2/">Слайдер изображений своими руками при помощи FMX 2.0. Часть 2</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/05/fmx_component_developer_0/">Часть 0. Разработка компонентов под FMX 2.0. История сотворения мира</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/11/listboxitem_styling/">TListBox в FireMonkey. Создание своих стилизованных итемов для TListBox. 1 часть</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/09/fmx_component_developer_1/">Часть 1. Разработка компонентов под FMX 2.0. Обзор архитектуры. Первое приближение</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/">TListBox в FireMonkey. Создание своих стилизованных итемов для TListBox. 2 Часть</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/10/29/replace_platform_style/">FMX 2.0. Глобальная замена платформенного стиля по умолчанию без TStyleBook</a> </li> <li><a href="http://blogs.embarcadero.com/yaroslavbrovin/2012/12/27/bitbt/">Часть 2. Разработка компонентов под FMX 2.0. Кнопка с картинкой</a> </li> </ul> <h5><a title="Ссылка на раздел" href="#fm2_vlad">#</a> <a name="fm2_vlad">Firemonkey от простого к сложному. Владислав Баженов.</a></h5> <ul> <li><a href="http://www.webdelphi.ru/2012/09/firemonkey-ot-prostogo-k-slozhnomu-11-instrumenty-dlya-raboty-so-stilyami-monkeystyler-monkeyrecolor-i-t-d/">FireMonkey. От простого к сложному #11. Инструменты для работы со стилями (MonkeyStyler, MonkeyRecolor и т.д.).</a> Владислав Баженов.<u></u> </li> <li><a href="http://www.webdelphi.ru/2012/12/firemonkey-ot-prostogo-k-slozhnomu-12-ispolzovanie-dragdrop/">FireMonkey. От простого к сложному #12. Использование Drag&Drop.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/12/firemonkey-ot-prostogo-k-slozhnomu-13-menyu-iz-prostejshix-komponentov/">FireMonkey. От простого к сложному #13. Меню из простейших компонентов.</a> Владислав Баженов. </li> </ul> <h4><a title="Ссылка на раздел" href="#xe3_davidi">#</a> <a name="xe3_davidi">Видео-ролики от Дейвида Ай про XE3</a></h4> <p>Перевод: Всеволод Леонов (Embarcadero)</p> <ul> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/12/11/davidi_xe3_1of32/">1/32</a>. первый из 32-х, очень хорошо взбадривает и освежает впечатление от XE3. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/12/12/httpblogsembarcaderocomvsevolodleonov20121211davidi_xe3_2of32/">2/32</a>. Аудио/видео в мульти-платформенных проектах FireMonkey. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/12/17/davidi_xe3_3of32/">3/32</a>. Получение списка аудио/видео устройств в мульти-платформенных проектах FireMonkey. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/12/17/davidi_xe3_4of32/">4/32</a>. Получение списка аудио/видео устройств в мульти-платформенных проектах FireMonkey. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/12/20/davidi_xe3_4of32-2/">5/32</a>. Новые возможности FireMonkey 2.0 по размещению элементов визуального интерфейса на форме. </li> </ul> <h3><a title="Ссылка на раздел" href="#xe2">#</a> <a name="xe2">Delphi XE2</a></h3> <ul> <li><a href="http://www.webdelphi.ru/2012/01/delphi-xe2-hello-mac-os/">Delphi XE2: Hello, Mac OS!</a> Владислав Баженов. </li> <li><a href="http://cemick.blogspot.com/2012/03/variant-tobjectcreate.html">Variant := TObject.Create ?</a> Семен Хмелев </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/06/27/lbinaction1rus/">LiveBindings в действии, 1</a>.  Всеволод Леонов (Embarcadero) </li> </ul> <h4><a title="Ссылка на раздел" href="#fm">#</a> <a name="fm">Firemonkey 1.0 (XE2)</a></h4> <ul> <li><a href="http://roman.yankovsky.me/?p=285">Немного покритикую FireMonkey</a>. Роман Янковский. </li> <li><a href="http://roman.yankovsky.me/?p=196">Расширяем TTabControl в FireMonkey</a>. Роман Янковский. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/04/11/fm_blinking_button_rus/">FireMonkey - Мигающая кнопка</a>.  Всеволод Леонов (Embarcadero) </li> <li><a href="http://www.delphinotes.ru/2012/05/fire-monkey.html">Fire Monkey: первый кубик деревом</a>.  Николай Зверев. </li> <li><a href="http://www.delphinotes.ru/2012/05/fire-monkey-camera-test.html">Fire Monkey: Camera Test</a>.  Николай Зверев. </li> <li><a href="http://echmel.ru/2012/01/firemonkey-raycastintersect/">FireMonkey.RayCastIntersect</a> - преобразование 2D координат текущего положения курсора мыши в 3D координаты точки объекта. Евгений Чмель. </li> <li><a href="http://echmel.ru/2012/02/tmesh-in-actio/">TMesh в действии</a> - о построении поверхностей второго порядка. Евгений Чмель. </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/02/22/firemonkey-hd-3d-part-1/">FireMonkey HD + 3D, часть 1</a>. Всеволод Леонов (Embarcadero) </li> <li><a href="http://teran.karelia.pro/articles/item_4502.html">Таблицы TGrid и TStringGrid в FireMonkey</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_4503.html">FireMonkey и MyShows.ru #3</a>. Андрей Терехов </li> <li><a href="http://delphi2010.ru/?p=889">Firemonkey на практике #2. Освещение и материал поверхности 3D объектов</a>. Александр Божко </li> <li><a href="http://delphi2010.ru/?p=929">Firemonkey на практике #3. Использование 3D моделей</a>. Александр Божко </li> <li><a href="http://delphi2010.ru/?p=1047">FireMonkey. Tips & Tricks</a>: Как импортировать COLLADA (.dae) модель в FireMonkey программно (в Run Time). Александр Божко </li> <li><a href="http://delphi2010.ru/?p=1022">Firemonkey на практике #5.</a> Использование импортированных моделей. Александр Божко </li> </ul> <h5><a title="Ссылка на раздел" href="#fm_vlad">#</a> <a name="fm_vlad">Firemonkey от простого к сложному</a></h5> <p>Владислав Баженов.</p> <ul> <li><a href="http://www.webdelphi.ru/2012/01/firemonkey-ot-prostogo-k-slozhnomu-2-komponenty-fmx-tablici/">#4. Компоненты FMX: таблицы.</a> </li> <li><a href="http://www.webdelphi.ru/2012/02/firemonkey-ot-prostogo-k-slozhnomu-5-effekty-perexoda-dlya-komponentov/">#5. Эффекты перехода для компонентов.</a> </li> <li><a href="http://www.webdelphi.ru/2012/03/firemonkey-ot-prostogo-k-slozhnomu-6-class-helper-dlya-elementov-menyu/">#6. Class Helper для элементов меню.</a> </li> <li><a href="http://www.webdelphi.ru/2012/04/firemonkey-2/">#7. Работа с компонентом TPath.</a> </li> <li><a href="http://www.webdelphi.ru/2012/08/firemonkey-ot-prostogo-k-slozhnomu-8-razrabotka-programmy-ya-matematik/">#8. Разработка программы «Я математик».</a> </li> <li><a href="http://www.webdelphi.ru/2012/08/firemonkey-ot-prostogo-k-slozhnomu-9-vpechatleniya-ot-ispolzovaniya/">#9. Впечатления от использования.</a> </li> <li><a href="http://www.webdelphi.ru/2012/08/firemonkey-ot-prostogo-k-slozhnomu-10-dorabotka-tabcontrol-dlya-ya-matematik/">#10. Доработка TabControl для «Я математик».</a> </li> </ul> <h5><a title="Ссылка на раздел" href="#vcl2fm">#</a> <a name="vcl2fm">Переход с VCL на FMX</a></h5> <ul> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/08/09/dual-compile-control/">Переход с VCL на FireMonkey</a>.  Всеволод Леонов (Embarcadero) </li> <li><a href="http://blogs.embarcadero.com/vsevolodleonov/2012/08/21/vclfmxtcanvas/">Переход с VCL на FireMonkey, TCanvas</a>.  Всеволод Леонов (Embarcadero) </li> </ul> <h3><a title="Ссылка на раздел" href="#db">#</a> <a name="db">Работа с БД</a></h3> <ul> <li><a href="http://belenkovsv.ru/page/komponenty-dlja-dostupa-k-bd-kto-bystree-chast-6">Компоненты для доступа к БД. Кто быстрее? Часть 6</a>. (опубликовано в 2011 году, но в прошлом обзоре я этот пост упустил, а материал полезный) - тестирование компонентов доступа к БД в Delphi: SqlLite 3, ClientDataset, DBF (Advantage), TurboDB 6, Dbisam 4.30, MS Access 2010, AbsoluteDatabase 6.05, EasyTable 6.50, Accuracer Database 5.50, NexusDB 3.05.01, Embedded Firebird. Сергей Беленков (SerB) </li> <li><a href="http://www.sql.ru/blogs/servit/1243">Работа с объектами СУБД Caché на примере Delphi</a> (<a href="http://habrahabr.ru/company/intersystems/blog/144306/">копия статьи - на Хабре</a>). servit (Intersystems) </li> <li><a href="http://teran.karelia.pro/articles/item_5733.html">Изображения в SQL Server 2008 Express, с использованием FILESTREAM и WIC</a>. Андрей Терехов </li> <li><a href="http://habrahabr.ru/post/150543/">SQLite и UNICODE</a>. Григорий (<a href="http://habrahabr.ru/users/Krovosos/">Krovosos</a>) </li> </ul> <h4><a title="Ссылка на раздел" href="#dbx">#</a> <a name="dbx">dbExpress</a></h4> <ul> <li><a href="http://echmel.ru/2012/12/dbexpress-internals/">Внутренности dbExpress</a>. Евгений Чмель. </li> <li><a href="http://echmel.ru/2012/12/usin-dbexpress/">Работа с dbExpress</a> - простенький и интересный пример. Евгений Чмель. </li> <li><a href="http://www.webdelphi.ru/2012/10/sqlite-v-delphi-xe3/">SQLite в Delphi XE3.</a> (dbExpress) Владислав Баженов. </li> </ul> <h4><a title="Ссылка на раздел" href="#datasnap">#</a> <a name="datasnap">DataSnap</a></h4> <ul> <li><a href="http://echmel.ru/2012/04/datasnap-server-as-aservice/">DataSnap server как сервис</a>. Евгений Чмель. </li> <li><a href="http://www.webdelphi.ru/2012/08/windows-7-x64-iis-isapi-i-datasnap-xe2-v-kartinkax/">Windows 7 x64, IIS, ISAPI и DataSnap XE2 в картинках.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/08/isapi-mysql-i-datasnap-xe2/">ISAPI, MySQL и DataSnap XE2.</a> Владислав Баженов. </li> </ul> <h4><a title="Ссылка на раздел" href="#oracle">#</a> <a name="oracle">Работа с СУБД Oracle дома. Быстрый старт.</a></h4> <p>Николай Зверев.</p> <ul> <li><a href="http://www.delphinotes.ru/2012/02/oracle.html">Работа с СУБД Oracle дома. Быстрый старт</a> </li> <li><a href="http://www.delphinotes.ru/2012/02/oracle-2-virtualbox.html">Oracle дома. Быстрый старт. Часть 2: настройка виртуальной сети для VirtualBox</a> </li> <li><a href="http://www.delphinotes.ru/2012/02/oracle-3-oracle.html">Oracle дома. Быстрый старт. Часть 3: установка и настройка oracle-клиента</a> </li> <li><a href="http://www.delphinotes.ru/2012/02/oracle-4-delphi-oracle.html">Oracle дома. Быстрый старт. Часть 4: из Delphi в Oracle</a> </li> </ul> <h3><a title="Ссылка на раздел" href="#tools">#</a> <a name="tools">Инструменты для Delphi</a></h3> <ul> <li><a href="http://delphi2010.ru/?p=1108">FinalBuilder</a> (Embarcadero Edition) – обзор. <a name="OLE_LINK4"></a><a name="OLE_LINK3">Александр Божко</a> </li> <li><a href="http://cemick.blogspot.com/2012/03/finalbuilder-versioninfo-delphi-7.html">Чтение в FinalBuilder VersionInfo из проекта Delphi 7</a>. Семен Хмелев </li> <li><a href="http://delphi2010.ru/?p=960">Редизайн интерфейса приложения. #8</a>: Используем QA Audits. Александр Божко </li> <li><a href="http://teran.karelia.pro/articles/item_5553.html">UML моделирование в Delphi. Часть 1</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_5588.html">UML моделирование в Delphi. Часть 2.</a> Андрей Терехов </li> <li><a href="http://www.webdelphi.ru/2012/08/obzor-documentation-insight-enterprise-v-2-6/">Обзор Documentation Insight Enterprise v.2.6.</a> Владислав Баженов. </li> <li><a href="http://www.tdelphiblog.com/2012/09/revised-object-inspector-obzor.html">Revised Object Inspector для Delphi 2010-XE3 от Uwe Schuster.</a> Продвинутый инспектор объектов для Delphi. Описание. Алексей Тимохин. </li> <li><a href="http://delphi.frantic.im/delphi-and-git">Delphi + Git</a>. Александр Котлярский </li> <li><a href="http://keeper89.blogspot.com/2012/02/cnpack-ide.html">Новые фишки в CnPack IDE-Мастере. </a>Юрий Петров </li> <li><a href="http://delphiway.ru/%d0%bd%d0%b5%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d0%b8%d0%b7%d0%bc%d0%b5%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%b2%d0%be%d0%b9%d1%81%d1%82%d0%b2-%d0%b2-dfm-%d0%b8/">Автоматическое изменение свойств в dfm и dproj затрудняют контроль версий</a>. Kverde (блог DelphiWay) </li> <li><a href="http://www.webdelphi.ru/2012/12/html5-builder-glazami-delphi-razrabotchika/">HTML5 Builder глазами Delphi-разработчика.</a> Владислав Баженов. </li> </ul> <h3><a title="Ссылка на раздел" href="#libs">#</a> <a name="libs">Компоненты и библиотеки</a></h3> <ul> <li><a href="http://www.webdelphi.ru/2012/09/23-resheniya-dlya-lokalizacii-i-internacionalizacii-prilozhenij/">23 решения для локализации и интернационализации приложений.</a> Владислав Баженов. </li> <li><a href="http://delphiway.ru/%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%be%d1%80%d1%84%d0%be%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d0%b8-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be/">Проверка орфографии в Delphi с помощью библиотеки Hunspell</a>. Kverde (блог DelphiWay) </li> <li><a href="http://www.fast-report.com/ru/blog/9/show/">Простейший пример использования Fastcube для анализа данных</a>. Олег Прялков (Fast Report) </li> <li><a href="http://delphi2010.ru/?p=1260">Преобразование отчетов Rave Report в FastReport</a>. Александр Божко </li> <li><a href="http://www.webdelphi.ru/2012/01/bystraya-obrabotka-dannyx-excel-v-delphi/">Быстрая обработка данных Excel в Delphi.</a> Владислав Баженов. </li> <li><a href="http://habrahabr.ru/post/144681/">Библиотека OmniThreadLibrary — простая многопоточность в среде Delphi</a>. Антон Алисов </li> <li>Сделан перевод на русский язык книги: <a href="https://leanpub.com/omnithreadlibrary-ru">Параллельное программирование с OmniThreadLibrary</a> </li> <li><a href="http://deeptown12.blogspot.com/2012/04/microsoft-script-control-1.html">Шпаргалка. Использование Microsoft Script Control в приложениях - #1</a>. Дмитрий Кузан </li> <li><a href="http://deeptown12.blogspot.com/2012/04/microsoft-script-control-2.html">Шпаргалка. Использование Microsoft Script Control в приложениях - #2</a>. Дмитрий Кузан </li> <li><a href="http://deeptown12.blogspot.com/2012/04/microsoft-script-control-3.html">Шпаргалка. Использование Microsoft Script Control в приложениях - #3</a>. Дмитрий Кузан </li> <li><a href="http://akella225.blogspot.com/2012/05/delphi.html">Как я локализовал свое приложение на Delphi</a>. Выбор инструмента для локализации. <a href="https://plus.google.com/101747026044283655090">Vasiliy Pupkin</a>/Akella/X11 </li> <li><a href="http://teran.karelia.pro/articles/item_4507.html">Function Discovery API</a>.  Я тут было озадачился вопросом, как программно отправить видео воспроизводится на ТВ по DLNA. Андрей Терехов </li> </ul> <h4><a title="Ссылка на раздел" href="#libs_author">#</a> <a name="libs_author">Авторские работы</a></h4> <ul> <li><a href="http://www.delphinotes.ru/2012/11/delphi-notes-splitter-v108.html">Delphi Notes Splitter обновлён (v1.08)</a> Николай Зверев. </li> <li><a href="http://delphikingdom.ru/asp/viewitem.asp?catalogid=1444">Компонент TDBComboBoxEx</a>. <a href="http://delphikingdom.ru/asp/users.asp?ID=7966">Александр Чмиль</a> </li> <li><a href="http://delphikingdom.ru/asp/viewitem.asp?catalogid=1443">Компонент TMStringGrid</a>. StringGrid с объединением ячеек, выравниванием текста, и редактором ячеек в виде ComboBox-а. <a href="http://delphikingdom.ru/asp/users.asp?ID=7006">Дамир </a></li> <li><a href="http://delphikingdom.ru/asp/viewitem.asp?catalogid=1442">Парсер математических выражений. Быстрое вычисление выражений и массива выражений</a>. <a href="http://delphikingdom.ru/asp/users.asp?ID=1091">Юрий Писарев</a> </li> <li><a href="http://delphikingdom.ru/asp/viewitem.asp?catalogid=1441">Продвинутые диалоговые окна</a>. <a href="http://delphikingdom.ru/asp/users.asp?ID=20825">Павел Разбойников</a> </li> <li><a href="http://delphi.frantic.im/ttracklabel">TTrackLabel</a>. Простой и изящный подход к реализации окна настроек. Александр Котлярский </li> </ul> <h4><a title="Ссылка на раздел" href="#libs_fm">#</a> <a name="libs_fm">Firemonkey - обзоры компонентов</a></h4> <ul> <li><a href="http://delphixe.ru/2012/01/firemonkey-%d0%ba%d0%be%d0%bc%d0%bf%d0%be%d0%bd%d0%b5%d0%bd%d1%82%d1%8b-%d0%bf%d0%b5%d1%80%d0%b2%d0%b0%d1%8f-%d0%bb%d0%b0%d1%81%d1%82%d0%be%d1%87%d0%ba%d0%b0/">Первая ласточка: TMS Instrumentation Workshop </a>. Александр Божко </li> <li><a href="http://delphixe.ru/2012/03/apesuite/">Apesuite</a>. Александр Божко </li> <li><a href="http://delphixe.ru/2012/04/tms-pack-for-firemonkey/">TMS Pack for FireMonkey</a>. Александр Божко </li> <li><a href="http://delphixe.ru/2012/05/fastreport-%d0%b4%d0%bb%d1%8f-firemonkey/">FastReport для FireMonkey</a>. Александр Божко </li> <li><a href="http://www.webdelphi.ru/2012/09/obzor-vozmozhnostej-komponenta-tms-grid-dlya-firemonkey-tmsfmxgrid/">Обзор TMS Grid для FireMonkey (TMSFMXGrid).</a> Владислав Баженов. </li> <li><a href="http://keeper89.blogspot.com/2012/05/fastreports-for-firemonkey.html">Вебинар FastReports for FireMonkey</a> </li> </ul> <h3><a title="Ссылка на раздел" href="#tips">#</a> <a name="tips">Полезные советы</a></h3> <ul> <li><a href="http://alexander-bagel.blogspot.com/2012/12/api.html">Нужны ли недокументированные API?</a> Об оптимизации. <a href="http://www.blogger.com/profile/03072586754182036553">Александр (Rouse_) Багель</a> </li> <li><a href="http://habrahabr.ru/post/160455/">Красивые disabled иконки «малой кровью»</a>. Ярослав Черных </li> <li><a href="http://habrahabr.ru/post/147575/">Маленькие хитрости: автоматическое восстановление вида указателя курсора</a>. Виктор Востриков </li> <li><a href="http://echmel.ru/2012/05/setting-cursor-dbgrid-position/">Позиционирование курсора в центре DBGrid’a</a>. Евгений Чмель. </li> <li><a href="http://delphiway.ru/%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81-subwcrev-tortoisesvn/">Работа в Delphi с интерфейсом SubWCRev программы TortoiseSVN</a>. Kverde (блог DelphiWay) </li> <li><a href="http://deeptown12.blogspot.com/2012/02/ole-olecontainer.html">Полезняшки. Загрузка файла в БД в виде внедренного OLE-объекта без использование стандартного OleContainer</a>. Дмитрий Кузан </li> <li><a href="http://deeptown12.blogspot.com/2012/02/devexpresscxvirtualverticalgrid.html">Полезняшки: DevExpress.cxVirtualVerticalGrid как средство редактирование и отображения данных таблицы БД</a>. Дмитрий Кузан </li> <li><a href="http://habrahabr.ru/post/157783/">Доступ к переменным Thread local storage (TLS) любого треда</a>. Дмитрий (DCa) </li> <li><a href="http://habrahabr.ru/post/157777/">Бесконечные генераторы значений на Delphi + Ассемблер</a>. Дмитрий (DCa) </li> <li><a href="http://habrahabr.ru/post/163241/">Расставляем точки над i в Delphi RAII</a>. (<a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%B0_%D0%B5%D1%81%D1%82%D1%8C_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F">RAII – это</a>) Иван Левашев </li> <li><a href="http://habrahabr.ru/post/145140/">Windows Sockets, IOCP и Delphi</a>. способ массовой асинхронной работы с большим количеством сокетов с использованием I/O Completion Ports. Mr_Developer </li> <li><a href="http://entropiya-blog.ru/opredelenie-serijnogo-nomera-semnogo-nositelya.html">Определение серийного номера съемного носителя</a>. Источник: Блог Энтропия </li> <li><a href="http://entropiya-blog.ru/avtorizaciya-s-ispolzovaniem-semnogo-nositelya.html">Авторизация с использованием съемного носителя</a>. Источник: Блог Энтропия </li> </ul> <h3><a title="Ссылка на раздел" href="#transl">#</a> <a name="transl">Переводы GunSmoker-а</a></h3> <p>Александр Алексеев (gunsmoker). </p> <ul> <li><a href="http://www.transl-gunsmoker.ru/2012/02/blog-post.html">Некоторые папки двигать нельзя - и вам придётся научиться с этим жить</a>. Это перевод <a href="http://blogs.msdn.com/b/oldnewthing/archive/2010/08/06/10046812.aspx">Some known folders cannot be moved, but others can, and you'll just have to accept that</a>. Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2012/02/blog-post_18.html">Как мне найти программу, которая держит этот файл?</a> Это перевод <a href="http://blogs.msdn.com/b/oldnewthing/archive/2012/02/17/10268840.aspx">How do I find out which process has a file open?</a> Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2012/02/blog-post_19.html">Используется ли файл?</a> Это перевод <a href="http://blog.delphi-jedi.net/2010/11/14/is-file-in-use/">Is File In Use</a>. Christian Wimmer. </li> <li><a href="http://www.transl-gunsmoker.ru/2012/03/windows.html">Об окнах Windows</a>. Это перевод <a href="http://msdn.microsoft.com/en-us/library/ms632597(VS.85).aspx">About Windows</a>. MSDN. </li> <li><a href="http://www.transl-gunsmoker.ru/2012/04/windows.html">Возможности окон Windows</a>. Это перевод <a href="http://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx">Window Features</a>. MSDN. </li> <li><a href="http://www.transl-gunsmoker.ru/2012/09/blog-post.html">Наверняка вы думаете о сборке мусора неправильно</a>. Это перевод <a href="http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx">Everybody thinks about garbage collection the wrong way</a>. Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2012/09/how-can-SIGINT-be-safely-delivered-on-the-main-thread.html">Как безопасно отправить SIGINT в главный поток? Это перевод </a><a href="http://blogs.msdn.com/b/oldnewthing/archive/2008/07/28/8781423.aspx">How can SIGINT be safely delivered on the main thread?</a> Реймонд Чен. </li> <li><a href="http://www.transl-gunsmoker.ru/2012/09/what-does-an-invalid-handle-exception-in-LeaveCriticalSection-mean.html">Что означает исключение Invalid Handle в LeaveCriticalSection?</a> Это перевод <a href="http://blogs.msdn.com/b/oldnewthing/archive/2006/12/11/1259599.aspx">What does an invalid handle exception in LeaveCriticalSection mean?</a> Реймонд Чен. </li> </ul> <h3><a title="Ссылка на раздел" href="#web">#</a> <a name="web">Работа с сетью</a></h3> <ul> <li><a href="http://www.webdelphi.ru/2012/11/zagruzka-izobrazhenij-v-formate-multipartform-data-na-yandeks-fotki/">Загрузка изображений в формате multipart/form-data на Яндекс.Фотки.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/11/synapse-rabota-s-vlozheniyami-v-pismax/">Synapse: работа с вложениями в письмах.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/12/rabota-s-imap-v-synapse-1/">Работа с IMAP в Synapse #1</a>. Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/04/ispolzovanie-json-pri-rabote-s-google-api/">Использование JSON при работе с Google API.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/04/parsing-json-v-delphi-pod-windows-i-macos/">Парсинг JSON в Delphi под Windows и MacOS.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/04/synapse_webdav/">Synapse: работа с WebDAV на примере Яндекс.Диска.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/05/primer-ispolzovaniya-perechislitelej-v-superobject/">Пример использования перечислителей в SuperObject.</a> Владислав Баженов. </li> <li><a href="http://www.webdelphi.ru/2012/07/yandeks/">API Яндекс.Диска: чтение списка ресурсов и скачивание файлов.</a> Владислав Баженов. </li> </ul> <h3><a title="Ссылка на раздел" href="#games">#</a> <a name="games">GUI, GlScene и разработка игр на FreePascal/Delphi</a></h3> <ul> <li><a href="http://habrahabr.ru/post/153637/">О разработке небольшой игры с помощью Lazarus</a>. Александр (<a href="http://habrahabr.ru/users/Corwal/">Corwal</a>) </li> <li><a href="http://www.vr-online.ru/content/box2d-na-delphi-chast-1-vvedenie-5868">Box2D на Delphi. Часть 1. Введение</a>. Адаптированный к Delphi перевод мануала к физическому движку Box2D. Andrew Jacuk </li> <li><a href="http://www.vr-online.ru/content/box2d-na-delphi-chast-2-hello-world-5871">Box2D на Delphi. Часть 2. Hello, World!</a> Andrew Jacuk </li> </ul> <h4><a title="Ссылка на раздел" href="#lampogolovii">#</a> <a name="lampogolovii">Lampogolovii о GUI и разработке игр</a></h4> <p>Я включил в подборку только те посты, которые имеют отношение к Delphi. В блоге же автора можно найти и другие материалы. </p> <ul> <li><a href="http://lampogolovii.blogspot.com/2012/05/gui.html">Gui: использование анимированных кнопок</a> </li> <li><a href="http://lampogolovii.blogspot.com/2012/05/gui-buttonsdemo.html">Gui: ButtonsDemo</a> </li> <li><a href="http://lampogolovii.blogspot.com/2012/05/blog-post.html">Поговорим о дизайне игр?</a> </li> <li><a href="http://lampogolovii.blogspot.com/2012/03/glscene.html">Конкурс на GlScene: Бомбермен</a> </li> <li><a href="http://lampogolovii.blogspot.com/2012/04/gui.html">Gui: простая анимированная кнопка</a> </li> <li><a href="http://lampogolovii.blogspot.com/2012/02/menumanager.html">MenuManager, стартуем...</a> </li> <li><a href="http://lampogolovii.blogspot.com/2012/12/blog-post.html">Психология разработки: взлеты и падения...</a> </li> <li><a href="http://lampogolovii.blogspot.com/2012/12/zengl.html">ZenGL: введение - GL движок для кроссплатформенной (Linux, MacOs, iOs, Android, Windows) разработки игр на Lazarus</a> </li> </ul> <h3><a title="Ссылка на раздел" href="#directx">#</a> <a name="directx">DirectX</a></h3> <ul> <li><a href="http://teran.karelia.pro/articles/item_5432.html">Getting Started with DirectWrite</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_5437.html">DirectWrite: CustomTextRenderer, Hit-Test</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_5710.html">Direct2D и слоистые окна. Дубль 2</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_5782.html">Загрузка изображений в Direct2D</a>. Андрей Терехов </li> <li><a href="http://teran.karelia.pro/articles/item_5548.html">Олимпийские кольца</a>. Для рисования используем <a href="http://teran.karelia.pro/tags/Direct2D">Direct2D</a>, для анимации <a href="http://teran.karelia.pro/tags/animation">Windows Animation Manager</a>. Для уменьшения размера исполняемого файла - реализуем программу без использования VCL. Андрей Терехов </li> </ul> <h3><a title="Ссылка на раздел" href="#other">#</a> <a name="other">Другое</a></h3> <ul> <li><a href="http://delphi.frantic.im/delphi-to-freepascal-on-mac-osx">Из Delphi в FreePascal под Mac OSX</a>. Александр Котлярский </li> <li><a href="http://habrahabr.ru/company/it_dominanta/blog/147866/">Обзор зарплат программистов Java/C++/C#/Delphi</a>. рекрутинговая компания <a href="http://www.it-dominanta.ru/">IT-Доминанта</a> </li> <li><a href="http://habrahabr.ru/post/150943/">Куда стоило бы развиваться Delphi вместо того, куда оно развивается сейчас</a> (в комментариях <s>чудесный срач</s> оживленная дискуссия). <a href="http://habrahabr.ru/users/Nashev/">Nashev</a> (habrahabr) </li> <li><a href="http://delphi.frantic.im/10-reasons-to-abandon-delphi">10 причин перестать программировать на Delphi</a>. Просто мысли в случайном порядке. Александр Котлярский </li> <li>Open Source проект на Delphi: <a href="http://habrahabr.ru/post/142701/">Домашняя электронная библиотека: MyHomeLib + FBD</a>. Алексей Пеньков </li> <li><a href="http://habrahabr.ru/post/146800/">Расширяем функциональность клавиатуры</a> с помощью Delphi 7. <a name="OLE_LINK6"></a><a name="OLE_LINK5">Александр (</a><a href="http://habrahabr.ru/users/Corwal/">Corwal</a>) </li> <li><a href="http://habrahabr.ru/post/136841/">Induc по-прежнему угроза для Delphi</a>.  Денис (rst59, habrahabr) </li> <li><a href="http://www.delphinotes.ru/2012/02/delphi-developer-certification.html">Delphi Developer Certification</a>. Николай Зверев. </li> <li><a href="http://habrahabr.ru/post/158381/">Интервью с CYBERMANIAC</a> (автора Neo Sign 0f Misery, древней электронной книги “Теоретические основы крегинга”). </li> </ul> <p></p> <p></p> <p></p> <p> <hr /> В публикации использована фотография с сайта FreeDigitalPhotos.net. Автор: <a href="http://www.freedigitalphotos.net/images/view_photog.php?photogid=2664">Stuart Miles</a>.</p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com15tag:blogger.com,1999:blog-1724180200433302177.post-38452252499941464112012-09-21T03:56:00.001+03:002013-12-16T21:58:15.297+02:00Revised Object Inspector для Delphi 2010-XE3 от Uwe Schuster. Обзор.<p>Этот пост является укороченным переводом <a title="Improved Object Inspector for Delphi" href="http://www.bitcommander.de/blog/index.php/2012/01/01/oi-rev/" target="_blank">описания первой версии Продвинутого Инспектора Объектов из блога Uwe</a>. </p> <hr /> <p>Не так давно, коллега рассказал про <a href="http://www.tdelphiblog.com/p/experts.html" target="_blank">расширение для Delphi</a> замещающий стандартный инспектор объектов альтернативным, с поддержкой фильтра и функции любимых свойств. Пользуюсь этим расширением уже месяц в Delphi XE. Работает стабильно. </p> <p>На данный момент Revised Object Inspector поддерживает Delphi 2010, Delphi XE, XE2 и XE3. На 21 сентября 2012 года последней версией является Beta 6.</p> <p>Автор эксперта: Uwe Schuster. Uwe также является активным разработчиком <a href="http://www.bitcommander.de/blog/index.php/category/delphisvn/">Version Insight Plus</a>, <a href="http://www.bitcommander.de/blog/index.php/2012/05/09/modal-search-1/">Modal Search Dialog expert</a>, Platforms Expert, <a href="http://www.bitcommander.de/blog/index.php/2012/07/29/comutils/">IDE Compiler Utils</a>, а также <a href="http://jedivcs.sourceforge.net/">Jedi Version Control System</a>.</p> <p>См. также:</p> <ul> <li><a href="http://www.bitcommander.de/blog/index.php/downloads/">Страница загрузок в блоге Uwe</a>. </li> <li><a href="http://www.bitcommander.de/blog/index.php/category/ide/">Все публикации об экспертах в блоге Uwe</a>. </li> </ul> <p>Вот так выглядит Revised Object Inspector. Отличия в закладке Favorites и строке фильтрации.</p> <p> <img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Продвинутый Object Inspector" border="0" alt="Продвинутый Object Inspector" src="http://lh4.ggpht.com/-YA1RLh8OtuE/UFu9dI6c45I/AAAAAAAABsM/Wa00RSPV9-8/ObjectInspectorRevised%25255B2%25255D.png?imgmax=800" width="369" height="342" /></p> <a name='more'></a> <p>А вот стандартный Object Inspector в Delphi XE2:</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Стандартный Object Inspector в Delphi XE2" border="0" alt="Стандартный Object Inspector в Delphi XE2" src="http://lh3.ggpht.com/-aZlEonT1feY/UFu9d5AAJ-I/AAAAAAAABsU/SjZswNgj1rI/ObjectInspectorDefault%25255B2%25255D.png?imgmax=800" width="369" height="341" /></p> <p> </p> <p>Фильтр позволяет искать свойства по строке. Фильтрация не чувствительна к регистру. Фильтр также учитывает дочерние свойства. Вот почему на следующей иллюстрации можно видеть свойство Font, так как у него есть дочернее свойство Style.</p> <p>Фильтрация в продвинутом инспекторе объектов:</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Фильтр в инспекторе объектов в Delphi" border="0" alt="Фильтр в инспекторе объектов в Delphi" src="http://lh3.ggpht.com/-me5fXpY0jnI/UFu9fIYz4VI/AAAAAAAABsc/a_O-rNtnBZw/ObjectInspectorFilterSty%25255B2%25255D.png?imgmax=800" width="369" height="161" /></p> <p>Фильтр позволяет использовать точку, при фильтрации. Например, можно ввести Font.Style, или даже t.Style.</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Фильтр в инспекторе объектов в Delphi" border="0" alt="Фильтр в инспекторе объектов в Delphi" src="http://lh3.ggpht.com/-DbHs6-vOxeY/UFu9fxg03RI/AAAAAAAABsk/FepI4N24jwI/ObjectInspectorFilterTDotSty%25255B2%25255D.png?imgmax=800" width="369" height="92" /></p> <p>Чтобы добавить свойство в Favorites, используйте пункт Add Favorite в контекстном меню инспектора объектов. Добавленные в Favorites свойства подсвечиваются в инспекторе зелёным цветом.</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Favorites в Delphi Object Inspector" border="0" alt="Favorites в Delphi Object Inspector" src="http://lh4.ggpht.com/-xXZUomGLx0w/UFu9hAQ8R4I/AAAAAAAABss/g-4p1cWZtC8/ObjectInspectorAddFavoritesPM%25255B2%25255D.png?imgmax=800" width="369" height="374" /></p> <p>Свойства, добавляемые в Favorites, по умолчанию не являются глобальными. Но если очистить название класса, то они станут глобальными. Обратите внимание, что частичные имена классов здесь не поддерживаются.</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Add favorite в Delphi Object Inspector" border="0" alt="Add favorite в Delphi Object Inspector" src="http://lh6.ggpht.com/-29cM7gppda0/UFu9iTAh5uI/AAAAAAAABs0/ySvbVoXkNLw/ObjectInspectorAddFavoritesDialog%25255B2%25255D.png?imgmax=800" width="344" height="209" /></p> <p>Если свойство было добавлено в Favorites случайно, вы можете его убрать с помощью команды “Remove Favorite” контекстного меню, на закладке Favorites.</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Remove favorite в Delphi Object Inspector" border="0" alt="Remove favorite в Delphi Object Inspector" src="http://lh4.ggpht.com/-GxXP01_sIac/UFu9jRjvEZI/AAAAAAAABs8/j2im1pd81i0/ObjectInspectorRemoveFavoritesPM%25255B2%25255D.png?imgmax=800" width="369" height="356" /></p> <p>Диалог настроек продвинутого инспектора объектов можно открыть с помощью команды “Environment Options | Object Inspector”.</p> <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Настройки продвинутого инспектора объектов" border="0" alt="Настройки продвинутого инспектора объектов" src="http://lh4.ggpht.com/-AMTy1vlhBkw/UFu9kpHyWtI/AAAAAAAABtE/fVjZ0eEuvwI/ObjectInspectorPropertiesRevised%25255B2%25255D.png?imgmax=800" width="623" height="456" /></p> <p>И, отвечая на незаданный вопрос «можно ли получить исходный код эксперта», отвечу – нет, и более того, автор сообщил, что не собирается их открывать.</p> <p><a href="http://www.bitcommander.de/blog/index.php/downloads/">Скачать установщик можно в блоге Uwe</a>. </p> Алексей Тимохинhttp://www.blogger.com/profile/11853041033911520876noreply@blogger.com17