Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизПри создании компонента... Найти похожие ветки
← →
UserMicc (2003-05-12 16:28) [0]Еще раз поднимаю вопрос...
Каким способом для своего собственного компонента можно переопределить процедуры владельца (такие как OnCreate, OnDestroy и т.п.), при этом не затирая скрипта, ранее определенного владельцем...
p.s.
sms. like
TForm(AOwner).OnCreate:=fonCreate;
где Form1.OnCreate уже Assigned,
а fonCreate - то, что я хочу добавить к выполнению Form1.OnCreate
p.s. OnCreate - частный случай, но хотелось бы получить общее обьяснение..
← →
UserMicc (2003-05-12 16:33) [1]_наверх_
← →
MalkoLinge (2003-05-12 16:34) [2]В данном случае ты пытаешся перекрыть обработчик события :). Обычно в таком случае рабюотаю с контрлллером, хотя если в базовом классе обработчик зашит намервто, то перекрывать придеться его. И делается это согласно общим правилам ООП.
А еще лучше показать код или описание класса, и Более конкретно что именно нужно
зы
И не обзывай код скриптом, Делфи не ПХП все-таки :)))
← →
UserMicc (2003-05-12 16:54) [3]_up_
← →
Anatoly Podgoretsky (2003-05-12 16:55) [4]Там таких не должно быть, эти обработчики только для конечного пользователя. У тебя что то не то с идеологией.
← →
UserMicc (2003-05-12 17:01) [5]
2 Anatoly Podgoretsky:
< Там таких не должно быть
Ладушки, а как же описать то, что в конструктор не запихнешь ??
Тем более конструктор срабатывает разом при "тыканье" компонента на форму...
< У тебя что то не то с идеологией.
Загнул...
← →
UserMicc (2003-05-12 17:19) [6]
Товарищи, товарищи ждемс...
← →
MalkoLinge (2003-05-12 17:27) [7]Ты анатоли про идеологию еще раз прочитай. Прав он.
← →
icWasya (2003-05-12 19:08) [8]
type
TMyComponent=Class(TComponent)
private
FFormOnCreate:TNotifyEvent;
FFormOnDestroy:TNotifyEvent;
//--------- нужное добавить
private
procedure MyFormOnCreate(Sender:TObject);
procedure MyFormOnDestroy(Sender:TObject);
//--------- нужное добавить
public
constructor Create(AOwner:TComponent);override;
end;
implementation
constructor TMyComponent.Create(AOwner:TComponent);
var
FForm:TComponent;
begin
inherited Create(AOwner);
FForm:=AOwner;
// на случай, если Owner не форма
while (FForm<>Nil) And Not (FForm Is TForm) do FForm:=FForm.Owner;
if FForm=Nil Exit;
FFormOnCreate := TForm(F).OnCreate; TForm(F).OnCreate:=MyFormOnCreate;
FFormOnDestroy := TForm(F).OnDestroy; TForm(F).OnDestroy:=MyFormOnDestroy;
//--------- нужное добавить
end;
procedure TMyComponent.MyFormOnCreate(Sender:TObject);
begin
if Assigned(FFormOnCreate) then FFormOnCreate(Sender);
//--------- нужное добавить
end;
procedure TMyComponent.MyFormOnDestroy(Sender:TObject);
begin
//--------- нужное добавить
if Assigned(FFormOnDestroy) then FFormOnDestroy(Sender);
end;
← →
Юрий Зотов (2003-05-12 21:35) [9]> icWasya © (12.05.03 19:08)
Могу привести элегантный способ, так сказать, поломки Вашего кода. Причем абсолютно легальным, законным и даже описанными в документации методом. Ничего необычного. Итак: кладу на форму 2 Ваших компонента, а затем первый из них удаляю. Все.
Выводы сделайте сами. Могу подсказать: компоненты пишут не так, как пишут просто программы. Их пишут иначе. А у Вас получилась просто программа.
> UserMicc
Увы, должен повториться. Компоненты пишут не так, как пишут просто программы. Их пишут иначе. А Ваша идеология - это идеология написания просто программы. Об этом и говорил Anatoly Podgoretsky. И был совершенно прав. И ничего он не загнул. Компонент не имеет права использовать события, доступные его юзеру. Это азбука.
Теперь по сабжу. О том, чтобы перекрыть OnCreate формы - даже и думать забудьте. Лучше уточните задачу и скажите - что конкретно Вам нужно сделать такого, чего нельзя сделать в конструкторе? Вот тогда и подумаем. А способов существует далеко не один. Подозреваю, например, что Вас устроит Loaded.
← →
icWasya (2003-05-13 11:24) [10]> Юрий Зотов
> Могу привести .. способ поломки ..
даже спорить не буду
во первых компоненту пишу не я а UserMicc
а я сам знаю что необходимо обрабатывать деструкторы, наличие нескольких таких компонент на форме, возможность обработки владельца - не формы, возможность переопределения событий после Create и т.д.
Когда-то (в пору Д1) в сети нашёл компоненту, переопределяющую события у Application. У неё были все перечисленные недостатки, но всё же было удобнее, чем без неё. Потом Борланд сделала компоненту TApplicationEvents
← →
Юрий Зотов (2003-05-13 12:32) [11]> а я сам знаю что необходимо обрабатывать деструкторы
Деструктор Вы и так обработали, результат ясен. Нужно обрабатывать Notification, если уж на то пошло. Но все равно, этот путь - исключительно кривой. ТАК компоненты НЕ пишут.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c