Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Разделение кода на дизайнерский и выполнительный: решение проблемы с DSGNINTF.DCU в VCL-приложениях Delphi

Delphi , Компоненты и Классы , Компоненты

При разработке компонентов для Delphi, которые используют кастомизированные редакторы свойств, разработчики могут столкнуться с проблемой, когда при использовании этих компонентов в пользовательском VCL-приложении возникает ошибка "DSGNINTF.DCU not found". Это происходит из-за того, что модуль DsgnIntf предназначен только для использования во время разработки (дизайнерское время) и не должен быть включен в исполняемые файлы.

Проблема и ее описание

Вопрос, поднятый разработчиком, заключается в том, что после использования модуля DsgnIntf для кастомизации редакторов свойств в собственном компоненте TComponent, при попытке использовать этот компонент в пользовательском VCL-приложении, возникает ошибка, связанная с отсутствием файла DSGNINTF.DCU. Один из предложенных решений - использование параметра командной строки компилятора, однако это не является предпочтительным вариантом. Альтернативным решением является разделение кода на дизайнерский и выполнительный, что позволит избежать проблемы с DSGNINTF.DCU.

Решение проблемы: разделение на модули

Для решения данной проблемы необходимо разделить код компонента на два модуля: один для дизайнерского времени, который будет содержать все, что необходимо только для разработки, и второй для выполнительного времени, содержащий код, который будет использоваться в исполняемых приложениях. Это разделение позволяет избежать зависимости от модулей, необходимых только во время разработки, в исполняемых файлах.

Пример разделения кода

В качестве примера рассмотрим создание двух модулей: MyComponent для выполнительного времени и MyComponentReg для дизайнерского времени.

// MyComponent.pas - модуль для выполнительного времени
unit MyComponent;

interface
uses
  System.SysUtils, Vcl.Controls;
type
  TMyComponent = class(TComponent)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation
{$R *.dfm}
// Код, необходимый для выполнения
end.
// MyComponentReg.pas - модуль для дизайнерского времени
unit MyComponentReg;

interface
uses
  System.SysUtils, DsgnIntf, MyComponent;
procedure Register;
implementation

procedure Register;
begin
  RegisterComponents('MyPage', [TMyComponent]);
end;

initialization
  Register;
end.

В модуле MyComponentReg мы регистрируем компонент TMyComponent для использования в среде разработки, но сам код компонента находится в модуле MyComponent, который не зависит от модуля DsgnIntf.

Разделение на пакеты

Для более сложных компонентов с несколькими единицами и зависимостями, рекомендуется использовать разделение на пакеты. Например, для дизайнерского времени создается пакет MyPackD, который содержит модуль регистрации, а для выполнительного времени - пакет MyPackR, который содержит код компонента.

// MyPackD.dcp - пакет для дизайнерского времени
package MyPackD;
{$R *.res}
// Код дизайнерского времени и регистрация компонентов
contains
  RegPackage in 'RegPackage.pas';
end.
// MyPackR.dpr - пакет для выполнительного времени
package MyPackR;
{$R *.res}
// Код, необходимый для выполнения
contains
  MyComponent in 'MyComponent.pas';
end.

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

Заключение

Разделение кода на дизайнерский и выполнительный с помощью модулей и пакетов позволяет избежать ошибок, связанных с DsgnIntf.DCU, и обеспечивает более чистое разделение функционала, что упрощает поддержку и уменьшает вероятность ошибок при сборке проектов.

Создано по материалам из источника по ссылке.

по разделу кода на дизайнерский и выполнительный для решения проблемы с DSGNINTF.DCU в VCL-приложениях Delphi Разработчикам VCL-приложений Delphi при создании компонентов с кастомизированными редакторами свойств может встречаться ошибка '


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компоненты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-16 03:47:02/0.0026628971099854/0