Текущий архив: 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