Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


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

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 06:50, 02-05-2012 | #6