Как определить путь к dfm/проекту из пользовательского элемента управления в дизайнере?

Контекст

Я создал кастом, похожий нано с общей базой данных изображений для всего приложения. Для этого элемент управления считывает метафайл проекта, который представляет собой XML-файл, содержащий список изображений, которые необходимо включить в коллекцию изображений. В дизайнере изображения считываются непосредственно из файлов изображений, но во время выполнения изображения находятся в файле ресурсов (), созданном во время компиляции.

      if csDesigning in Self.ComponentState then
  loadImagesFromFiles(...)
else
  loadImagesFromResource(...)

Кажется, все работает, кроме:

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

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

Вопрос

Изв дизайнере, как определить каталог проекта илиэто включает в себя?

Что я оценил

имеет мало функций для обнаружения активного проекта, однако этот модуль недоступен в пользовательской реализации TControl. Только из редакторов и других плагинов Designer.

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

  • Несколькими проектами или клонами одного проекта управлять сложно (переменная среды не может указывать на каталог нескольких проектов).
  • Усложните настройку для всех разработчиков.
  • ... Кажется, это плохая практика.
  • Delphi не позволяет устанавливать значения «ОПРЕДЕЛИТЬ» переменным или константам?

: Наличие абсолютного пути к проекту в качестве проекта DEFINE не является переносимым. И Delphi, похоже, тоже этого не допускает.

0 ответов

Другие вопросы по тегам