19 нояб. 2015 г.

RAD Studio 10 Seattle Update 1

   Embarcadero Technologies выпустила первое обновление RAD Studio 10 Seattle. Оно исправляет несколько сотен ошибок, подробнее... В этой бочке мёда не обошлось без ложки дёгтя: это обновление только для владельцев RAD Studio 10 Seattle с лицензией "Update Subscription" (в менеджере лицензий в описании лицензии должен быть пункт "Is Subscription"). Таким образом, остальные покупатели RAD Studio 10 - в пролете, и после установки этого обновления будут вынуждены поставить старую версию.

Delphi 10 Seattle Web Install (includes Update 1)
C++Builder 10 Seattle Web Install (includes Update 1)
RAD Studio 10 Seattle Web Install (includes Update 1)

24 окт. 2015 г.

Изучайте используемый инструментарий!

   Вчера начал разбираться с чужим проектом на Delphi 7. Система весьма сложная – несколько взаимосвязанных АРМов по 20-50 форм (а может и больше, точно не считал). Усложняет все то, что она разрабатывается уже давно и пережила смену нескольких команд разработчиков. Каждая команда приносила в проект свои инновации. Например, одна из них перевела доступ к БД Oracle с BDE на ADO. При этом все старые объекты для работы с базами через BDE (TDatabase, TTable, TQuery и TStoredProc) продолжают лежать на формах рядом с их копиями для работы через ADO (TADOConnection, TADOTable, TADOQuery и TADOStoredProc). Они даже клонировали объекты TDataSource для ADODataSet'ов. Все замеченные беглым взглядом "интересные" моменты перечислять не буду, а вернусь к заголовку этой заметки. Одна из команд добавила в проект DBGridEh из EhLib 6.0 в компанию к стандартному DBGrid'у. Хороший выбор grid'а, одобряю ;-) Хочу поделится с вами их реализацией сортировки по клику на заготовке колонки. К каждому DBGridEh'у, подчеркиваю - к каждому DBGridEh'у, был написан обработчик OnSortMarkingChanged:
...
dsXYZ: TDataSource;
gridXYZ: TDBGridEh;
...
procedure TfmMain.gridXYZSortMarkingChanged(Sender: TObject);
var
  i: Integer;
  s: String;
  b: TBookmark;
begin
  Screen.Cursor := crHourGlass;
  b := dsXYZ.DataSet.GetBookmark;
  s := '';
  for i := 0 to gridXYZ.SortMarkedColumns.Count - 1 do
    begin
     s := s + gridXYZ.SortMarkedColumns[i].FieldName;
     if (gridXYZ.SortMarkedColumns[i].Title.SortMarker = smDownEh) then
        s := s + ' DESC';
     s := s + ';';
    end;
  TADODataSet(dsXYZ.DataSet).IndexFieldNames := s;
  dsXYZ.DataSet.GotoBookmark( b );
  Screen.Cursor := crDefault;
end;
   В одном из АРМ'ов только на главной форме больше 20 DBGridEh'ов лежащих на страницах TNotebook. И на каждый был написан свой обработчик! Если говорить о Delphi, или о объектно-ориентированном программировании в целом, то почему бы все эти десятки одинаковых обработчиков не заменить на один, где вместо gridXYZ использовать TDBGridEh(Sender) (или (Sender as TDBGridEh)), а вместо dsXYZ.DataSet использовать TDBGridEh(Sender).DataSet? Но самое интересное, что для сортировки в DBGridEh и такого обработчика писать не надо. EhLib для автоматической сортировки данных в DataSet'е имеет набор специальных объектов и от программиста требуется только добавить в раздел "uses" любого модуля в проекте один из модулей EhLibXXX (EhLibBDE, EhLibADO, EhLibCDS... в зависимости от подключенного к grid'у DataSet'а). Таким образом, вместо написания и копипаста десятков обработчиков OnSortMarkingChanged нужно было всего лишь подключить к проекту небольшую юниту EhLibADO.

   Еще, как зануда, отмечу, что вещи в стиле
Screen.Cursor := crHourGlass;
... 
Screen.Cursor := crDefault;
необходимо использовать совместно с конструкцией Try...Finally...End, т.к. если между этими строчками во время выполнения программы произойдет ошибка, то курсор не будет восстановлен. Т.е. нужно было написать так:
Screen.Cursor := crHourGlass;
Try
 ...
Finally
 Screen.Cursor := crDefault;
End
   А еще к восстановлению курсора в блок Finally...End было бы неплохо, для высвобождения памяти распределенной при вызове GetBookmark, добавить DataSet.FreeBookmark(b). Это же элементарно – для всех изменяемых или создаваемых ресурсов, на случай ошибки, нужно гарантировать возвращение их к исходному состоянию или высвобождению занимаемой ими памяти.

   Так, что господа, те кто считает себя программистом, дружите с Try...Finally...End и главное - ИЗУЧАЙТЕ ИСПОЛЬЗУЕМЫЙ ИНСТРУМЕНТАРИЙ!!!

8 окт. 2015 г.

Idera Inc покупает Embarcadero Technologies

   Слухи о том, что компания Idera, Inc покупает компанию Embarcadero Technologies, которые появились на форумах и в блогах в середине сентября подтвердились. Вчера инвестиционная компания Thoma Bravo, LLC опубликовала об этом событии свой пресс-релиз. А немного позже был опубликован и официальный пресс-релиз "Idera Announces Intent to Acquire Embarcadero, Expands Position in Database Management and Developer Tools Markets".
   Вот и закончился семилетний период жизни нашего любимого Delphi в компании Embarcadero Technologies. За это время было сделано 11 релизов Delphi:
  • Delphi 2009 (25 августа 2008) - полная поддержка unicode; новые элементы языков программирования (например, Generics); обновление VCL...
  • Delphi 2010 (25 августа 2009) - повышение производительности; поддержка Windows 7 API, Direct2D и мультисенсорного ввода; IDE Insight; расширение RTTI...
  • Delphi XE (30 августа 2010) – новые возможности VCL, RTL и Open Tools API; доработки в редакторе кода; обновление DataSnap...
  • Delphi XE2 (1 сентября 2011) – поддержка Windows 64, Mac OS X и iOS; кросс-платформенная библиотека FireMonkey; библиотека LiveBindings; улучшения в технологии DataSnap...
  • Delphi XE3 (3 сентября 2012) – поддержка Windows 8; улучшенная поддержка Apple Mac OS X; Firemonkey 2/FM²; удалена поддержка iOS...
  • Delphi XE4 (22 апреля 2013 ) – вернулась поддержка iOS; функционал для разработки мобильных приложений (iPhone и iPad); улучшено взаимодействие с базами данных...
  • Delphi XE5 (11 сентября 2013) - поддержка разработки ПО для устройств с архитектурой ARM, работающих под управлением Android...
  • Delphi XE6 (15 апреля 2014) - исправлены сотни ошибок; новые компоненты (Application Tethering Components, Taskbar component, компоненты для работы с датчиками (акселерометр, GPS и гироскоп)...), взаимодействие с сервисами в облаках (BaaS); возможность создания приложений для Google Glass; новые иконки в IDE...
  • Delphi XE7 (2 сентября 2014) – изменения в RTL и FireMonkey, удалены компоненты для работы с BDE...
  • Delphi XE8 (7 апреля 2015) - поддержка iOS 64; в IDE интегрирована новая система контроля версий Mercurial Version Control System; добавлены два новых независящих от платформы типа данных (FixedInt и FixedUInt)...
  • Delphi 10 Seattle (31 августа 2015) - поддержка Windows 10, iOS 8.4, Android 5.1.1, API WinRT, DirectX 12; новые компоненты...
Как видите, программисты компании Embarcadero трудились над развитием Delphi в стиле "ни дня без строчки", т.е. "ни года без релиза". Для сравнения компания Borland за 13 лет (с 1995-го по 2008-й), если не считать "мертворожденных" Kylix и Delphi 8.NET, были сделаны всего 10 резов Delphi. Хотя авторство Delphi 2009 спорно, т.к. эта версия была выпущена Embarcadero всего через несколько месяцев после покупки компании Borland. По большому счету, не важно, какая компания разрабатывает Delphi (скорбим только о Borland). Важно то, чтобы команда разработчиков Delphi дружной толпой, не снижая набранного темпа, продолжила работу над своим проектом под крышей Idera, а компания Idera уделяла больше внимания и средств на дальнейшее развитие и продвижение Delphi.

21 апр. 2014 г.

FastReport VCL 5. Улучшение интерактивности

   Интерактивные отчеты позволяют определить в отчёте действие, которое произойдет при щелчке мыши на каком-нибудь объекте отчета в окне предварительного просмотра. В предыдущих версиях FastReport существовало несколько способов сделать отчет интерактивным.

11 апр. 2014 г.

FastReport. PDF-экспорт и встраивание шрифта

   В списке новшеств FastReport VCL 5 значится "В PDF-экспорт улучшено встраивание шрифтов: вместо целого шрифта встраивается только используемое в отчёте подмножество символов шрифтов. Это позволяет значительно сократить размер файла". В своих программах я часто работаю с документами в PDF-формате, поэтому вопрос размера документа, экспортированного из FastReport в PDF-файл меня интересует.