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

Вниз

При создании компонента...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
3-83350
Max_
2003-05-05 16:51
2003.05.26
Table is Busy???


3-83322
Stas
2003-05-07 09:22
2003.05.26
SQL и IP


4-83791
jen_bond
2003-03-25 20:28
2003.05.26
Вопрос по работе с EnumEnhMetaFile


3-83401
Veles
2003-05-04 16:21
2003.05.26
Как ввести параметр хранимрй процедуры типа DATETIME?


1-83534
softmaster
2003-05-13 17:37
2003.05.26
FastReport