Войти

Показать полную графическую версию : [решено] Как сделать для каждого поля свой идентификатор


McLotos
28-04-2012, 16:38
Добрый день. Вот возникла идейка написать программу для тестирования знаний сотрудников = )
Вот написал оболочку, она состоит из формы, там несколько полей ввода, радиокнопки, поля с датами. Подскажите как сделать чтобы после нажатия кнопки всё что записано в полях сохранялось в файл, а если нажать другую кнопку, то поля очищались
Как сделать для каждого поля свой идентификатор, чтобы патом можно было понять с какого поля пришла инфа?

Creat0R
28-04-2012, 17:30
Предупреждение за нарушение правил форума, пункт 2.7 (http://forum.oszone.net/rules.html#2.7) и пункт 3.19 (http://forum.oszone.net/rules.html#3.19):

2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе (http://forum.oszone.net/faq.php?faq=vb_read_and_post#faq_thread) и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread) и напишите об этом в теме.

Переименуйте пожалуйста тему (Как переименовать свою тему? (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread)).

McLotos
30-04-2012, 08:54
Creat0R, постоянно ты ко мне придираешься по этому поводу =)
А что, никто не знает?

ferget
30-04-2012, 12:17
А в чем собственно проблема?

вы же уже все это делали в предыдущем проекте, и в файл записывали и читали из него.

Creat0R
30-04-2012, 14:55
постоянно ты ко мне придираешься по этому поводу »
Видимо есть причина ;) .

McLotos
02-05-2012, 06:50
ferget, просто я не любитель использовать уже готовый код, иногда проще написать с нуля, так лучше понимается код. = )
Тем более что в первом проекте всё оказалось намного проще, вовсе не обязательно было создавать кучу функций, обошлись комбинацией (один массив+один селект+одна функция) = )
И кстати, наш вариант работает даже в тех случаях если изменилось разрешение экрана, или например заменили монитор, т.е. расставляет ориентируясь по новым параметрам, а не по старой сетке = )
А в этом проекте использовать ту же логику не получится - специфика другая, и я тут подумал что файл это скорее временный вариант, скорее всего тест.админ будет просто отправлять вопросы и варианты ответов всем тест.клиентам по сети, а после ответов собирать с них данные.
Кстати вот что получилось!
#include <Date.au3>
#include <GUIConstants.au3>
#include <Array.au3>
#include <File.au3>

#NoTrayIcon
#Require Admin

Dim $qCount
Dim $bLoop = 1
Dim $GUIConstant=10 ;эта константа нужна чтобы в случае необходимости изменить размеры не пришлось искать в коде все переменные, а заменить только её значение
Dim $ProgramName='Администратор тестирования'

Opt("GUIOnEventMode", 1)
GUICreate($ProgramName,$GUIConstant*80,$GUIConstant*50)
;при появлении события запускаем нужную функцию
GUISetOnEvent($GUI_EVENT_CLOSE, "SystemKeys")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SystemKeys")
GUISetOnEvent($GUI_EVENT_RESTORE, "SystemKeys")

GUICtrlCreateContextMenu ()

GUISetState (@SW_SHOW)
GUISetHelp("notepad");пока не придумал как сделать чтобы вместо пустого блокнота открывалась справка, скорее всего этот блокном будет заполняться скриптом после открытия =)
GUISetFont($GUIConstant+$GUIConstant/2, 300)

While $bLoop = 1
Local $qCount = InputBox("Введите количество", "Укажите сколько будет вопросов в тесте и нажмите ОК."&@CRLF&@CRLF&"ВНИМАНИЕ! Количество вопросов не должно быть меньше 10и!")
If $qCount < 10 Then
MsgBox(4096, "Ошибка", "Вы неверно ввели число. Повторите попытку")
Else
$bLoop = 0
EndIf
WEnd
;для удобства, разделим ЮИ админа на 2 вкладки, "создание теста" и "просмотр результатов"
$tab=GUICtrlCreateTab ($GUIConstant,$GUIConstant, $GUIConstant*78,$GUIConstant*30)
$tab1=GUICtrlCreateTabitem ("Вопросы")
GUISetFont($GUIConstant, 300)
GUICtrlCreateGroup ("Создано вопросов",$GUIConstant*65,$GUIConstant*5,$GUIConstant*13,$GUIConstant*5)
GUISetFont($GUIConstant*2, 300)
GUISetFont($GUIConstant+3, 300)

GUICtrlCreateLabel("Введите вопрос",$GUIConstant*2,$GUIConstant*5,$GUIConstant*13,$GUIConstant*2)
GUICtrlCreateInput("",$GUIConstant*2,$GUIConstant*7,$GUIConstant*30,$GUIConstant*2+$GUIConstant/2)

GUICtrlCreateLabel("Вариант1",$GUIConstant*2,$GUIConstant*10,$GUIConstant*10,$GUIConstant*2)
GUICtrlCreateInput("",$GUIConstant*2,$GUIConstant*12,$GUIConstant*30,$GUIConstant*2+$GUIConstant/2)
GUICtrlCreateRadio("",$GUIConstant*33,$GUIConstant*12+$GUIConstant/2,$GUIConstant,$GUIConstant+$GUIConstant/2)

GUICtrlCreateLabel("Вариант2",$GUIConstant*2,$GUIConstant*15,$GUIConstant*10,$GUIConstant*2)
GUICtrlCreateInput("",$GUIConstant*2,$GUIConstant*17,$GUIConstant*30,$GUIConstant*2+$GUIConstant/2)
GUICtrlCreateRadio("",$GUIConstant*33,$GUIConstant*17+$GUIConstant/2,$GUIConstant,$GUIConstant+$GUIConstant/2)

GUICtrlCreateLabel("Вариант3",$GUIConstant*2,$GUIConstant*20,$GUIConstant*10,$GUIConstant*2)
GUICtrlCreateInput("",$GUIConstant*2,$GUIConstant*22,$GUIConstant*30,$GUIConstant*2+$GUIConstant/2)
GUICtrlCreateRadio("",$GUIConstant*33,$GUIConstant*22+$GUIConstant/2,$GUIConstant,$GUIConstant+$GUIConstant/2)

$clear = GUICtrlCreateButton ( "Очистить", $GUIConstant*2, $GUIConstant*27+$GUIConstant/2,$GUIConstant*8)
GUICtrlSetOnEvent(-1, "ButtonPressed")
$Add = GUICtrlCreateButton ("Добавить", $GUIConstant*11,$GUIConstant*27+$GUIConstant/2, $GUIConstant*8)
GUICtrlSetOnEvent(-1, "ButtonPressed")

$tab2=GUICtrlCreateTabitem ("Результаты")
GUICtrlSetState(-1,$GUI_SHOW)

GUICtrlCreateTabitem ("")
GUICtrlCreatePic("C:\testbg.bmp",$GUIConstant,$GUIConstant*31,$GUIConstant*70+$GUIConstant*8-2,$GUIConstant*15)
GUISetState ()

;Команды и параметры принимаемые окном
; -3 закрыть окно
; -4 свернуть окно
; -5 вернуть окно
; 19 очистить форму
; 20 добавить
; 21 закрыть
; 8 поле вопроса
; 10 вариант1
; 13 вариант2
; 16 вариант3
; 11 радио1
; 14 радио2
; 17 радио3
; 4 нулевое состояние радиокнопки
; 1 отмеченная радиокнопка





Func ButtonPressed()

Local $Questions="C:\Questions.qst"
Local $count=_FileCountLines($Questions)/4
Local $quest=GUICtrlRead(8)
Local $var1=GUICtrlRead(10)
Local $var2=GUICtrlRead(13)
Local $var3=GUICtrlRead(16)
Local $r1=GUICtrlRead(11)
Local $r2=GuiCtrlRead(14)
Local $r3=GuiCtrlRead(17)
Local $p1
Local $p2
Local $p3
Local $WDAY
Local $msg
Local $TimeIn=@MDAY&'-'&@MON&'-'&@YEAR&'('&@YDAY&' день года)'&@CRLF&$WDAY&@CRLF&@HOUR&':'&@MIN&':'&@SEC

If Not FileExists($Questions) Then
_FileCreate($Questions)
Else
FileOpen($Questions)
EndIf
GUISetFont($GUIConstant, 300)
GUICtrlCreateLabel($count+1&"/"&$qCount,$GUIConstant*67,$GUIConstant*7)

Select
Case @GUI_CtrlId=19
Case @GUI_CtrlId=20
Case @GUI_CtrlId=21
Exit
EndSelect

Select
Case @WDAY='1'
$WDAY='Воскресенье'
Case @WDAY='2'
$WDAY='Понедельник'
Case @WDAY='3'
$WDAY='Вторник'
Case @WDAY='4'
$WDAY='Среда'
Case @WDAY='5'
$WDAY='Четверг'
Case @WDAY='6'
$WDAY='Пятница'
Case @WDAY='7'
$WDAY='Суббота'
EndSelect

;какая радио-кнопка отмечена, та и будет правильным ответом, по дефолту это 3
If $r1=1 Then
$p1='(ответ)'
ElseIf $r2=1 Then
$p2='(ответ)'
Else
$p3='(ответ)'
EndIf

FileWriteLine($Questions,$count+1&'.'&$quest&@CRLF&'1. '&$var1&$p1&@CRLF&'2. '&$var2&$p2&@CRLF&'3. '&$var3&$p3&@CRLF)
EndFunc

Func SystemKeys()

Select
Case @GUI_CTRLID = $GUI_EVENT_CLOSE
Exit
Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
Case @GUI_CTRLID = $GUI_EVENT_RESTORE
EndSelect

EndFunc


While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
Здесь пока не все кнопки работают, и данная версия просто сохраняет вопрос с вариантами ответа в файл, планируется что она будет ещё и шифровать вопросы и ответы к ним, и плюс будет связываться с клиентами через интернет и собирать у них результаты тестирования. Я уже проверил, AutoIt, на способность работы в Интернет, остаётся нерешённой только 1 проблема, я не погу подключить к себе более одного клиента одновременно = )




© OSzone.net 2001-2012