![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тест по Delphi при приеме на работу [D6, Win2k]
Anna © (2005-01-25 16:14:00)
Страницы: < 1 2 3 4 5 6 7 8 9 >
Уважаемые профессионалы, помогите, пожалуйста! При приеме на работу надо выяснить уровень компетентности человека в Delphi.
Может быть, кто-нибудь знает недлинный тест, котором достаточно быстро можно понять, насколько кандидат в предмете.
Я Delphi немного знаю.
Юрий Зотов (2005-01-26 16:52:00) [61]> jack128 © (26.01.05 16:41) [118]
Вот именно. А тогда пропадает всякий смысл, потому что такая точка уже есть - OnCreate контейнера.
И получается, что OnCreate можно, в принципе, ввести в любой класс, но только это будет иметь смысл лишь для контейнеров.
Вот потому OnCreate только в контейнерах и реализовано. Это и есть ответ на вопрос.
Вот теперь и скажите - позволяет ли этот с виду простенький вопросик выяснить степень знания и понимания VCL?
:о)
jack128 (2005-01-26 16:41:00) [62]Юрий Зотов © (26.01.05 16:33) [114]
Но не сработает. Юзерский обработчик вызываться не будет.
Естествено не будет. Нужно перекрывать Loaded..
KSergey (2005-01-26 16:39:00) [63]> [115] Derevyanniy kak Rels (26.01.05 16:36)
> Кто тут спорит насчет форматирования , вы бы попробовали
> на С++ программить :)
И что? не понял
KSergey (2005-01-26 16:38:00) [64]> [114] Юрий Зотов © (26.01.05 16:33)
Понял!!!
Балин, да уж...
Derevyanniy kak Rels (2005-01-26 16:36:00) [65]Кто тут спорит насчет форматирования , вы бы попробовали на
С++ программить :)
в принципе в основном я на нем програмлю .
Юрий Зотов (2005-01-26 16:33:00) [66]Ладно, еще подсказка. Пишу свой супер-пупер-компонент.
type
TMyComp = class(TComponent)]
private
FOnCreate: TNotifyEvent;
protected
procedure DoCreate; dynamic;
public
procedure AfterConstruction; override;
published
property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
end;
procedure TMyComp.AfterConstruction;
begin
inherited;
DoCreate
end;
procedure TMyComp.DoCreate;
begin
if Assigned(FOnCreate) then
FOnCreate(Self)
end;
Все строго по канонам, не так ли? Но не сработает. Юзерский обработчик вызываться не будет.
Вот в этом и естьглавнаяфишка.
default (2005-01-26 16:19:00) [67]GuAV © (26.01.05 16:14) [112]
если бы у этого была какая-то сверхглубокая мысль то её бы описали в хелпе, значит ответ примитивен - для удобства
GuAV (2005-01-26 16:14:00) [68]
> только опять же зачем OnCreate, почему недостаточно
> перекрытия конструктора формы
Ага, а ещё есть компонент TXPMainfest.
Вот и думай сделали это для максимального удобства или чтоб не напрягать программиста ньюансами :)
> Либо фрейм создается в рамках создания формы, на
> которой этот фрейм лежит.
Так вот почему бы не проинициализировать такой фрейм перед его инициализацией в OnCreate формы, тем более что фрейм предназначен для того чтобы кидать несколько одинаковых "кусков" на разные формы/места формы, так можно было бы сделать общую для них инициализацию.
jack128 (2005-01-26 16:09:00) [69]GuAV © (26.01.05 15:53) [107]
Кажись дошло. Фрейм создается в двух случаях. Либо он создается сам по себе, типа
MyFrame := TMyFrame.Create(nil); // но тут мы можем написать наш код сразу после создания фрейма
Либо фрейм создается в рамках создания формы, на которой этот фрейм лежит. Но тогда нужный нам код можно пометить в OnCreate формы.
Если код должен выполнятся в любом случае - перекрываем конструктор
default (2005-01-26 16:02:00) [70]KSergey © (26.01.05 15:56) [108]
но давноговоря про то что форма - главный контейнер мы это и имели ввиду что оттуда можно сделать нужные настройки...
default (2005-01-26 16:01:00) [71]KSergey © (26.01.05 15:56) [108]
а второе (как говорил косвенно GuAV в [107]+равносильность из хелпа) для удобства
KSergey (2005-01-26 15:56:00) [72]> [106] default © (26.01.05 15:48)
> ну в OnCreate мы получаем доступ ко всем созданным компонентам,
> из, например, введённого OnCreate-та едита такой доступ
> может и не быть
Точно! Обработчик же метод формы...
но про неэквивалентность замены - это да, это вопрос....
GuAV (2005-01-26 15:53:00) [73]Юрий Зотов © (26.01.05 15:43) [103]
Хорошо, я понял, нет OnCreate у других компонентов только потому что пользователь VCL "без голубого значка" пишет наследника только для TForm, TDataModule, TFrame (при этом в худшем случае не подозревает что пишет наследника :) ), но тогда
почему нет OnCreate для TFrame ?
default (2005-01-26 15:48:00) [74]ну в OnCreate мы получаем доступ ко всем созданным компонентам, из, например, введённого OnCreate-та едита такой доступ может и не быть(если только едит не последним создаётся)
только опять же зачем OnCreate, почему недостаточно перекрытия конструктора формы
KSergey (2005-01-26 15:46:00) [75]> [103] Юрий Зотов © (26.01.05 15:43)
> Никто не мешает. Ввести можно. Но бесполезно. Вот в чем
> фишка-то.
Вы окончательно меня запутали....
KSergey (2005-01-26 15:44:00) [76]> [101] jack128 © (26.01.05 15:41)
> есть такой момент. Метод Loaded
Честно говоря - так и подозревал, что вру..
Но тогда я уже вообще ничего не понимаю: AV - нет, в чем проблема??
default (2005-01-26 15:43:00) [77]сам хелп пишет
"Either implement this event or override the constructor of the form; do not do both."
предлагая оба варианта как равносильные)
Юрий Зотов (2005-01-26 15:43:00) [78]> GuAV © (26.01.05 15:29) [98]
Это и правда на тройку :о)
Фишка OnCreate вовсе не обязана быть именно в том, что оно происходит после чтения компонента из ресурса. Разве кто-то мешает ввести OnCreate не только у контейнеров, но и у других компонентов - как событие, дублирующее AfterConstruction, но с удобным доступом для юзера через ObjectInspector? Так же, как они и сделано в контейнерах.
Никто не мешает. Ввести можно. Но бесполезно. Вот в чем фишка-то.
jack128 (2005-01-26 15:41:00) [79]Юрий Зотов © (26.01.05 15:27) [97]
Поменяйте местами 2 строчки. :о)
Ну смеёшся что ли?? (Хотя да. Вот он - смайлик)
Юрий Зотов © (26.01.05 15:27) [97]
Ведь RAD IDE рассчитаны не только на голубые значки. :о)
Ага, она на даунов расчитана? ;-)
Я серьезно не помню как в прошлой ветке этот момент разъяснялся, но там была какая то серьезная причина. В любом случае OnCreate не для того введено, чтоб избавить программистов от знания и понимания значения ключевого слова inherited. Лудше считать, что просто для удобства. Типа RAD, design time и тд
вот хороший пример:
GuAV © (26.01.05 15:29) [98]
тут нет почему нет OnCreate для TFrame :)
KSergey © (26.01.05 15:37) [100]
Т.е. как бы нет момента (с точки зрения кнопки), когда кнопка создана и прогружено ее состояние, заданное в DesignTimeесть такой момент. Метод Loaded
KSergey (2005-01-26 15:37:00) [80]> [91] Юрий Зотов © (26.01.05 15:04)
> Button1.Caption := 'OK';
> Пишем эту строку в конструкторе формы - получаем AV.
Не правда. Я тоже проверил (D5)
Ну разве что если
constructor TForm1.Create(AOwner: TComponent);
begin
Button1.Caption := 'Test1';
inherited;
end;
то caption "не изменится" (перепишется при загрузке контролов, ну дя это понятно)
Но принципиальных проблем я все же не вижу.
И пока и вправду не вижу причин
а) отчего OnCreate не эквивалентно перекрытию конструктора/AfterConstruction
б) почему не появиться бы раньше... Ну разве что то, что из dfm грузится уже вся форма целиком и все на ней контролы, отсюда TButton, например, просто не знает, когда же ее св-ства все будут прочитаны. Т.е. как бы нет момента (с точки зрения кнопки), когда кнопка создана и прогружено ее состояние, заданное в DesignTime.
Впрочем, пока писал - ЮЗ, похоже, ответил....
Хотя, если честно, ответ как-то меня не убедил. Вернее, вопрос изначально какой-то зауиный, а ответ слишком простенький... Как буд-то я все же что-то не понял... ;)