Я ' У меня есть настраиваемый фрейм, который мне нужно унаследовать в нескольких проектах. Этот фрейм включает в себя некоторый код и некоторые компоненты, и он находится где-то на диске в собственном каталоге проекта. Я не хочу КОПИРОВАТЬ его в папку репозитория объектов, мне это не кажется правильным: у меня будет две копии формы, одна в моем репозитории, поддерживаемом Mercurial, другая в репозитории объектов Delphi. Абсолютно не лучшая идея.
Я хочу, чтобы мой фрейм находился в пакете, и чтобы этот пакет делал все, что требуется, чтобы сделать фрейм известным в среде IDE и позволить среде IDE создавать новых братьев и сестер для данного фрейма без фактически добавляя фрейм к каждому проекту.
То, что я сделал до сих пор, проблемы, с которыми я столкнулся, решения, которые я пробовал:
RegisterClass
, так и RegisterNoIcon.
Проблема: Когда я захожу в какой-то другой проект и пытаюсь открыть производный фрейм для редактирования, он сообщает, что не может найти мой исходный фрейм. RegisterCustomModule (TMyFrameName, TCustomModule)
. Проблема: Из «другого» проекта я открываю производный фрейм, IDE не создает компоненты в моем исходном фрейме, и IDE жалуется на отсутствие одного из «унаследованных» компонентов. InitInheritedComponent (Self, TFrame)
. Это помогло, когда я попытался открыть фрейм в ' В другом проекте все было воссоздано, и я смог увидеть кадр, как я ожидал. Проблема: , когда я сохраняю фрейм, он забывает все о унаследованных компонентах, обрабатывает каждый отдельный компонент как новый компонент, добавленный к этому конкретному фрейму. Если я загляну в сохраненный DFM, все начинается с «объекта», ничего не начинается с «унаследовано», как я ожидал. К сожалению, я застрял на проблеме «3». Я попытался покопаться в Classes.pas, ToolsAPI, DesignIntf и DesignEditors, но не нашел ничего полезного. Очевидно, атрибут «унаследованный», который я надеялся увидеть в DFM, создается TWriter, когда ему присваивается свойство «TWriter.Ancestor» перед потоковой передачей TComponent, но у меня нет возможности настроить его, среда IDE должна его установить вверх. И я могу' Спасибо!
Edit
Почему мне это нужно и почему решения, которые зависят от фактических имен путей, записываемых в файлы моего проекта, не работают: я хочу поддерживать ветвление: когда одна ветвь имеет смысл ожидать несколько версий одного и того же проекта, находящегося в разных каталогах на одной машине. Как следствие, у меня не может быть несколько версий одного и того же проекта в одном месте в одно и то же время.
Чтобы убедиться, что это работает, я решил сделать мои проекты не зависимыми от того, где они живут, и для обеспечения этого у меня есть все в нашей команде Клонировать (терминология Mercurial) или извлекать (терминология SVN) наши проекты в разных каталогах. Жестко запрограммированный путь в моей системе не подойдет для системы моего коллеги: если кто-то из нас совершит ошибку, жестко закодировав какой-либо путь в приложение, скоро он остановится у одного из нас, поэтому ошибка будет исправлена.
Это, конечно, проблема с формами и фреймами, которые являются частью некоторой библиотеки (поэтому они не находятся в каталоге нашего проекта), которые нам нужно унаследовать от! Чтобы получить поддержку IDE при работе с этими файлами, нам нужно временно добавить их в проект и не забыть удалить их после того, как мы закончим. Если мы забудем и отправим / вернем изменения, изменения будут тормозить сборку для наших коллег (потому что у них есть библиотеки, проверенные в разных местах).
Чтобы решить эту проблему, я попытался добавить эти рамки и формы в дизайн time package (пакеты загружаются в IDE с использованием полного пути, но этот путь не является частью файлов проекта, так что все в порядке). К сожалению, это не удалось, поэтому я опубликовал этот вопрос.