Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Внизтест на delphi Найти похожие ветки
← →
dima (2004-08-02 11:21) [0]Хочу сделать программу для тестирования. Тест загружаю из RTF в TRichedit. В местах, куда вводить ответы стоят пропуски _________ . Нужно, чтобы при нажатии на ______ появлялся TEdit и в него вводился ответ. А в конце теста при нажатии на кнопку «Проверить» ответы из TEditов сравнивались бы с ответами, которые находятся в этом же файле rtf. Правильных ответов может быть несколько. Кто-нибудь знает как это сделать?
← →
Romkin © (2004-08-02 11:24) [1]Может, не надо так мудрить? Переведи текст в html и показывай в браузере - гораздо легче :)
← →
TUser © (2004-08-02 11:29) [2]Эдиты могут появляться при установке им св-ва Visible:=true; Но это действительно как-то странно. Тебе точно нужно все это на основе RichEdit"а делать?
← →
inic © (2004-08-02 11:42) [3]Вроде есть аттрибут "Protected" для части текста (такой же например как жирность, курсив т.п.). Видел где-то в commctrl.pas
← →
dima (2004-08-02 17:20) [4]мне просто надо чтобы один TEdit появлялся в местах _____ ,а вводимые в него ответы как-то сохранялись и проверялись
← →
Sergey Kaminski © (2004-08-02 17:41) [5]Очень плохо поставлена задача. Думается, лучше пересмотреть, т.к. РичЕдит совсем не для этих целей. Поэтому, будет неудобно пользоваться конечному пользователю. А программисту это состряпать - будет полнейший ужас, мешанина очень некрасивого хака.
Варианты:
Romkin © (02.08.04 11:24) [1]
или, напр., составить парсер, перемалывающий твой RTF-текст и создающий ран-тайм контролы.
← →
Sergey_Masloff (2004-08-02 17:59) [6]Посмотри на delphi.abot.com про то как гиперссылки в ричедите делать и вместо ссылок показывай свой едит. Только это ОЧЕНЬ плохая идея - не я первый тебе говорю.
← →
Юрий Зотов © (2004-08-02 18:20) [7]> dima
ОК. Вот появился Ваш Edit и я написал в нем: "траляля-ля, траляля". Или любую другую фразу.
А теперь попробуйте проверить правильность этого ответа. Искусственный интеллект написать придется.
Жизни хватит?
Думаете, зря, что ли, тесты предлагают набор ГОТОВЫХ ответов и надо только ВЫБРАТЬ правильный? Наверное, не зря - проверка идет просто по номеру ответа.
И никаких Edit"ов.
← →
dima (2004-08-02 20:31) [8]выбрать правильный может и идиот
весь смысл в том, чтобы пользователь вводил сам ответ,
а TRichedit использую для удобства составления тестов.
Если есть другие мысли подскажите.
← →
Sergey Masloff (2004-08-02 20:52) [9]Юрий Зотов © (02.08.04 18:20) [7]
>Думаете, зря, что ли, тесты предлагают набор ГОТОВЫХ ответов и >надо только ВЫБРАТЬ правильный?
С этим можно поспорить. Такие тесты мало что могут проверить - за примерами с брайнбенчей и текметриксов это прекрасно видно.
А проверить введенное в едит на некий набор ключевых слов и их порядка не такая сложная задача. По крайней мере я решал ;-) Потом еще хороший тип вопросов - на графике нарисована кривая например напряжения а испытуемый мышем рисует зависимую от нее кривую чего-нибудь. Примерно естественно. Потом все это анализируется (тоже задача вполне решаемая). Из более простых - тесты с активными зонами. Допустим фотография двигателя в разрезе и нужно мышкой ткнуть в деталь название которой в вопросе.
Вобщем тема интересная, я когда-то принимал участие в создании достаточно серьезной системы тестирования, тема эта совсем не такая простая но при приложении усилий довольно глубокая.
← →
AlexMIx © (2004-08-03 08:48) [10]Удалено модератором
Примечание: офтопик, заведи свою ветку
← →
dima (2004-08-03 10:19) [11]delphi.abot.com не отвечает, но идея, по-моему, неплохая.
Вы когда-нибудь видели тесты от 1С. Там действительно в тексте теста ссылки (может это и не Richedit), их нажимаешь, появляется
окошко (может и не Edit) куда вводится ответ, который сохраняется в тексте теста. А в конце теста Checkbox "Подтверждаю ответы" и кнопка "Проверить".
На Delphi возможно сделать что-то похожое?
Все что может найти Google по запросу "Delphi тест" - это тупой выбор правильного варианта.
← →
Sergey_Masloff (2004-08-03 10:35) [12]delphi.aboUt.com
опечатался
← →
KSergey © (2004-08-03 11:06) [13]> dima (03.08.04 10:19)
> На Delphi возможно сделать что-то похожое?
Дельфи как таковое тут мало при чем. Надо просто решить вопрос с отображением текста. Про html - уже говорили.
Если таки копать richedit - см. в сторону EM_POSFROMCHAR
← →
Юрий Зотов © (2004-08-03 12:18) [14]> А проверить введенное в едит на некий набор ключевых слов и их
> порядка не такая сложная задача.
Вопрос: Чем отличается певец от певицы?
Ответ 1: Певец - мужчина, певица - женщина.
Ответ 2: Певица - женщина, певец - мужчина.
Ответ 3: Певец - не женщина, певец - мужчина.
Ответ 4: Певица - не мужчина, певец - мужчина.
И подобных вариантов - море бескрайнее. Все правильные. Определить это по наличию ключевых слов (певец, певица, мужчина, женщина и т.п.) и порядку их следования для ВСЕХ возможных вариантов, IMHO, невозможно. Ошибки неизбежны.
Даже для такого простого вопроса.
← →
Sergey_Masloff (2004-08-03 12:31) [15]Юрий Зотов © (03.08.04 12:18) [14]
На то имеются методисты (составление вопросов на которые ответ проще формализовать). Нет, серьезно, делали и успешно подобные тесты. Да и зарубежные аналоги видел я на выставках.
← →
KSergey © (2004-08-03 12:33) [16]> [14] Юрий Зотов © (03.08.04 12:18)
Я не знаю, что имеет в виду автор, но не надо все усложнять
Вполне возможно, что в нужное место, например, надо будет просто вставить число (результат вычисления на бумажках) - вот и все.
> [8] dima (02.08.04 20:31)
> выбрать правильный может и идиот
Не факт. Угадать - да. Выбрать - не всегда.
Это все от профессионализма составителя зависит.
PS
Мне запомнились с института тесты по математике. Возможно, я был слабым учеником, но из 5 вариантов заведомо отбросить неверные (а так, как известно, отвечать на тесты проще) удавалось редко: ответы отличались не принципиально, лишь какой-либо мелочью. И чтобы выбрать правильный - надо было очень четко знать все, что надо было знать. Если плаваешь - то увы, только угадайка...
← →
dima (2004-08-03 14:39) [17]черт с ней с красотой, если нельзя из rtf грузить пусть будет txt
тесты по английскому (никаких цифр и бумажек)
пример
1.1 Complete the sentences with one of the following verbs in correct form:
come get happen look make start stay try work
1. ‘You __________ hard today.’ ‘Yes, I have a lot to do.’
2. I ___________ for Christine. Do you know where she is?
3. It ________ dark. Shall I turn on the light?
4. They haven’t got anywhere to live at the moment. They ________ with friends until they find somewhere.
5. ‘Are you ready, Ann?’ ‘Yes, I_________.’
6. Have you got an umbrella? It _________ to rain.
7. You ___________ a lot of noise. Could you be quieter? I ____________ to concentrate.
8 . Why are all these people here? What ___________?
А можно сделать, чтобы прога читала нужную инфу из текста теста?
Например, файл теста определенной структуры, где первые 10 строк (например) содержат служебную инфу.
Пример
1-ая строчка число вопросов в тесте
прога берет эту цифру, ищет символ подчеркивания и на эти места ставит ссылочки, которые создаются в процессе выполнения (забыл, как это правильно называется)
2-6 строчки сюда вводятся ответы по порядку, например:
правильный ответ1 на 1 вопрос,правильный ответ2 на 1 вопрос,правильный ответ3 на 1 вопрос; правильный ответ1 на 2 вопрос...
эти 10 строчек как-то скрываются и не отображаются
а потом сравнивается то, что ввели в edit со строчками ответов
Нафантазировал, что писатели–фантасты позавидуют-))
← →
KSergey © (2004-08-03 14:49) [18]Можно
Ответ на вопрос "как" - платный
← →
KSergey © (2004-08-03 14:50) [19]Тем более, что я уже писал: Memo+EM_POSFROMCHAR
← →
Думкин © (2004-08-03 14:52) [20]> [15] Sergey_Masloff (03.08.04 12:31)
А можно ссылки? Потому как сталкивался и согласен с ЮЗ - проблем тут немерянно и приемлимого решения не знаю.
← →
KSergey © (2004-08-03 15:00) [21]> [20] Думкин © (03.08.04 14:52)
По-моему, в [17] dima (03.08.04 14:39) - хороший пример.
Если пользователь описался в букве - его проблемы (он ведь по языку экзамен сдает, важно не просто "разбираться в проблеме"). Считаем, что не угадал ;)
(Ну можно слегка усложнить, дупустив опечатку в одной букве. Можно еще усложнить, допустив пропуск одной буквы. Но это уже детали.)
← →
Думкин © (2004-08-03 15:08) [22]> [21] KSergey © (03.08.04 15:00)
Мы игры типа телефиговин писали - там сложнее, если без выбора. Я только тестил - но былдо ужасно.
← →
dima (2004-08-03 17:14) [23]//Ответ на вопрос "как" - платный
Ну как всегда. Чуть что плати бабки
← →
Sectey © (2004-08-03 17:51) [24]>dima
Я тут знакомому диплом на аналогичную тему клипал, я использовал динамическое построение HTML-ок и последующее их разбор.
← →
Sectey © (2004-08-03 17:54) [25]Если интересно могу в общих чертах расказать как
← →
dima (2004-08-03 20:39) [26]Расскажите,пожалуйста.
← →
Romkin © (2004-08-03 21:06) [27]Ну с html просто: нужен WB: TWebBrowser, и строка с формой. В форме - что угодно, с кнопочкой. Грузим ее в WB.
Допустим, в S следующее:<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="#CCCCCC">
<form method="post" action="about:answer" name="answer">
<input type="text" name="1" size="5"> что хочешь?
<p>
<input type="submit" name="Submit" value="Готово!">
</p>
</font>
</form>
</body>
</html>
Грузим (через URL тоже можно, но больше полукило не пихнешь):var
V: OleVariant;
HtmlDoc: IHTMLDocument2;
begin
WB.Navigate("about:blank"); //чтобы документ был
OleCheck(WB.Document.QueryInterface(IHTMLDocument2, HtmlDoc));
v := VarArrayCreate([0, 0], varVariant);
V[0] := S; //Содержимое
//и просто пишем в пустой документ...
//Как ни странно, VArray & PSafeArray - одно и то же :)
HtmlDoc.write(PSafeArray(TVarData(V).VArray));
HtmlDoc.close;
end;
В обработчике OnBeforeNavigate2 спокойно ждем, пока юзверь нажмет на кнопочку "Готово" :))
И получает список с введенными строками (не забывать об uses MSHTML, там много полезного)var
p: pointer;
Fields: TStrings;
begin
if not (pos("ANSWER", uppercase(URL)) > 0) then exit;
if varIsArray(PostData) then
begin
P := varArrayLock(PostData);
try
Fields := TStringList.Create;
try
ExtractHeaderFields(["&"], ["+"], PChar(P), Fields, True);
with Fields do
FPostString := Utf8ToAnsi(Fields.Text); //Да тут куда угодно, это результат
finally
Fields.Free;
end;
finally
varArrayUnlock(PostData);
end;
end;
URL := "about:blank"; //Опустошаем, нафиг оставлять
Вот и все, в FPostString - введенные строки, разделенные переводом строки.
← →
Piter © (2004-08-03 22:24) [28]Sergey Masloff (02.08.04 20:52) [9]
а сколько вы набирали балов на BrainBench?
← →
Sergey Masloff (2004-08-03 23:06) [29]Piter © (03.08.04 22:24) [28]
<offtop>
Когда они еще были текметрикс набрал не помню сколько но 0.01% лучше меня были. 4.8 чтоли ;-) Был на работе день - ну делать нечего было. Я прошел штук 10 тестов (разных) из них 6 или 7 на мастера ;-) Прислали целую пачку бумажек-сертификатов. А когда недавно было обсуждение ради интереса 4.2 или 4.3 набрал. А что? Все равно это ни фига не значит.
</offtop>
P.S А чего вдруг на Вы перешел? ;-)
← →
Piter © (2004-08-03 23:29) [30]Sergey Masloff (03.08.04 23:06) [29]
А чего вдруг на Вы перешел?
извини, это случайно
← →
dima (2004-08-04 18:53) [31]у меня delphi ругается на строчке
WB.Navigate("about:blank"); //чтобы документ был
[Error] Unit1.pas(35): Undeclared identifier: "WB"
[Error] Unit1.pas(36): Undeclared identifier: "OleCheck"
наверно, что-то у меня с руками:)))
← →
KSergey © (2004-08-04 19:39) [32]> dima (04.08.04 18:53) [31]
> у меня delphi ругается на строчке
>
> WB.Navigate("about:blank"); //чтобы документ был
> [Error] Unit1.pas(35): Undeclared identifier: "WB"
Внимательнее читай, копи-пасте - этого мало.
> Romkin © (03.08.04 21:06) [27]
> Ну с html просто: нужен WB: TWebBrowser
← →
GrayFace © (2004-08-04 20:40) [33]Можно сделать так:
Так готовят:
Is ___(any_Any_ANY_aNy_anY_и т.д.)_body here?
Так выглядит:
Is ___body here?
т.е. идет столько подчеркиваний, сколько их должно получиться в результате, потом скобка, внутри которой правильные ответы разделяются подчерком, а заканчивается это все ")_".
Как? Вначале обрабатываешь сам(изменяешь, запоминаешь позиции всех пропусков), потом через TMemoryStream пихаешь в Memo. А потом при клике спотришь SelStart и сравниваешь с позициями пропусков. Похоже, сделать тоже самое, используя RichEdit не так уж сложно, используя SelStart, SelLength и SelText: Делаем SelectAll - получаем в SelText текст в не-RTF виде. Надо изменить какой-то текст - ставь на него SelStart и SelLength и меняй SelText.
Sergey Kaminski © (02.08.04 17:41) [5]
или, напр., составить парсер, перемалывающий твой RTF-текст и создающий ран-тайм контролы.
Это ничем не лучше. Парсить RTF на таком уровне очень сложно.
Юрий Зотов © (03.08.04 12:18) [14]
> Вопрос: Чем отличается певец от певицы?
Ну есть же вопросы, с которыми такой фокус пройдет или почти пройдет. Например, 2+2=___. Конечно, если ввести 4.00 или 4e1, то тест выдаст ошибку, но в большинстве случаев все будет ОК. А в тестах по русскому такой тип теста просто идеален.
← →
KSergey © (2004-08-05 09:25) [34]> [33] GrayFace © (04.08.04 20:40)
> Так готовят:
> Is ___(any_Any_ANY_aNy_anY_и т.д.)_body here?
Вот только "и т.д." не надо вписывать ;) то это универсальный ответ получится ;)
По-моему, хоть идея сама по себе и не плоха, возможно, но в даннос случае проще просто к одному регистру привести и проверить. А то иначе что делать со словами из 10 букв? А вдруг вариацию какую пропустишь? Не, ну так нельзя.
Разве что для вариаций, когда можно действительно правильно написать несколькими способами... (пример привести не берусь, но с какими-нибудь апострофами если, например...
Впрочем, это уже детали
Пока не понятно к какому варианту прибился автор и смог ли он подсунуть поля ввода...
← →
GrayFace © (2004-08-05 11:54) [35]Естественно сравнение должно быть без учета регистра. Это я для примера.
← →
dima (2004-08-05 17:46) [36]дошел я до ручки (в смысле до строчки)
HtmlDoc.write(PSafeArray(TVarData(V).VArray));
[Error] Unit1.pas(44): Undeclared identifier: "PSafeArray"
я так понимаю, что это массив (Отставить смех!-))
Я объявил PSafeArray: array of string;(это вообще правильно?)
выскакивает
[Error] Unit1.pas(44): Missing operator or semicolon
[Error] Unit1.pas(44): Incompatible types: "Array" and "tagSAFEARRAY"
что-то в opere не работает кнопка "вставка цитаты"
>Romkin © (03.08.04 21:06) [27]
Не могли бы вы сделать какой-нибудь рабочий вариант (полный listing),
а то я с этим кодом буду 2 месяца разбираться.
>GrayFace © (04.08.04 20:40) [33]
>Можно сделать так:
>Так готовят:
>Is ___(any_Any_ANY_aNy_anY_и т.д.)_body here?
Когда я говорил про несколько правильных вариантов, я не имел в виду any_Any_ANY_aNy_anY. Человек должен писать согласно правилам
грамматики, так как если бы он писал в тетради, и все варианты, отличные от any считаются неправильными. В конце концов можно оговорить, что вводить надо только в нижнем регистре.
Я имел в виду таки предложения:
______ you help me with this exercise?
Сюда можно вставить: Can/Will/Could/Would и эти 4 варианта будут правильными.
← →
dima (2004-08-05 18:15) [37]//Пока не понятно к какому варианту прибился автор и смог ли он подсунуть поля ввода...
смейтесь, смейтесь -)))
Rtf (по моему скромному мнению) выглядит лучше, хотя надо сделать что-то рабочее и посмотреть.
Главное, чтобы файл теста можно было сделать в любом текстовом редакторе, без всяких там "Конструкторов тестов", в которые надо забивать по одному вопросу.
word при сохранении в html кидает кучу лабуды, а возится с тэгами в notepade/ultraedite/вставить по вкусу/ по-моему не удобно.
Правда неизвестно что он там добавляет в rtf-)))
← →
Romkin © (2004-08-05 18:27) [38]Вообще говоря, найти, где что описано, достаточно просто :)
uses MSHTML, ActiveX, COMObj;
Уж по крайней мере, когда работаешь с интерфейсами, в 90% случаев тебе нужен ActiveX.
← →
GrayFace © (2004-08-07 10:11) [39]dima (05.08.04 17:46) [36]
>______ you help me with this exercise?
>
> Сюда можно вставить: Can/Will/Could/Would и эти 4
> варианта будут правильными.
А еще May
dima (05.08.04 18:15) [37]
> Правда неизвестно что он там добавляет в rtf-)))
В RTF не меньше лабуды, только эта лабуда важна.
Но в RTF, по-моему, это осуществить легче.
← →
Vetek_2 (2004-08-07 19:18) [40]а ты продумал защиту для такого теста ???
- я такие тесты пару раз ломал - добиваясь 100 % результата ..
- основная идея - повторный ответ с "подбиранием" правильного ответа ...
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.038 c