[решено] Как сделать для каждого поля свой идентификатор

Ответить
Аватара пользователя
McLotos

[решено] Как сделать для каждого поля свой идентификатор

Сообщение McLotos »

Добрый день. Вот возникла идейка написать программу для тестирования знаний сотрудников = )

Вот написал оболочку, она состоит из формы, там несколько полей ввода, радиокнопки, поля с датами. Подскажите как сделать чтобы после нажатия кнопки всё что записано в полях сохранялось в файл, а если нажать другую кнопку, то поля очищались

Как сделать для каждого поля свой идентификатор, чтобы патом можно было понять с какого поля пришла инфа?
Аватара пользователя
Creat0R

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

Сообщение Creat0R »

Предупреждение за нарушение правил форума,
пункт 2.7
и
пункт 3.19
:




Цитата:



2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...

Подробнее о принципах создания тем читайте в
этом документе
и Правилах форумов.



3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме,
измените ее заголовок на осмысленный
и напишите об этом в теме.



Переименуйте пожалуйста тему (
Как переименовать свою тему?
).
Аватара пользователя
McLotos

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

Сообщение McLotos »

Creat0R, постоянно ты ко мне придираешься по этому поводу Изображение

А что, никто не знает?
Аватара пользователя
ferget

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

Сообщение ferget »

А в чем собственно проблема?



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

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

Сообщение Creat0R »

Цитата McLotos:



постоянно ты ко мне придираешься по этому поводу
[решено] Как сделать для каждого поля свой идентификатор




Видимо есть причина Изображение .
Аватара пользователя
McLotos

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

Сообщение McLotos »

ferget, просто я не любитель использовать уже готовый код, иногда проще написать с нуля, так лучше понимается код. = )

Тем более что в первом проекте всё оказалось намного проще, вовсе не обязательно было создавать кучу функций, обошлись комбинацией (один массив+один селект+одна функция) = )

И кстати, наш вариант работает даже в тех случаях если изменилось разрешение экрана, или например заменили монитор, т.е. расставляет ориентируясь по новым параметрам, а не по старой сетке = )

А в этом проекте использовать ту же логику не получится - специфика другая, и я тут подумал что файл это скорее временный вариант, скорее всего тест.админ будет просто отправлять вопросы и варианты ответов всем тест.клиентам по сети, а после ответов собирать с них данные.

Кстати вот что получилось!



Код:

Код: Выделить всё

#include 
#include 
#include 
#include 
#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 проблема, я не погу подключить к себе более одного клиента одновременно = )
Ответить

Вернуться в «AutoIt»