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

Delphi XE3

В этом посте, как и обещал, немного расскажу об утилите, позволяющей вставлять элементы структуры БД в текст, посредством буфера обмена. Рабочее название DB2Clipboard.

Зачем это нужно?

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

Собственно, это развитие того приложения, о котором я писал больше года назад.

Как это работает?

В данной версии программы, структура базы данных загружается из  .xsd файла, который генерируется с помощью ERStudio (см. предыдущий пост). В отличие от предыдущего варианта данная версия может работать практически с любой СУБД. Минус, собственно заключается в том, что требуется ERStudio. Как и раньше на экране висит StayOnTop форма в левой части которой находится список таблиц (представлений, запросов и т.д.), а справа – набор кнопок, каждая из которых соответствует полю в соответствующей таблице. То, как это выглядит на практике показано на видео. Рекомендую смотреть в HD в полноэкранном режиме.

 Что сделано?

В настоящей версии поддерживаются скрипты. Т.е. можно вставить не только непосредственно имя поля, но и некий текст сгенерированный на основе данных модели. Например, если активирован скрипт

FieldByName(‘<fn>’).as<ft>;,

то вместо <fn> в текст будет вставляться имя поля, а вместо <ft> – его тип. Так же реализована поддержка циклического перебора полей и имитация нажатия некоторых клавиш (Enter, Home, Tab и т.д.).

Как это реализовано?

Поразмыслив, я решил полностью переработать структуру программы. Написал несколько классов.

TmbsTimer = class(TTimer)
 {skip}

 public
  property fgw: HWND read Ffgw write SetFGW;
end;

TmbsTableInfo = class
{skip}
 public

 constructor Create;

  property TblName: string read GetTableName write SetTableName;
  property FieldList: TmbsFieldList read GetFieldList  write SetFieldList;
end;

TmbsTableList = class
{skip}
  public
    { public declarations }
    constructor Create;
    procedure Add(pTable: TmbsTableInfo);
    procedure Delete(Index: Integer);
    function Count: Integer;
    procedure ImportXML(FileName: string);
    procedure Clear;

    property Tables[Index: Integer]: TmbsTableInfo read GetTable; default;
end;

TmbsFieldInfo =  class
{skip}
  public
  property FldName: string read GetFLDName write SetFLDName;
  property Table: TmbsTableInfo read GetTable write SetTable;
  property FldSize: integer read GetFldSize write SetFldSize;
  property FldType: string read GetFldType write SetFldType;
  property Checked: boolean read GetChecked write SetChecked;

end;

TmbsFieldList = class

{skip} 

  public
    { public declarations }
    constructor Create;
    procedure Add(pField: TmbsFieldInfo);
    procedure Delete(Index: Integer);
    function Count: Integer;
    property Table: TmbsTableInfo read GetTable write SetTable;
    property Fields[Index: Integer]: TmbsFieldInfo read GetField; default;
  published
    { published declarations }
end;

  TmbsCustomButton = class(TBitBtn)
{skip}
  public
    { Public declarations }
    procedure Click; override;
    property FGW: HWND read FFGW write SetFGW;
    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    destructor Destroy; override;
  published
    { Published declarations }
    property InsertedText: string read GetInsertedText write SetInsertedText;
    property Timer: TmbsTimer read GetMbsTimer write SetmbsTimer;
  end;

  TmbsTblButton = class(TmbsCustomButton)
{skip}
  public
    { Public declarations }
     function ExpressionToInsString(AEpression: string): string;
     procedure Click; override;

  published
    { Published declarations }
    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    property Expression: string read GetExpression write SetExpression;
    property DefExpressionIndex: integer read GetDefExpressionIndex write SetDefExpressionIndex;
    property Table: TmbsTableInfo read GetTable write SetTable;
  end;

  TmbsFieldButton = class(TmbsCustomButton)
{skip}
  public
    { Public declarations }
    class function ReplaceTblTags(s: string; aTbl: TmbsTableInfo): string; static;
     function ExpressionToInsString(AEpression: string): string;
     procedure Click; override;
  published
    { Published declarations }

    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    property Field: TmbsFieldInfo read GetField write SetField;
    property InsertType: TmbsFldInsType read GetInsertType write SetInsertType;
    property Expression: string read GetExpression write SetExpression;
    property DefExpressionIndex: integer read GetDefExpressionIndex write SetDefExpressionIndex;
  end;

  TmbsFieldCheckBox = class(TcheckBox)
{skip}

 published
    { Published declarations }

    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    property Field: TmbsFieldInfo read GetField write SetField;

  end;

Выше приведены фрагменты описания классов. Вкратце, что для чего…

  • TmbsTimer – таймер, который “слушает” систему на предмет текущего окна, хэндл которого и хранит в свойстве fgw.
  • TmbsTableInfo – информация о таблице, содержит название таблицы и список полей.
  • TmbsTableList – список таблиц. Кроме обычных для списка методов содержит метод ImportXML.
  • TmbsFieldInfo- информация о поле
  • TmbsFieldList- список полей
  • TmbsCustomButton- базовый класс, реализующий кнопку, которая вставляет текст в активное окно (то самое, хэндл которого хранит таймер).
  • TmbsTblButton – кнопка, вставляющая информацию о таблице.
  • TmbsFieldButton – кнопка, вставляющая информацию о поле.
  • TmbsFieldCheckBox- чекбокс, для выбора полей, обрабатываемых в выражении.

Вполне возможно, что код будет рефакториться, но такая организация классов уже сейчас позволяет довольно легко построить пользовательский интерфейс.

Что дальше?

Естественно, самым логичным шагом было бы обеспечить прямой импорт структуры непосредственно из БД. Что я и планирую сделать используя FireDAC.

Кроме того, работа над эргономикой. Например, фильтр таблиц, “горячие клавиши” и т.д.

А можно посмотреть?

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

С февраля месяца 2013-го года начинается серия вебинаров Developer Direct. Ближайший вебинар начнется менее чем через час.

Вам нужно зарегистрироваться всего 1 раз!

Эти вебинары в максимально благоприятном для восприятия режиме будут проходить раз в неделю. Представители Embarcadero и внешние эксперты расскажут о наиболее актуальных вопросах разработки современных бизнес-приложений. Вы также можете присылать свои предложения и вопросы заранее, а в ходе вебинаров мы будем давать на них ответы. Также вы можете задавать вопросы, выходящие за рамки анонсированных тем.

1 Февраля 2013 г.
12:00
Мастер-класс по разработке компонентов FireMonkey 2.0
Ярослав Бровин
8 февраля 2013 г.
12:00
Как создается и развивается FastReports от первого лица
Михаил Филипенко
22 февраля 2013 г.
12:00
Мобильная разработка в Delphi под iOS
Всеволод Леонов
1 марта 2013 г.
12:00
Оценка производительности БД на примере InterBase под Mac OS
Дмитрий Кузьменко
14 марта 2013 г.
12:00
Поддержка стандарта C++11 в C++Builder… и для Delphi-разработчиков тоже
Всеволод Леонов
22 марта 2013 г.
12:00
Мастер-класс по созданию приложений под iOS на Delphi
Всеволод Леонов, Ярослав Бровин

Сегодня был выпущен Update 2 для RAD Studio XE3, Delphi XE3 и C++Builder XE3.

Зарегистрированные пользователи могут забрать обновление здесь. Размер 94 М.

Из описания релиза следует, что в данный Update включено обновление для 64-битной версии C++ Builder и обновление файлов справки для Delphi.

Список багов, исправленных в данном релизе.

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

В качестве альтернативного варианта, вы можете скачать  iso образ Rad Studio с включенным Update 2.

 

Как вы знаете, начиная с XE2 в Delphi в качестве встроенного генератора отчетов используется специальная версия FastReport.

И единственная проблема, которая в связи с этим возникает – перевод старых отчетов, написанных на Rave, на Fast Report. К счастью, команда Fast Reports Inc. позаботилась о пользователях и предоставила конвертер отчетов из Rave в Fast Report. Детально процедура использования конвертера описана в блоге Антона Хайрудинова.

Совершенно недавно я попробовал преобразовать некоторые из отчетов в моем рабочем проекте на FR. И мне это удалось! Однако, были нюансы, о которых ниже.

По сути, конвертер отчетов представляет собой один единственный модуль (ConverterRR2FR.pas). Он поставляется с исходным кодом, и, в свою очередь, использует следующие модули:

{ FastReport }

frxClass,
frxBarCode,
frxBarcod,
frxADOComponents,
frxBDEComponents,
frxDBXComponents,
frxIBXComponents,
frxCustomDB,

{ RaveReport }

RpDefine,
RpRave,
RpBase,
RpSystem,
RpBars,
RvClass,
RvProj,
RvCsRpt,
RvDefine,
RvCsStd,
RvCsBars,
RvCsDraw,
RvCsData,
RvDatabase,
RvDriverDataView;

Вот тут и начинается самое интересное. Прежде всего, XE2 стала последней версией, в которой присутствовал Rave Report.

В Delphi XE3 Rave Report уже нет!

А модули RR нужны, иначе ConverterRR2FR.pas попросту не откомпилируется. Как следствие, единственная версия Delphi, в которой вы можете использовать данный инструмент, без дополнительных ухищрений – XE2. Однако, здесь уместно напомнить, что все владельцы XE3 автоматически получают лицензию и на предыдущие версии соответствующих продуктов. В том числе, и на XE2.

Вторая сложность заключается в том, что ConverterRR2FR при работе использует модули, которых нет в Embarcadero редакции FastReport (frxADOComponents,  frxBDEComponents,  frxDBXComponents, frxIBXComponents). И здесь следует воспользоваться недвусмысленными рекомендациями форума поддержки:

FR Embarcadero Edition dosn’t support internal datasets. So, easy way – install FR Trial and convert Rave reports. Other way – comment all references to internal datasets classes in ConverterRR2FR.pas

FR Embarcadero Edition не поддерживает внутренних датасетов. Поэтому простейший вариант – установить FR Trial и преобразовать отчеты Rave. Второй способ – закомментировать все ссылки на классы внутренних датасетов в ConverterRR2FR.pas.

Я воспользовался первым вариантом.

Собственно, далее процесс преобразования полностью соответствовал описанию в блоге. Если вы четко представляете себе, что у вас имеется, и что вы хотите получить, то процедура доработки и подключения вновь созданных отчетов не займет много времени.

В принципе все зависит от исходных отчетов. В моем случае их около 30. “История успеха”, описанная на том же форуме поддержки свидетельствует об успешном преобразовании более чем 300 отчетов.

Повторюсь, что если вы хотите перевести свой проект на старшую версию Delphi, но до этого использовали Rave, то без конвертации отчетов вам не обойтись. Но данная процедура не слишком болезненна.

В одном из следующих постов я собираюсь рассказать о значительно более веселой и трепетной во всех отношениях процедуре. А именно, о сабмите Delphi приложения на Microsoft AppStore.

Выпущено обновление справочной системы  Help Update 1 для Delphi и C++Builder XE3. Обновление доступно зарегистрированным пользователям.

Добавлены следующие разделы:

Так же, для зарегистрированных пользователей продуктов XE, XE2 and XE3 доступен 120 страничный бесплатный выпуск Blase Pascal Magazine.

Содержание:

  • Interview with Kim Madsen
  • Sending mails using Lazarus By Michael Van Canneyt
  • Interview with Dmitry Arefiev
  • Dutch Pascon 2012 Pictures
  • Smart Mobile Studio By Jørn E. Angeltveit
  • Interview with Marco Cantu
  • FireMonkey in Delphi XE3: FM2 By Marco Cantú
  • HTML 5 By Bob Swart
  • Interview with Michael Rozlog
  • XE3 Style Designer By Jeremy North
  • Burgler detection using Lazarus By Michael Van Canneyt
  • Supporting new android features in old android versions with Oxygene By Brian Long
  • Delphi XE3 Helper Types By Bob Swart
  • Interview with Marc Hoffman
  • Introduction to Databases Part 9: Overview of DataSnap By Cary Jensen
  • Software taxes – storage By Alexander Alexeev
  • Interview with David I. (Intersimone)
  • The Delphi History
  • From Delphi to the cloud By Bruno Fierens
  • Interview with Bruno Fierens
  • kbmMW as a RTMP media server by Kim Madsen

 

 

 

11 октября в Харькове прошел семинар в рамках RAD Studio XE3 World Tour. Подробный отчет о семинаре вы можете увидеть на сайте http://delphixe.com.ua/.

Я на семинаре показывал небольшой пример, иллюстрирующий работу механизма Visual LiveBinding. Как и обещал, выкладываю видео и, собственно, сам пример.

В качестве СУБД я использовал SQLite, компоненты доступа, для чистоты эксперимента, от стороннего производителя – LiteDAC от DevArt.

Я полностью записал весь процесс создания приложения, который занял около 20 минут. Получилась небольшая иллюстрация того, что теперь в FireMonkey приложения для работы с БД можно создавать практически так же просто, как и в VCL. Я не буду здесь приводить развернутых описаний, лишь вкратце расскажу, суть происходящего на видео. Если у вас возникнут вопросы, вы можете задать их в комментариях.

Первый ролик показывает процесс подключения компонентов доступа к БД. По сути ничем не отличается от аналогичного процесса в VCL.

Ролик 1. Читать далее

Delphi XE3 и C++Builder XE3 хотфикс 1, 2 и 3 доступны для скачивания.

RAD Studio XE3 Hotfix 1

  • Это исправление устраняет проблему ShowMessage в FireMonkey приложении на некоторых локалях в Mac OS X
  • Скачать:  http://cc.embarcadero.com/item/29050

RAD Studio XE3 Hotfix 2

  • Это исправление устраняет регрессии при использовании GestureManager в FireMonkey приложениях
  • Скачать: http://cc.embarcadero.com/item/29051

RAD Studio XE3 Hotfix 3

  • Только для Professional редакции
  • Это исправление устраняет проблему при использовании SQLite драйвера в Professional редакции
  • Скачать: http://cc.embarcadero.com/item/29052

Читать далее

Не скрою, что основной проблемой FireMonkey, в том виде, в котором платформа была презентована в RAD Studio XE2, лично мне виделась неудобная работа с БД. Прежде всего, речь идет о визуализации данных. Напомню, что в FireMonkey нет так называемых db-aware компонентов. Связывание производится с использованием механизма LiveBinding. Это вызывало определенные затруднения у разработчиков.

Естественно, именно работа с данными, это  первое, что я хотел посмотреть в FM2. К тому же, тех, кто планирует купить Delphi до 28 сентября ожидает подарок – TMS Grid for FireMonkey. Насколько мне известно, это единственный полноценный грид для FireMonkey от сторонних разработчиков.

Я сделал небольшое тестовое приложение. Для тестового примера я использовал БД  MS Access. Приведенное ниже видео демонстрирует настройку соединения.

Первое, что меня приятно приятно удивило это Visual LiveBinding. В своем примере я использовал TMS Grid for FireMonkey, который до 28 сентября прилагается в подарок к Delphi, C++ Builder и RAD Studio XE3. Подключение грида к источнику данных производится буквально с помощью пары щелчков мышки. По сути это не сложнее чем в VCL.

Читать далее

В комплектацию продукта(Delphi/C++Builder/RAD Studio) входит Контракт на поддержку и сопровождение в течение первого года использования.


Delphi 10.1 Berlin Professional (Обновление со старых версий:55 855,11 руб.)

Delphi 10.1 Berlin Enterprise (Обновление со старых версий:148 381,22 руб.)

Delphi 10.1 Berlin Architect (Обновление со старых версий:244 093,71 руб.)

buy-now


C++Builder 10.1 Berlin Professional (Обновление со старых версий:55 855,11 руб.)

C++Builder 10.1 Berlin Enterprise (Обновление со старых версий:148 381,22 руб.)

C++Builder 10.1 Berlin Architect (Обновление со старых версий:244 093,71 руб.)

buy-now


RAD Studio 10.1 Berlin Professional 154 956,51 руб.(Обновление со старых версий:107 371,44 руб.)

RAD Studio 10.1 Berlin Enterprise (Обновление со старых версий:191 289,54 руб.)

RAD Studio 10.1 Berlin Architect (Обновление со старых версий:287 001,41 руб.)

buy-now


RAD Solution Pack for VCL + 1 год обновлений 121 877,43 руб.

RAD Solution Pack for FMX + 1 год обновлений 121 877,43 руб.

RAD Solution Pack for VCL & FMX + 1 год обновлений 176 105,43 руб.

buy-now

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



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