Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.037 c
3-1092852610
CAMCOH
2004-08-18 22:10
2004.09.12
доступ к удалённой БД


1-1093504445
tamagavk
2004-08-26 11:14
2004.09.12
Цветовая гамма Windows XP


11-1079954833
A1ex
2004-03-22 14:27
2004.09.12
Поиск русского текста в RichEdit


3-1092632990
Mamed
2004-08-16 09:09
2004.09.12
Bag v AdODB i WebBrowser


1-1093858252
XAdmin
2004-08-30 13:30
2004.09.12
Видимиость пользоваетльского типа из дургого Unit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский