Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тест по Delphi при приеме на работу [D6, Win2k]


Страницы:   1 2 3 4 5 6 7 8 9

Anna ©   (2005-01-25 16:14:00) 

Уважаемые профессионалы, помогите, пожалуйста! При приеме на работу надо выяснить уровень компетентности человека в 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.

Впрочем, пока писал - ЮЗ, похоже, ответил....
Хотя, если честно, ответ как-то меня не убедил. Вернее, вопрос изначально какой-то зауиный, а ответ слишком простенький... Как буд-то я все же что-то не понял... ;)


Страницы:   1 2 3 4 5 6 7 8 9

Наверх

Титульная страница Поиск, карта сайта Написать письмо