Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.048 c
4-17443
Eugene
2003-01-17 18:10
2003.03.06
Определение имени пользователя из сервиса...


14-17336
Maximator Vetera
2003-02-12 10:23
2003.03.06
Димедрол.


14-17347
ZeroDivide
2003-02-17 14:24
2003.03.06
Из Ярославля есть кто-нибудь.


14-17303
Фикус
2003-02-20 08:06
2003.03.06
Прикольно :)


7-17421
ded
2003-01-09 22:41
2003.03.06
Содержимое произвольной ячейки памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский