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

Как корректно разделить дизайнерский и исполняемый код компонентов в Delphi: решение проблемы "File not found: 'DockForm.dcu'"

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

Разработчики компонентов для Delphi часто сталкиваются с проблемой разделения кода, предназначенного для работы в дизайнере (design-time) и кода, который должен выполняться в runtime. Одна из таких проблем — ошибка "File not found: 'DockForm.dcu'". Эта ошибка возникает, когда в проект включаются единицы (units), предназначенные исключительно для работы в дизайнере IDE, и пытаются использовать их в коде, который выполняется во время работы приложения.

Описание проблемы

Пользователь столкнулся с ошибкой "File not found: 'DockForm.dcu'" при попытке сборки компонента, который использует единицы DesignIntf и DesignEditors. При добавлении зависимости от designide.dcp в раздел "requires" пакета, сборка проходит успешно. Однако, при запуске приложения с таким компонентом на главной форме, ошибка вновь появляется.

Подтвержденный ответ

Пользователю было указано, что использование единиц DesignIntf, DesignEditors и других, начинающихся на Design*, не допускается в runtime-коде. Эти единицы предназначены исключительно для работы в дизайнере IDE и не предназначены для использования в исполняемых приложениях.

Решение проблемы

Чтобы решить проблему, необходимо разделить код компонента на две части: дизайнерскую и исполняемую. Для редактирования свойств компонента в дизайнере можно использовать свойственный редактор, например TFileNameProperty, который требует подключения единиц DesignIntf и DesignEditors. Однако, эти единицы не должны использоваться в runtime.

// Пример свойственного редактора для дизайнера
type
  TFileNameProperty = class(TStringProperty)
  end;

Для разделения кода, можно воспользоваться следующими подходами:

  1. Создание отдельных единиц для дизайнера и runtime.
  2. Использование условной компиляции ({$IFDEF} и {$IFNDEF}) для разделения кода.
  3. Разработка специальных пакетов для дизайнера, которые не включаются в исполняемый код.

Пример условной компиляции:

{$IFDEF DESIGNTIME}
uses
  DesignIntf, DesignEditors; // Подключение единиц для дизайнера
{$ELSE}
uses
  OtherUnits; // Подключение единиц для runtime
{$ENDIF}

Заключение

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

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

Проблема заключается в неправильном использовании единиц, предназначенных для дизайнера, в коде, который выполняется во время работы приложения, что приводит к ошибке 'File not found: 'DockForm.dcu''.


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

Получайте свежие новости и обновления по 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:55:10/0.0035200119018555/0