**.

В приводимых ранее разделах описаны отличия версии Delphi 8. В этом разделе суммируются сведения об отличиях других версий Delphi, которые в той или иной мере должен учитывать разработчик компонентов. Я не описываю отличия версий 1, 2 и 3, так как вряд ли они еще активно используются (версия 3, например, выпущена 7 лет назад).

Разработчик компонента не должен рассчитывать на то, что у пользователя установлена та или иная конкретная версия. Поэтому при разработке компонента он должен по возможности использовать директивы условной компиляции {$IFDEV XXX), в которые заключаются фрагменты кода, специфичные для той или иной версии. Таким образом, чтобы компонент FarWatchClock можно было использовать не только с версией 8, листинг 13.1 должен быть доработан так:

unit FarWatchClock;

interface

{$IFDEF OLDVER} uses

SysUtils, Classes, StdCtrls, ExtCtrls, DateUtils; {$ELSE} uses

SysUtils, Classes, System.ComponentModel, Borland.Vcl.Controls, Borland.Vcl.StdCtrls, Borland.Vcl.ExtCtrls, Borland.Vcl.DateUtils; {$ENDIF} Если вы используете этот модуль в проекте одной из предыдущих версий Delphi, выберите команду Project ► Options и на вкладке Directories/Conditionals открывшегося окна определите символ OLDVER в поле Conditional defines (рис. 13.4).

Однако условные символы, заданные таким образом, при компиляции пакета не учитываются, поэтому их нужно определять директивой {$DIFINE XXX} непосредственно в тексте проекта пакета.

13.4. Об отличиях версий Delphi

Рис. 13.4. Установка символа условной компиляции

Попутно замечу, что модуль FarWatchClock использует функцию SecondsBetween, которая определена в модуле DateUtils. Впервые этот модуль введен в версии 6. Чтобы модуль мог устанавливаться в предыдущих версиях, имеет смысл непосредственно в модуль вставить показанную ниже реализацию функции и отказаться от ссылки на модуль DateUtils:

function SecondsBetween(const ANow, AThen: TDateTime): Int64; var
H, M, S, MS, HI, Ml, SI, MSI: Word;
begin
DecodeTime(ANow, H, M, S, MS);
DecodeTime(AThen, HI, Ml, SI, MSI);

Result := ((((Trunc(AThen - ANow) * 24 + HI - H) * 60) + Ml - M) * 60) + SI - S

end;

He забывайте, что версии Delphi совместимы в направлении от первых к последним. Исключение в какой-то мере представляет версия 8, которую трудно назвать совместимой с версией 7: программы, разработанные в Delphi 7, нуждаются в переделке при переносе их в следующую версию. Если при разработке компонента можно избежать специфики новейших версий (новых типов, модулей и пр.), следует делать это.

Кроме того, в версии 6 появилась библиотека CLX, что заставило разработчиков Delphi пересмотреть структуру пакетов. В частности, при разработке редакторов свойств и компонентов нужно помнить, что начиная с версии 6 изменился интерфейс редакторов: вместо ссылки на единственный модуль Dsgnlntf в версии 6 и выше нужно указывать ссылки на модули Designlntf и DesignEditors. Примеры условной компиляции с учетом этого обстоятельства вы найдете в модулях и пакетах, собранных в папке $(SOURCE)\Units.

Если в вашем редакторе свойства или компонента используется диалоговое окно, проверьте, действительно ли ему необходима ссылка на модуль Variant, которая автоматически вставляется в новые формы последних версий (от 6 и выше). Если редактор не использует варианты, лучше удалить ненужную ссылку (в версиях 5 и ниже варианты определены в модуле System). В противном случае нужна условная компиляция.

13.3. Установка компонентов || Оглавление || Примеры компонентов


Искусство создания компонентов Delphi



Новости за месяц

  • Июль
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс