'object' vs 'inherited'
От: Eugals Россия  
Дата: 10.08.02 18:02
Оценка:
У меня есть package, в котором лежит вот такой класс форм:
class PACKAGE TMyForm: public TForm {...}


Я хочу использовать этот класс в качестве родительского для форм в другом своём проекте. То есть объявлять там классы вида:
class TFooForm: public TMyForm {...}

Никаких проблем с компиляцией и линковкой у меня не возникло. Всё собирается и замечательно работает.
Проблема в том, что IDE Билдера совершенно не хочет видеть TMyForm, когда в dmf-ке формы TFooForm написано не
object FooForm: TFooForm 
... 
end

а
inherited FooForm: TFooForm 
... 
end

Во втором случае, каждый раз когда я пытаюсь открыть для дизайнирования FooForm, мне выскакивает сообщение: "Error creating form: Ancestor for 'TMyForm' not found".

А мне нужен именно 'inherited', а не 'object', ведь иначе в FooForm не будут видны поля и обработчики событий, которые я определил для TMyForm.

Подскажите пожалуйста что делать. Приветствуются любые комментарии. Может кто-нибудь уже сталкивался с этой проблемой?

ЗЫ: Речь идет о версии билдера (или Delphi) 5.0.
Re: 'object' vs 'inherited'
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.08.02 18:39
Оценка: 1 (1)
Здравствуйте Eugals, Вы писали:

E>У меня есть package, в котором лежит вот такой класс форм:

E>
E>class PACKAGE TMyForm: public TForm {...} 
E>


E>Я хочу использовать этот класс в качестве родительского для форм в другом своём проекте. То есть объявлять там классы вида:

E>
E>class TFooForm: public TMyForm {...} 
E>

E>Никаких проблем с компиляцией и линковкой у меня не возникло. Всё собирается и замечательно работает.
E>Проблема в том, что IDE Билдера совершенно не хочет видеть TMyForm, когда в dmf-ке формы TFooForm написано не
E>
E>object FooForm: TFooForm 
E>... 
E>end 
E>

E>а
E>
E>inherited FooForm: TFooForm 
E>... 
E>end 
E>

E>Во втором случае, каждый раз когда я пытаюсь открыть для дизайнирования FooForm, мне выскакивает сообщение: "Error creating form: Ancestor for 'TMyForm' not found".

E>А мне нужен именно 'inherited', а не 'object', ведь иначе в FooForm не будут видны поля и обработчики событий, которые я определил для TMyForm.


E>Подскажите пожалуйста что делать. Приветствуются любые комментарии. Может кто-нибудь уже сталкивался с этой проблемой?


E>ЗЫ: Речь идет о версии билдера (или Delphi) 5.0.


Дело в том, что IDE по какой-то причине не находит кода формы-предка. Для того, чтобы он был, попробуй
а) открыть сначала TMyForm, а потом FooForm
б) проверить пути в опциях проекта в CB и сравнить их с Delphi.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: 'object' vs 'inherited'
От: Eugals Россия  
Дата: 12.08.02 05:26
Оценка:
Здравствуйте Sinclair, Вы писали:
S>Дело в том, что IDE по какой-то причине не находит кода формы-предка. Для того, чтобы он был, попробуй
S>а) открыть сначала TMyForm, а потом FooForm
S>б) проверить пути в опциях проекта в CB и сравнить их с Delphi.

а) Спасибо, помогло!
Правда не очень-то это удобно -- каждый раз открывать одну форму, для того, чтобы редактировать другую
б) С путями всё в порядке. Просто проблема в том, что Билдер "не видит" в репозитарии проекта те формы, которые определены не в самом этом проекте, а во внешнем package.
Нет ли какого-нибудь способа это исправить? Заранее благодарен за ответ.
Re: 'object' vs 'inherited'
От: Pavel XP  
Дата: 14.08.02 05:25
Оценка: 2 (1)
Здравствуйте Eugals, Вы писали:

E>У меня есть package, в котором лежит вот такой класс форм:

E>
E>class PACKAGE TMyForm: public TForm {...} 
E>


E>Я хочу использовать этот класс в качестве родительского для форм в другом своём проекте. То есть объявлять там классы вида:

E>
E>class TFooForm: public TMyForm {...} 
E>

E>E>ЗЫ: Речь идет о версии билдера (или Delphi) 5.0.

Не знаю в ту же тему или нет?
Но у меня при наследовании форм выяснился такой глюк (или фича)
Вызов OnCreate OnDestroy и конструкторов/деструкторов идет в разных порядках в зависимости от того используется сборка с рунтайм пакетами или без такового.
Выход — ушел от использования этих событий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.