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

Вниз

Изучаем отладчик   Найти похожие ветки 

 
AV ©   (2012-10-29 14:48) [40]

Удалено модератором


 
Юрий Зотов ©   (2012-10-29 14:51) [41]

> Пит   (29.10.12 14:19) [38]
> Любой компонент можно переписать так, что он будет содержать
> событие OnCreate


Попробуй. Возьми на свой выбор: TEdit, TButton, TLabel, TЧтоУгодно и перепиши так, чтобы у твоего компонента появилось работающее событие OnCreate.

> Ega23 ©   (29.10.12 14:30) [39]
> У всех есть AfterConstruction


Вот именно. Метод - но не событие. И на это есть причина.


 
DVM ©   (2012-10-29 14:54) [42]

Вот тут Jeff Overcash (TeamB) отвечал про OnCreate, но правда на примере фреймов:

http://codenewsfast.com/isapi/isapi.dll/article?id=7AA5D5C3&article=3353772


 
Rouse_ ©   (2012-10-29 14:54) [43]


> Возьми на свой выбор: TEdit, TButton, TLabel

Дык этож не контейнеры...


 
АВ комп переставляет   (2012-10-29 15:44) [44]

Удалено модератором


 
Пит   (2012-10-29 16:24) [45]


> Попробуй. Возьми на свой выбор: TEdit, TButton, TLabel,
> TЧтоУгодно и перепиши так, чтобы у твоего компонента появилось
> работающее событие OnCreate.

TMyEdit = class(TCustomEdit)
 private
   FOnCreate: TNotifyEvent;
 protected
   procedure DoCreate; virtual;
 public
   constructor Create(AOwner: TComponent); override;
 published
   property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
 end;

...

{ TMyEdit }

constructor TMyEdit.Create(AOwner: TComponent);
begin
 inherited;
 DoCreate;
end;

procedure TMyEdit.DoCreate;
begin
 if Assigned(FOnCreate) then
   FOnCreate(Self);
end;


что не так? )


 
Юрий Зотов ©   (2012-10-29 16:44) [46]

> Пит   (29.10.12 16:24) [45]
> что не так?


Событие OnCreate не произойдет.


 
vuk ©   (2012-10-29 17:33) [47]

to Юрий Зотов ©   (29.10.12 16:44) [46]:
Юр, не подсказывай. :)))


 
Пит   (2012-10-29 18:01) [48]

Почему не произойдет? Разъясните, пожалуйста...
Правда, рабочую дельфю сча корячить не хочу, а дома дельфя не стоит (

Если я динамически создам свой новый контрол и на форму положу - сработает всё, я уверен.

Если я сделаю свой контрол и зарегистрирую - тоже должно всё сработать... почему нет?
разъясните...


 
Пит   (2012-10-29 18:03) [49]

вы же не хотите сказать, что я не смогу сделать контрол, куда я получу управление в конструктор? Ну а коли я получу управление в конструктор - то из конструктора я смогу что хочешь вызвать: хоть метод MySuperMethod, хоть Abort, хоть FOnCreate


 
vuk ©   (2012-10-29 18:14) [50]

to Пит   (29.10.12 18:01) [48]:

> Если я сделаю свой контрол и зарегистрирую - тоже должно
> всё сработать... почему нет?разъясните...

Воспользуйтесь отладчиком. :)


 
Юрий Зотов ©   (2012-10-29 18:23) [51]

> vuk ©   (29.10.12 17:33) [47]

Да чего уж там...
:o)

> Пит   (29.10.12 18:01) [48]
> Почему не произойдет? Разъясните, пожалуйста...


Формально, код безупречен (за исключением небольшой поправки - методы диспетчеризации событий перекрываютс в потомках нечасто и поэтому их обычно делают динамическими, а не виртуальными).

Но этот безупречный, вроде бы, код не имеет никакого смысла, потому что в момент вызова DoCreate из конструктора поле FOnCreate всегда будет nil (его очистит InitInstance) и поэтому юзерский обработчик события OnCreate вызван не будет (Assigned вернет False) - то есть, событие не произойдет.

Чтобы юзерский обработчик был вызван, поле FOnCreate нужно как-то проинициализировать. В компонентах TForm и TDataModule это делается так: сначала заливается DFM (при этом полям событий назначаются их обработчики), а уж потом генерится событие OnCreate. У других же компонентов VCL никаких DFM нет и проинициализировать поле FOnCreate неоткуда. Именно по этой причине событие OnCreate у них отсутствует, как не имеющее смысла. Вместо него используются методы AfterConstruction и Loaded.


 
vuk ©   (2012-10-29 18:40) [52]

to Юрий Зотов ©   (29.10.12 18:23) [51]:

> Да чего уж там...:o)

Я вообще надеялся, что если оно кому интересно, люди сами попытаются докопацца до истины. Ведь там чего сложного-то? Сделал компонент, зарегистрировал, отладчик в зубы - и вперёд.


 
Пит   (2012-10-29 19:06) [53]

А-а, вот вы про что...

Ну да, согласен... Форма присвоит обработчик моему компоненту уже после выполнения всего кода Create.

Кстати, помню давным давно дядя Юра задавал в качестве теста серию вопросов. На самый сложный вопрос (вроде бы про фреймы) ответил только vuk. Не про это вопрос то был? ))


 
Владислав ©   (2012-10-30 23:45) [54]


> Шмульке   (29.10.12 09:35) [30]


Не тупите. Следуя Вашим же сравнениям "Илиаду" Гомера нужно переписать, используя нанотехнологии.

Автору: статья отличная. Спасибо. (Даже я понял :о) )



Страницы: 1 2 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.162 c
15-1339966494
Jeer
2012-06-18 00:54
2013.03.22
Вело-Вапдай


6-1260958453
zsv
2009-12-16 13:14
2013.03.22
Непонятно поведение TIdTCPServer


15-1330196934
wl
2012-02-25 23:08
2013.03.22
выскажите нодостатки ноута


15-1335375892
Kerk
2012-04-25 21:44
2013.03.22
О ста сортах колбасы


15-1336935964
Jimmy
2012-05-13 23:06
2013.03.22
Маджонг