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

Вниз

тест на 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;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.047 c
4-1090743349
ogf
2004-07-25 12:15
2004.09.12
хук на запуск прог


10-1021529464
Олег Лаукарт
2002-05-16 10:11
2004.09.12
Многопотоковый корба-клиент (Visibroker)


4-1090617944
кактусбел
2004-07-24 01:25
2004.09.12
Сканирование памяти


1-1093628027
Александр-
2004-08-27 21:33
2004.09.12
Показ Help.chm на определенном topice ?


1-1093786680
Antonmm
2004-08-29 17:38
2004.09.12
Размер файла