Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.014 c