Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.25;
Скачать: CL | DM;

Вниз

Тесты на знание Delphi   Найти похожие ветки 

 
Skyle ©   (2008-11-24 07:36) [40]

Вроде посмотрел ветку, об этом вопросе не нашёл. Итак.

VCL, вопрос №1

На некоторой неглавной форме Form2 встречается такой код:

procedure TForm2.Button1Click(Sender: TObject);
begin
 Form2.Label1.Caption := "Кнопка нажата";
end;


Всё ли правильно в этом коде (при условии что компонент Label1: TLabel действительно существует на форме)? Если нет, то что именно?

Первым делом хочется ответить, что переменная Form2, автоматом объявленная средой, может и не использоваться, поэтому такой вызов неверен. Но именно такого ответа я не нахожу. Далее читаю вопрос ещё раз, и вижу, что в вопросе есть указание на Form2. То есть не какой-нибудь TForm2, а именно Form2. После этого успокаиваюсь, решив, что переменная Form2 и есть та самая форма. Отвечаю "Все правильно" и получаю по шапке.

Где справедливость? :)


 
Сергей М. ©   (2008-11-24 08:21) [41]


> Григорьев Антон ©   (23.11.08 20:00) [7]
> не понял, в чём условность.


Если взаимодействующие проекты используют один и тот же экз-р RTL, то верен ответ "Ошибок нет", иначе верен ""В списке импортируемых модулей отсутствует ShareMem""


 
Leonid Troyanovsky ©   (2008-11-24 10:43) [42]


> Loginov Dmitry ©   (24.11.08 01:10) [35]

>  > Решает проблемы с синхронизацией неизвестным науке способом

> Супер! =)

Вот-вот.

Если уж надо расширить пространство ответов до четырех,
то лучше, IMHO, такой вариант:

4. Посылает SendMessage окну Application.

--
Regards, LVT.


 
KSergey ©   (2008-11-24 11:35) [43]

По русскому помнится 3 ошибки - двойка? ну тогда больше не заработал на классах, о как.

По тесту: мне очень понравилось оформление, во всех частях: и вопросов, и послеответные комментарии. Супер!


 
Riply ©   (2008-11-24 11:51) [44]

> [0] Григорьев Антон ©   (23.11.08 16:48)
> Кому интересно, заходите.

Здорово ! Молодцы !
Мне очень понравилось, хотя и попалась на нескольких вещах :)
Но с одной ошибкой не согласна:

9.  "Как правильно создавать нить без использования класса TThread?"

Неужели Вы хотите сказать, что функция BeginThread неправильно создает нить,
ибо использует для этого CreateThread, а не BeginThread ? :))


 
Loginov Dmitry ©   (2008-11-24 12:12) [45]


> BeginThread неправильно создает нить,
> ибо использует для этого CreateThread, а не BeginThread


Класс!
Как это понимать? ))


 
DVM ©   (2008-11-24 12:40) [46]


> Riply ©   (24.11.08 11:51) [44]

Тоже не согласен с тем, что BeginThread правильный способ, а CreateThread неправильный. Флаг мультипоточности можно и ручками выставить.


 
Riply ©   (2008-11-24 12:47) [47]

> [45] Loginov Dmitry ©   (24.11.08 12:12)
> Как это понимать? ))

Ну... как написано...
Интересуюсь: если при помощи CreateThread нельзя правильно создать нить,
то как же тогда BeginThread ( бедненькая :) ) ее созает ?
Что-то не так ?

> [46] DVM © (24.11.08 12:40)
> Тоже не согласен с тем, что BeginThread правильный способ, а CreateThread неправильный.
> Флаг мультипоточности можно и ручками выставить.

Ну там не только "Флаг мультипоточности", а и еще всякая вячина :)


 
Riply ©   (2008-11-24 12:50) [48]

>  [47] Riply ©   (24.11.08 12:47)
> "созает ?"
Очепятка и смайлик передвинулся :)


 
DVM ©   (2008-11-24 12:54) [49]


> Riply ©   (24.11.08 12:47) [47]


> а и еще всякая вячина :)

ну эта всячина лишь для удобства, но не критична для работы. Критично лишь IsMultiThread, да и то не всегда.


 
Rouse_ ©   (2008-11-24 13:31) [50]

на восьмом вопросе в базовых свойствах засыпался :)
Не обратил внимание что I у нас Cardinal :)


 
Ins ©   (2008-11-24 13:33) [51]


> на восьмом вопросе в базовых свойствах засыпался :)
> Не обратил внимание что I у нас Cardinal :)


Да, я тоже :)


 
Германн ©   (2008-11-24 14:56) [52]


> Rouse_ ©   (24.11.08 13:31) [50]


> Ins ©   (24.11.08 13:33) [51]

Редко тут бываете. Вот и засыпались. :)
Как раз эта тема на ДМ очень часто освещалась.


 
Rouse_ ©   (2008-11-24 15:11) [53]


> Редко тут бываете.

Тут это где?


 
Германн ©   (2008-11-24 15:22) [54]


> Rouse_ ©   (24.11.08 15:11) [53]
>
>
> > Редко тут бываете.
>
> Тут это где?
>

На ДМ :)
P,S. Я вот начисто пролетел на вопросах об именах переменных и о положении "точки с запятой". Оба ответа были для меня полным откровением.


 
Rouse_ ©   (2008-11-24 15:44) [55]


> На ДМ :)

Звучит для меня как откровение прямо :)


 
Dmitry S ©   (2008-11-24 16:05) [56]

А я на StrToInt(Edit1.Text); :-[


 
Григорьев Антон ©   (2008-11-24 16:19) [57]

Прочитал все ваши комментарии, но ответить по существу пока не готов, принимаю их для размышления. Отвечу только на это:

> Германн ©   (24.11.08 01:25) [37]
> Даже без очков прекрасно видно откуда у этой Квинтаны растут
> ноги :)
> Очевидно ЮЗ решил, что несправедливо будет если "тесты Юрия
> Зотова" будут доступны только Riply.

Не угадали, здесь нет никакой связи. Я не видел тесты Юрия Зотова и даже не представляю, что в них, а я - автор всех имеющихся на сегодняшний день вопросов Квинтаны. Если есть сходство, то это - случайное совпадение. Более того, если бы мне попали в руки тесты Юрия, я бы точно не стал их публиковать, потому что знаю, что он против их открытой публикации.


 
clickmaker ©   (2008-11-24 16:22) [58]

> тесты Юрия, я бы точно не стал их публиковать, потому что
> знаю, что он против их открытой публикации.

даже боюсь представить, что там за вопросы...


 
clickmaker ©   (2008-11-24 16:23) [59]

если по сабжу, то меня просто наповал убил этот вариант ответа :)
"OnPaint вызывается во время обратного хода луча развёртки монитора, чтобы исключить мерцание"


 
Германн ©   (2008-11-24 16:25) [60]


> Не угадали, здесь нет никакой связи.

Значит не угадал. Но "случайным" такое совпадение вряд ли можно назвать. Этому есть и объективные причины.


 
Ins ©   (2008-11-24 16:31) [61]


> Значит не угадал.


А это потому, что там редко бываете :-Ь


 
Германн ©   (2008-11-24 16:36) [62]


> Ins ©   (24.11.08 16:31) [61]

:)


 
Григорьев Антон ©   (2008-11-24 16:40) [63]


> clickmaker ©   (24.11.08 16:23) [59]
> если по сабжу, то меня просто наповал убил этот вариант
> ответа :)
> "OnPaint вызывается во время обратного хода луча развёртки
> монитора, чтобы исключить мерцание"

Самое смешное, что это списано почти с натуры :) Задавал у нас один человек такой вопрос - как синхронизировать вывод графики с обратным ходом луча развёртки, а его анимация мерцает. Несколько дней его совместными усилиями убеждали, что мерцание не из-за этого - так и не поверил :)


 
Rouse_ ©   (2008-11-24 16:44) [64]

А надо было просто у него уточнить с какой частотой бегает лучик на не ЭЛТ мониторах :)


 
анонимъ   (2008-11-24 16:47) [65]

> clickmaker ©   (24.11.08 16:23) [59]

а меня убил ответ "Нарисованное в OnPaint не стирается после перекрытия формы другими окнами". особенно убило то, что он "правильный".


 
clickmaker ©   (2008-11-24 16:48) [66]

> Нарисованное в OnPaint не стирается после перекрытия формы
> другими окнами

ну да. Что написано пером, то не вырубишь топором )


 
Григорьев Антон ©   (2008-11-24 16:56) [67]


> анонимъ   (24.11.08 16:47) [65]
> а меня убил ответ "Нарисованное в OnPaint не стирается после
> перекрытия формы другими окнами". особенно убило то, что
> он "правильный".

На том понятийном уровне, который доступен людям, на которых ориентирован этот вопрос, он правильный. Потому что каждый видит: рисуем где хотим, перекрываем другим окном - рисунка нет. Рисуем в OnPaint - рисунок после перекрытия сохраняется. А то, что на самом деле он стёрся, но тут же перерисовался, объясняется в комментарии.

Вы, наверное, в школе тоже считать учились, складывая яблоки с конфетками. И это несмотря на то, что в математике и понятие числа, и понятие операции сложения вводятся совсем по-другому. Просто начинать сразу со сложного тоже нельзя.


 
Григорьев Антон ©   (2008-11-24 17:27) [68]

Для начала отвечу на то, с чем сразу точно не согласен

> Loginov Dmitry ©   (23.11.08 23:36) [26]
> Вопросы в разделе "Классы" попроще. Мне кажется, в п. 4
> перед строкой Obj.IntProp := ... не помешал бы намек в виде
> Edit1.Text := 1.5;

Зачем? У программиста должен быть рефлекс на уровне спинного мозга, что пользователь может ввести всё, что угодно. Если в коде есть StrToInt(Edit1.Text) без дополнительных проверок, это должно сразу действовать как стоп-сигнал без всяких дополнительных намёков.

> Loginov Dmitry ©   (24.11.08 00:15) [31]
> Там конкретный случай дан с MessageBox(). Вроде каких-либо
> проблем с "+" замечено не было ))

Там не конкретный пример, там MessageBox приведён только как один из возможных случаев. Опять-таки должен быть рефлекс: флаги объединяются or"ом и никак иначе, даже если в конкретном случае возможен другой вариант. А то потом замучаетесь блох искать при модификации кода через несколько месяцев.

> тимохов   (24.11.08 01:20) [36]
> вопрос 4. Очень не согласен с тем, что terminatethread является
> некорректным способом закрытия потока. он является опасным
> и крайней мерой, но это способ, закрывающий поток. опять
> же - найдите мне способ прервать ADO запрос в доп. потоке?

То, что другого способа можен не существовать, ещё не говорит, что TerminateThread корректен. Зависшую программу тоже приходится через диспетчер задач прибивать, но никто не называет это корректным завершением процесса.

> Leonid Troyanovsky ©   (24.11.08 10:43) [42]
> Если уж надо расширить пространство ответов до четырех,
> то лучше, IMHO, такой вариант:
>
> 4. Посылает SendMessage окну Application.

Нет, такой ответ туда точно не впишется. Там речь идёт об общей идеологии - кто кого ждёт и кто что делает, а не о конкретном механизме обеспечения этого ожидания.


 
blackman ©   (2008-11-24 18:33) [69]

На
http://www.delphikingdom.com/quintana/quintana.asp
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
видимо есть.
Но на страницах
http://www.delphikingdom.com/quintana/quintana.asp?ItemID=...
chaset отсутствует.
как-то это не хорошо. Тестируем знания, а сами не тестируем то, что выкладываем


 
@!!ex ©   (2008-11-24 18:50) [70]

Классы, 7 вопрос.
Ответил по опыту, что код такой без проблем скомпилится.
ОТветил правильно, но это не правильно. :)
Нет никакой гарантии что этот код будет правильно работать, в стандарте нигде не написано, что это корректно. Если бы метод был class procedure ShowMsg; - тогда нет вопросов, а так - это прроверка знаний "хаккерских" заморочек, а не знания дельфи.
ИМХО

VCL
Вопрос номер 1. :)
стоит дописать в вопросе наверху:
var
 Form2:TForm2;
Потому что иначе можно привести несколько примеров кода, где такое применение будет вполне приемлемым.

Рисование в Кэнвасе.
1 вопрос.
Что за ерунда насчет того, что изображение "не стирается"?? Нарисуйте изображение в OnPaint, подвестьте прогу в вечном цикле, проведите сверху другим окном и у вас все сотрется. К томуже, перед вызовом OnPaint дельфя делает немаловажную работу, в частности по вызову BeginPaint, EndPaint.
Ответил 2 на этот вопрос, так как вызов BeginPaint EndPaint - вполне можно считать подготовкой, позволяющей отрисовываться быстрее. Например в коде уже не нужно вызывать GetDC для получения DC.
Правильный ответ считаю бредовым.

Ну и остальные вопрос - половина вопросов, о смещении рамки квада на пиксель. Это так актуально? :)


 
@!!ex ©   (2008-11-24 18:52) [71]

> Зачем? У программиста должен быть рефлекс на уровне спинного
> мозга, что пользователь может ввести всё, что угодно. Если
> в коде есть StrToInt(Edit1.Text) без дополнительных проверок,
> это должно сразу действовать как стоп-сигнал без всяких
> дополнительных намёков.

Так весь код не приведен. Логично проверку делать на OnChange. Соответственно мы можем только гадать, что может, а что не может лежать в TEdit. Кстати, если не ошибаюсь, у свежей дельфи, есть у TEdit свойство, которое позволяет запретить ввод чего угодно кроме чисел.


 
Тын-Дын ©   (2008-11-24 19:07) [72]


> Григорьев Антон ©   (23.11.08 16:48)  

В первом разделе комментарий:

открытыми массивами. Открытыми массивами являются параметры процедур и функций

Нет такого понятия "открытый массив". Есть "открытый массив параметров".


 
Тын-Дын ©   (2008-11-24 19:10) [73]

хотя может и ошибаюсь...


 
Loginov Dmitry ©   (2008-11-24 20:26) [74]

> Классы, 7 вопрос.
> Ответил по опыту, что код такой без проблем скомпилится.
> ОТветил правильно, но это не правильно. :)
> Нет никакой гарантии что этот код будет правильно работать,
> в стандарте нигде не написано, что это корректно. Если
> бы метод был class procedure ShowMsg; - тогда нет вопросов,
> а так - это прроверка знаний "хаккерских" заморочек, а
> не знания дельфи.


Вопрос 7, на мой взгляд как раз полезный. Возможность вызова статических методов без создания экземпляра объекта - основа работы метода TObject.Free(). В пояснении вполне убедительно описано, что Знать об этой особенности языка нужно, хакерского здесь ничего нет. Со стороны все касаемое программирования можно считать хакерством.


 
Игорь Шевченко ©   (2008-11-24 20:31) [75]


> Возможность вызова статических методов без создания экземпляра
> объекта - основа работы метода TObject.Free().


procedure TObject.Free;
begin
 if Self <> nil then
   Destroy;
end;


Какой же тут статический метод вызывается, позвольте узнать ?


 
antonn ©   (2008-11-24 21:09) [76]


> blackman ©   (24.11.08 18:33) [69]

в хедере нету...


 
Григорьев Антон ©   (2008-11-24 21:16) [77]


> blackman ©   (24.11.08 18:33) [69]
> На
> http://www.delphikingdom.com/quintana/quintana.asp
> <meta http-equiv="Content-Type" content="text/html; charset=utf-
> 8">
> видимо есть.
> Но на страницах
> http://www.delphikingdom.com/quintana/quintana.asp?ItemID=.
> ..
> chaset отсутствует.

И там и там есть - только что проверил. Вообще, все страницы Королевства генерируются по одному шаблону, и то, что есть на одной странице, есть на всех.

Конкретно там прописано следующее:

<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=UTF-8">

И почему вы, кстати, не можете посмотреть HTML-код страницы? Мне IE через меню "Вид/Просмотр HTML-кода" всё исправно показывает.


 
ага   (2008-11-24 21:17) [78]


> Какой же тут статический метод вызывается, позвольте узнать
> ?

TObject.Free


 
Григорьев Антон ©   (2008-11-24 21:39) [79]


> @!!ex ©   (24.11.08 18:50) [70]
> Классы, 7 вопрос.
> Ответил по опыту, что код такой без проблем скомпилится.
>
> ОТветил правильно, но это не правильно. :)

Если код без проблем скомпилировался, значит, ответ правильный. И программист должен это знать - я наблюдал ситуации, когда из-за незнания этой особенности Delphi человек не мог найти ошибку в своём коде.

> стоит дописать в вопросе наверху:
> var
>  Form2:TForm2;
> Потому что иначе можно привести несколько примеров кода,
>  где такое применение будет вполне приемлемым.

Я добавлю в вопрос указание того, что Form2 - это глобальная переменная, автоматически объявленная средой.

> Нарисуйте изображение в OnPaint, подвестьте прогу в вечном
> цикле, проведите сверху другим окном и у вас все сотрется.
>

Я про половину вопросов могу придумать ситуацию, как извратиться и заставить код работать не так, как он работает в нормальных условиях. Например, про все вопросы группы "VCL" можно сказать: а если это написано не в главной нити, то всё неправильно. Ну и что? Вы хотите, чтобы оговаривалось абсолютно всё? Чтобы, как у юристов, на простейшее действие - 10-страничный договор? Это, что ли, ваш идеал вопросов для теста?

Вы просто неверно понимаете цель этих тестов. Главное в них - не ответить правильно, а понять некоторые особенности работы Delphi, которые описаны в комментарии. Сам вопрос - это средство сделать изучение этих особенностей более интересным. И тест надо оценивать с этих позиций. Ну не знают многие новички, зачем нужен OnPaint, если они рисуют где попало, и всё рисуется! Если можете, придумайте на эту тему такой вопрос, чтобы он был понятен такому человеку, но с более точными формулировками, и я с удовольствием размещу его вместо нынешнего.

> Ну и остальные вопрос - половина вопросов, о смещении рамки
> квада на пиксель. Это так актуально? :)

Во-первых, не половина, а всего два вопроса. Даже если к ним прибавить вопрос про нехватку пикселя при рисовании прямой - три вопроса. Из 12-ти. До половины ещё трёх вопросов не хватает. Во-вторых, лично для меня это было актуально, когда я работал с графикой. В-третьих, если вы знаете более актуальные вопросы, я готов выслушать вас. Критики хватает, а конкретную идею для нового вопроса пока один только Ins предложил.

> Логично проверку делать на OnChange. Соответственно мы можем
> только гадать, что может, а что не может лежать в TEdit.
>  Кстати, если не ошибаюсь, у свежей дельфи, есть у TEdit
> свойство, которое позволяет запретить ввод чего угодно кроме
> чисел.

И что всё это доказывает? Да пусть там разрешено вводить одни только цифры - пользователь введёт "2137561094856109285612374", и будет исключение. А даже если стоит проверка где-то в другом месте - ну и что? На суть вопроса это не влияет, потому что использование try..finally для гарантированного удаления объекта - это как, извините, не писать мимо унитаза. Нормальный программист должен делать это независимо от того, есть ли вызов StrToInt или нет. А то потом при модификации кода можно получить кучу ошибок там, где всё, вроде бы, уже отлажено. А StrToInt(Edit1.Text) в данном вопросе - просто необязательный намёк, квалифицированному программисту и без него отсутствие try..finally должно глаз резать.


 
antonn ©   (2008-11-24 22:29) [80]


> Григорьев Антон ©   (24.11.08 21:16) [77]

скорее всего там дело не в теге, а в хедере (заголовке страницы. "Content-Type: text/html", а ИЕ возможно хочет "Content-Type: text/html; charset=utf-8")



Страницы: 1 2 3 4 вся ветка

Текущий архив: 2009.01.25;
Скачать: CL | DM;

Наверх




Память: 0.66 MB
Время: 0.018 c
1-1206685673
icon 16x16
2008-03-28 09:27
2009.01.25
маленькие иконки


15-1227424851
Астро
2008-11-23 10:20
2009.01.25
Поиск по массиву половинным делением и добавление элементов?


15-1227671554
Slider007
2008-11-26 06:52
2009.01.25
С днем рождения ! 26 ноября 2008 среда


3-1213785828
zorik
2008-06-18 14:43
2009.01.25
Оптимизация запроса


4-1204631197
Dmitry S
2008-03-04 14:46
2009.01.25
LDAP