Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.106 c
15-1354344006
AlexDn
2012-12-01 10:40
2013.03.22
Компонент для работы с графикой


3-1278415497
kate158
2010-07-06 15:24
2013.03.22
обработка ошибки sql


15-1344181528
brother
2012-08-05 19:45
2013.03.22
Посоветуйте игру


2-1346134856
noob_one
2012-08-28 10:20
2013.03.22
Терминал сбора данных


15-1349179159
картман
2012-10-02 15:59
2013.03.22
частица "же"





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