Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как сделать для каждого поля свой идентификатор (http://forum.oszone.net/showthread.php?t=233675)

McLotos 28-04-2012 16:38 1907364

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

Creat0R 28-04-2012 17:30 1907386

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

Цитата:

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

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

McLotos 30-04-2012 08:54 1908119

Creat0R, постоянно ты ко мне придираешься по этому поводу =)
А что, никто не знает?

ferget 30-04-2012 12:17 1908208

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

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

Creat0R 30-04-2012 14:55 1908265

Цитата:

Цитата McLotos
постоянно ты ко мне придираешься по этому поводу »

Видимо есть причина ;) .

McLotos 02-05-2012 06:50 1909040

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


Время: 08:04.

Время: 08:04.
© OSzone.net 2001-