![]() |
| ||
|
|
Новости |
Поиск |
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 15:33:00) [81]> begin...end © (26.01.05 15:20) [96]
> Да в курсе я про всё это, просто написал так, чтобы понятнее
> было.
Тогда в [68] - ошибка:
> PWord(Integer(@I) + 2)^ - получаем слово, расположенное по
> этому адресу. Вот оно (выделено):
> 00000000 0111111111111111 11111111
При таком размещении по смещению [+2] будет расположено как раз НЕвыделенное слово.
GuAV (2005-01-26 15:29:00) [82]Юрий Зотов © (26.01.05 15:04) [91]
Фишка OnCreate в том, что оно происходит после создания компонента из ресурса. Соотвественно оно нужно для инициализации компонента после прочтения из ресурса. В ресурс помещаются наследники TForm, TDataModule, TFrame, но не наследники TButton, TEdit...
Это на тройку, т.к. тут нет почему нет OnCreate для TFrame :)
Юрий Зотов (2005-01-26 15:27:00) [83]> jack128 © (26.01.05 15:11) [93]
Поменяйте местами 2 строчки. :о)
Ведь RAD IDE рассчитаны не только на голубые значки. :о)
> jack128 © (26.01.05 15:16) [94]
> Отличия между OnCreate и перекрытием конструктора ...
> ... но цель - получить событие ...
> ... будет достигнута в любом случае.
Не в любом. А только в случае тех компонентов, которые как раз и имеют OnCreate. Именно потому остальные его и не имеют.
begin...end (2005-01-26 15:20:00) [84]> [91] Юрий Зотов © (26.01.05 15:04)
> Там даже двойная перестановка.
Да в курсе я про всё это, просто написал так, чтобы понятнее было. Я же писал это в ответ на [65] MetalFan © (26.01.05 13:40), он ведь попросил "на пальцах"...
Kerk (2005-01-26 15:19:00) [85]Developerr (25.01.05 19:03) [22]
Согласен, сразу пугает, ну и ничего страшного, есть и более серьезные коды, например, исходники Linux, но это же не значит, что там писали люди из дурки.
Ты не понял. Не важно какая стоит там задача (я и код не должен был публиковать.. нервы блин). Фишка в том, что можно было закодить в РАЗЫ проще, понятней и правильнее.. Приведенный в той ветке код неадекватен!!!
jack128 (2005-01-26 15:16:00) [86]Игорь Шевченко © (26.01.05 14:31) [86]
Отличия в между OnCreate и перекрытием конструктора будет в цепочке наследования, но цель - получить событие, возникающее после создания и инициализации всех компонентов, положенных на форму в дезин тайм, будет достигнута в любом случае.
jack128 (2005-01-26 15:11:00) [87]Юрий Зотов © (26.01.05 15:04) [91]
Button1.Caption := 'OK';
Пишем эту строку в конструкторе формы - получаем AV.
Да? С чего бы это?
type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
end;
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
Button1.Caption := 'Test';
end;
Юрий Зотов (2005-01-26 15:05:00) [88]> default © (26.01.05 14:59) [90]
> для других контролов функциональность OnCreate можно получить
> перекрыв конструктор
Нельзя.
Юрий Зотов (2005-01-26 15:04:00) [89]> begin...end © (26.01.05 14:26) [81]
Там даже двойная перестановка.
> jack128
> default
> KSergey
> Fay
Подсказка.
Button1.Caption := 'OK';
Пишем эту строку в конструкторе формы - получаем AV.
Пишем ее же в OnCreate той же формы - все работает.
В чем фокус - понять легко.
Теперь думаем - почему OnCreate не ввели еще в TComponent? Ведь, казалось бы, просто напрашивается там такое событие.
default (2005-01-26 14:59:00) [90]KSergey © (26.01.05 14:43) [88]
то есть флагом OldCreateOrder управляется место всплытия OnCreate
или в конструкторе или после него в AfterConstruction
ну и чего это даёт...по-моему всё-таки дело в том что форма - контейнер
для других контролов функциональность OnCreate можно получить перекрыв конструктор или AfterConstruction
а выделено событие OnCreate только для формы...
default (2005-01-26 14:45:00) [91]"constructor TCustomForm.Create(AOwner: TComponent);
begin
GlobalNameSpace.BeginWrite;
try
CreateNew(AOwner);
if (ClassType <> TForm) and not (csDesigning in ComponentState) then
begin
Include(FFormState, fsCreating);
try
if not InitInheritedComponent(Self, TForm) then
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
finally
Exclude(FFormState, fsCreating);
end;
if OldCreateOrder then DoCreate;
end;
finally
GlobalNameSpace.EndWrite;
end;
end;
procedure TCustomForm.DoCreate;
begin
if Assigned(FOnCreate) then
try
FOnCreate(Self);
except
if not HandleCreateException then
raise;
end;
if fsVisible in FFormState then Visible := True;
end;
procedure TCustomForm.AfterConstruction;
begin
if not OldCreateOrder then DoCreate;
if fsActivated in FFormState then
begin
Activate;
Exclude(FFormState, fsActivated);
end;
end;
"
"Specifies when OnCreate and OnDestroy events occur.
property OldCreateOrder: Boolean;
Description
When OldCreateOrder is False (the default) the OnCreate event occurs after all constructors are finished (from the AfterConstruction method) and the OnDestroy event occurs before any destructors are called (from the BeforeDestruction method).
This timing differs from Delphi version 3 and previous, where the OnCreate event occurred when the TCustomForm constructor executed and the OnDestroy event occurred when the TCustomForm destructor executed. Applications that require the OnCreate event and OnDestroy events to occur from the constructor and destructor of the form can set OldCreateOrder to True.
"
KSergey (2005-01-26 14:43:00) [92]> [87] default © (26.01.05 14:32)
> а OnCreate для едитов и прочей фигни смысла нет делать -
> они могут "восполниться" в OnCreate формы всё
Я тоже только это мог предположить именно с той же мотивацией, однако ответ "нафиг-зафиг" уже был
И он никак не согласуется с "подсказками"..
default (2005-01-26 14:32:00) [93]Юрий Зотов © (26.01.05 14:22) [77]
согласен, не обязательно
KSergey © (26.01.05 14:18) [75]
наверно потому что форма - контейнер видимых и не видимых контролов
и при её создании может потреб-ся какие-то действия с ними или другие ведь создание формы это начало работы приложения(в большинстве случаев) мало ли чего может потребоваться
а OnCreate для едитов и прочей фигни смысла нет делать - они могут "восполниться" в OnCreate формы всё
Игорь Шевченко (2005-01-26 14:31:00) [94]jack128 © (26.01.05 14:26) [82]
А вот и нифига
KSergey (2005-01-26 14:29:00) [95]> [84] Юрий Зотов © (26.01.05 14:27)
> > TCustomForm - это можно считать компонентом?
> Не можно, а нужно!
О, спасибо
Это я и хотел услышать.
Тогда, считаю, верный ответ ("в каком компоненте впервые появляется OnCreate) все же TCustomForm, а не TForm. Это если формально придираться.
Но выяснил это только по справке. никогда не задумывался почему и отчего....
KSergey (2005-01-26 14:27:00) [96]> [79] Юрий Зотов © (26.01.05 14:24)
> Физического расположения в памяти.
Вот нифига себе... Ладно, буду думать...
Юрий Зотов (2005-01-26 14:27:00) [97]> KSergey © (26.01.05 13:59) [69]
> TCustomForm - это можно считать компонентом?
Не можно, а нужно!
> Или компонент - то, что на палитре?
Компонент - это TComponent и ВСЕ его наследники. Никакая палитра тут ни при чем.
begin...end (2005-01-26 14:26:00) [98]> [79] Юрий Зотов © (26.01.05 14:24)
Перестановка байт внутри слова?
jack128 (2005-01-26 14:26:00) [99]Да нафиг не нужен OnCreate ни форме, ни датамодулю.. Всегда можно AfterConstruction или Create перекрыть ;-)
default © (26.01.05 14:14) [73]
ведь OnCreate всплывает на WM_CREATE
нет, это не так. исходники VCL рулят безбожно..
Юрий Зотов (2005-01-26 14:24:00) [100]> begin...end © (26.01.05 14:22) [76]
> Ну хоть подскажите, чего не хватает :-)
Физического расположения в памяти.