Форум: "Прочее";
Текущий архив: 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.071 c