Форум: "Основная";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
ВнизФорма в пакете Найти похожие ветки
← →
Stanbab (2002-05-28 11:38) [0]Как можно визуально наследоваться от формы, которя находится в пакете, и явно не включена в проект?
← →
Игорь Шевченко (2002-05-28 12:56) [1]RegisterCustomModule ?
← →
Stanbab (2002-05-28 14:36) [2]Я использую RegisterCustomModule для регистрации формы. Однако визуальное наследование получается только at runtime, at designtime - не получается. Из проекта форма в пакете видна, собщений об ошибках нет.
← →
Игорь Шевченко (2002-05-28 14:43) [3]Я тоже могу ошибаться :-)
От: "Vitaliy Lyanchevskiy" <elic@operamail.com>
Тема: Re: Наследование форм из пакетов
Дата: 6 декабря 2001 г. 16:17
Привет, Sergey
06.12.2001 10:27, Sergey Gerasin -> All:
SG> Вот тут вопрос поднимался о сабже, помнится...
SG> Ни к чему дельному тогда не пришли, хотя ларчик просто
SG> открывался. :) Честь открытия принадлежит Станиславу
SG> Горбаневу (gorby@energomash.ru).
SG> Так вот, все оказывается довольно простым, только нужно
SG> совсем чуть-чуть поработать ручками.
SG> 0. В секции инициализации формы, желающей быть предком
SG> и находящейся в другом пакете, регистрируем класс
SG> этой формы:
SG> RegisterClass ( TMyAncestorForm );
SG> Можно этого и не делать, так как, если верить хелпу
SG> для RegisterClass, классы форм регистрируются автоматически,
SG> но на всякий случай не помешает.
SG> 1. Убеждаемся, что в нашем проекте доступен ресурс (*.dfm)
SG> этой формы (лучше просто включить проект этого пакета
SG> в состав группы с текущим проектом). При этом пакет, в
SG> котором она содержится, должен быть указан в свойствах
SG> проекта в строке "Build with runtime packages".
SG> 2. Создаем обычным путем (через New -> Form) форму.
SG> 2а. F12, лезем в исходник формы, правим:
SG> TMyDescendantForm = class ( TForm )
SG> на
SG> TMyDescendantForm = class ( TMyAncestorForm )
SG> 2б. F12, Alt+F12, лезем в текст dfm-ки, правим:
SG> object MyDescendantForm : TMyDescendantForm
SG> на
SG> inherited MyDescendantForm : TMyDescendantForm.
SG> Все, что между этой строкой и end, удаляем.
SG> 3. Alt+F12 - мы снова в дизайнере и любуемся на созданную
SG> форму. Компилим, запускаем - ПАШЕТ!!!
SG> Фишка в том, что дизайнеру на этапе проектирования формы нужен
SG> прямой доступ к ресурсу предка формы - из скомпиленного пакета
SG> оного дизайнер вытащить не может. Но при запуске программы и
SG> загрузке пакетов механизм чтения ресурсов форм работает
SG> нормально. Это номер раз.
SG> Далее, многих конфузит то, что форма обычно визуально наследуется
SG> посредством выбора New -> <Project> -> <Желаемая форма>.
SG> Естественно, что это всего лишь красивая оболочка для выполнения
SG> описанных выше тривиальных ручных операций. При этом, на самом
SG> деле, совершенно неважно, где реально находится форма-предок:
SG> была бы она видна текущему проекту да скомпиленный пакет с ней
SG> корректно подключался бы в рантайме. Это номер два.
Большое человеческое спасибо! Классный способ! Давно его искал.
BTW, пункт 0, IMHO, не нужен,
а пункт 2 все-таки можно осуществить привычным способом:
- в Project Manager-е выбрать (сделать текущим) нужный пакет
- и File -> New -> <нужный пакет> -> <Желаемая форма>.
--
Vitaliy Lyanchevskiy (E-mail: elic@operamail.com)
← →
Stanbab (2002-05-28 15:22) [4]Большое спасибо! Все сработало. Я почти все так и делал, за исключением того, что регистрировал форму с помощью RegisterCustomModule и не включал пакет в "Build with runtime packages".
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c