Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-83324
Dusic
2003-05-07 10:14
2003.05.26
BDE для Access


1-83460
Space
2003-05-13 10:05
2003.05.26
Обработка нажания на клавишу Enter


14-83656
-=DeMoH=-
2003-05-05 12:56
2003.05.26
Как работать с ASP?


3-83329
eee
2003-05-05 12:23
2003.05.26
DBGrid


1-83582
tv
2003-05-14 13:06
2003.05.26
Работа с изображениями в потоке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский