Что нового

Вычитка всего содержимого из ListBox.

pomaho

Новичок
Сообщения
3
Репутация
0
Доброе время суток!
У меня имеется некое количество тестов, запуск который необходимо реализовать через систему GUI созданную на AutoIt. Тесты тоже написаны на AutoIt.
Я начал реализовывать следующим образом:
Создал GUI - Далее создал 2 ListBoxa - в 1 ListBoxe идет перечисление имеющихся тестов, во 2-ом имеем выбранные тесты путем нажатия на кнопку Add.
После того как будет готов список выбранных тестов мы нажимаем RunTests после чего должны быть запущены тесты.
Вопрос:
Возможно ли сделать ListBox - Multiple?
Как мне вычитать полный список значений второго списка в массив или хотя бы в строчку?
И может кто-нибудь посоветует как правильно это реализовать.
Вот код и скрины:

Код:
#include <GUIConstantsEx.au3>
$DATAFILE = @ScriptDir & "\file.txt"
MyWin()
Func MyWin()
	Local $MESSAGE = "The following buttons have been clicked"
	Local $add, $clear, $mylist, $runTests, $msg, $mylist1, $list, $item
	Global $TEXT

	GUICreate("My GUI list", 800, 600)
	GUICtrlCreateLabel("Имеющиеся тесты", 30, 30, 170)
	$mylist = GUICtrlCreateList('', 30, 50, 280, 480)
	fLOAD($mylist)
	GUICtrlSetLimit(-1, 200)
	$add = GUICtrlCreateButton("Add", 318, 50, 75, 25)
	$clear = GUICtrlCreateButton("Clear", 318, 90, 75, 25)
	$mylist1 = GUICtrlCreateList("", 400, 50, 280, 480)
	GUICtrlSetLimit(-1, 200)
	$runTests = GUICtrlCreateButton("Run Tests", 318, 200, 75, 25)
	GUISetState()
	$msg = 0
	While $msg <> $GUI_EVENT_CLOSE
		$msg = GUIGetMsg()

		Select
			Case $msg = $add
				GUICtrlSetData($mylist1, GUICtrlRead($mylist))
			Case $msg = $clear
				GUICtrlSetData($mylist1, "")
			Case $msg = $runTests
				MsgBox(0, "", "the closing button has been clicked", 2)
				Exit
		EndSelect
	WEnd
EndFunc   ;==>Example

Func fLOAD($LISTik)
	$FILE = FileOpen($DATAFILE, 0)
	$TEXT = FileRead($FILE)
	FileClose($FILE)
	$TEXT = "|" & StringReplace($TEXT, @CRLF, "|")
	GUICtrlSetData($LISTik, $TEXT)
EndFunc   ;==>fLOAD


<img src="http://img28.imageshack.us/img28/1608/mytest.jpg">
За ранее спасибо!
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
pomaho
Я бы список тестов поместил не в ListBox, а в TreeView:

Код:
$TESTLIST=GuiCtrlCreateTreeView(0,0,100,200,0x00000100)
 
Автор
P

pomaho

Новичок
Сообщения
3
Репутация
0
Спасибо!
А каким образом мне выбрать тесты в список для тестирования из дерева?
Или есть возможность вычитки элементов дерева в ListBox?
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
pomaho
Считывание флага "включен-выключен":

Код:
$TESTLIST=GuiCtrlCreateTreeView(0,0,100,200,0x00000100)
 $TEST01=GuiCtrlCreateTreeViewItem("TEST01",$TESTLIST)

 if BitAND(GUICtrlRead($TEST01),1)=1 then
  MsgBox(0,"","Первый тест включен")
 endif
 
Автор
P

pomaho

Новичок
Сообщения
3
Репутация
0
snoitaleR [?]
Считывание флага "включен-выключен"

Вот вопрос:
Как мне сделать так чтобы после выделения необходимых элементов в дереве сформировался массив выбранных значений дерева?
а то я вроде дерево со списком из файла вроде создал выделяю а как вычитать выбранные значения в массив не могу никак допетрить.
Помогите плиз.
Вот примерный код заполнения дерева из файла:

Код:
$DATAFILE = @ScriptDir & "\file.txt"

GUICreate("My GUI list", 800, 600)
$TESTLIST = GUICtrlCreateTreeView(30, 50, 280, 480, 0x00000100)
$TEST01 = GUICtrlCreateTreeViewItem("TEST01", $TESTLIST)
fLOAD($TESTLIST)
$msg = GUIGetMsg()
While $msg <> $GUI_EVENT_CLOSE
	$msg = GUIGetMsg()
WEnd
Func fLOAD($LISTik)
	$file = FileOpen($DATAFILE, 0)
	If $file = -1 Then
		MsgBox(0, "Error", "Unable to open file.")
		Exit
	EndIf
	$line = "test"
	While ($line <> "")
		$line = FileReadLine($file)
		If $line = "" Then ExitLoop
		GUICtrlCreateTreeViewItem($line, $LISTik)
	Wend
	FileClose($FILE)
EndFunc   ;==>fLOAD


Спасибо.
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
pomaho
Массив я не построил, но создал функцию, которая в цикле окно сообщения выводит...
Думаю, до массива рукой подать... :smile:

Код:
; НАЧАЛО

 Global $mA ; Максимальное количество пунктов

$DATAFILE  = @ScriptDir & "\file.txt"

GUICreate("My GUI list", 800, 500)
$TESTLIST = GUICtrlCreateTreeView(30, 50, 280, 400, 0x00000100)
$CHECKBUTTON=GUICtrlCreateButton("Проверить",350,50,100,25)

fLOAD($TESTLIST)

GUISetState()

 While True

  Switch GUIGetMsg()
   Case -3
    ExitLoop
   Case $CHECKBUTTON
    CHECKLIST($TESTLIST)
  EndSwitch

 wend

Func fLOAD($LISTik)
    $file = FileOpen($DATAFILE, 0)
    If $file = -1 Then
        MsgBox(0, "Error", "Unable to open file.")
        Exit
    EndIf
    $line = "test"
    $iA=0
    While ($line <> "")
        $line = FileReadLine($file)
        If $line = "" Then ExitLoop
        $iA+=1 ; счетчик элементов
        Assign("TEST"&StringFormat("%02d",$iA),GUICtrlCreateTreeViewItem($line, $LISTik),2)
    Wend
    $mA=$iA
    FileClose($FILE)
EndFunc   ;==>fLOAD

Func CHECKLIST($LISTik)

 For $iA=1 To $mA

  if BitAND(GUICtrlRead(Eval("TEST"&StringFormat("%02d",$iA))),1)=1 then
   MsgBox(0,"",$iA&" тест включен")
  Else
   MsgBox(0,"",$iA&" тест выключен")
  endif

 Next

EndFunc

; КОНЕЦ

Код не стал оптимизировать, думаю, что рано, так как идея до конца не раскрыта...
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
snoitaleR
Лично я создавал бы массив еще во время выбора тестов.
Код:
;примерно так
GUICtrlSetData($mylist1, "Выбранные тесты:")
;...
Case $msg = $add
$array[$k]=GUICtrlRead($mylist)
GUICtrlSetData($mylist1, GUICtrlRead($mylist1)&@CRLF&$array[$k])
$k+=1
;Ну и очистка соответственно так
Case $msg = $clear
GUICtrlSetData($mylist1, "Выбранные тесты:")
For $i=$k To 0 Step -1
_ArrayDelete($array,$i)
Next
$k=0
 
Верх