Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

События при помещении компонента на форму   Найти похожие ветки 

 
Raduga   (2003-02-22 12:29) [0]

Здравствуйте!!!
Не подскажите какие события(для формы и компонента) возникают при
помещении компонента на форму в design-time,и вызываются ли какие-нибудь методы компонента по умолчанию? Компонент - наследник от TComponent.
Спасибо.


 
MBo ©   (2003-02-22 12:43) [1]

Notification вызывается с opInsert


 
Meson ©   (2003-02-22 12:54) [2]

Это очень легко проверить. Поставь в методах компонента ShowMessage("ИмяМетода") и сразу станет понятно что вызывается и в каком порядке.


 
Юрий Зотов ©   (2003-02-22 14:43) [3]

Не надо мучаться с кучей ShowMessage. Надо просто нажать F1 и убедиться, что MBo сказал верно.


 
Raduga   (2003-02-24 13:45) [4]

А после того как был вызван конструктор компонента?


 
Юрий Зотов ©   (2003-02-24 14:10) [5]

А после того как был вызван конструктор компонента, только что созданный компонент будет вставляться в список Components формы (InsertComponent). В этот момент и сработает Notification.


 
Raduga   (2003-02-25 00:19) [6]

Вставлял ShowMessage в Create и Notification. При помещении компонента на форму выводится сначала шоумессадж notification, а затем create"а.


 
Юрий Зотов ©   (2003-02-25 05:30) [7]

Notification отрабатывает, когда в Вашем конструкторе вызывается Inherited Create. То есть, ПОСЛЕ вызова Вашего конструктора, но ДО его завершения. Точнее - Notification вызывается из конструктора класса TComponent (через InsertComponent).

Что так мучаться целых 3 дня? Лучше скажите, в чем же проблема?



 
Raduga   (2003-02-25 11:58) [8]

>Юрий Зотов
Спасибо, что объяснили.
А проблема в следующем:
Есть компонент (не мой)- наследник от TComponent"a, в котором свойство Name объявлено в public и выполняет совсем другие функции, т.е. не предназначено для хранения имени компонента.Делаю свой компонент - наследник от вышеописанного, как в нем получить собственное имя (имеется в виду стандартное имя комонента при помещении его на форму). Я объявляю дополнительное поле, назовем его FComponentName:TComponentName
которое хранит имя компонента. пробовал заполнять его в конструкторе

constructor TMyComponent.create(AOwner:TComponent)
begin
inherited create...
....
FComponentName:=TComponent(self).name;
....
end;


но поле FComponentName="". Вообще возможно ли получить в конструкторе имя компонента (речь о работе в design-time)?
Или как к нему "добраться" (желательно не используя методы чтения и записи свойств).
Заранее спасибо.






 
Юрий Зотов ©   (2003-02-25 22:19) [9]

Что-то ОЧЕНЬ странное Вы рассказываете. Во-первых, перемещение свойства Name в public НИЧЕГО не меняет - область видимости в Delphi нельзя понизить. Во-вторых, со свойством Name работает FormDesigner и еще целая куча интерфейсов IDE, поэтому попытка изменить назначение этого свойства должна, IMHO, привести просто к элементарной неработоспособности компонента. В третьих, даже если он и работает, то я бы ОЧЕНЬ не советовал пользоваться ТАКИМИ компонентами.

Ну а если уж очень надо, то посмотрите в TComponent методы GetNamePath и SetName. Если автор "компонента" не покорежил и их заодно, то они дают/устанавливают нормальное имя компонента (а если он и их покорежил, то тем более советую выбросить этот компонент на помойку). Так что воспользуйтесь этими методами - и никакие конструкторы с Notification"ами Вам будут не нужны.





Страницы: 1 вся ветка

Текущий архив: 2003.03.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
3-16888
Calm
2003-02-14 15:02
2003.03.06
Посоветуйте компонент для отображения деревьев


3-16854
Tornado
2003-02-14 11:12
2003.03.06
Как определить?


1-17021
Антон.
2003-02-25 09:14
2003.03.06
Delphi 5 и Delphi 7


1-17033
AFrolov
2003-02-25 11:03
2003.03.06
Com Server Warning


1-17161
Radion
2003-02-23 17:30
2003.03.06
А как, с помошю цикла, наити самое большое число в Массиве?