Что нового

[Элементы GUI] Как создать меню

wolk88

Новичок
Сообщения
12
Репутация
0
Доброго времени суток.
Проблема в следующем, нужно создать графический интерфейс для установки программ. Своих знаний не хватает. :laugh:
1 окно.
5-9 кнопок. При нажатии выводят на вторую страницу. Первая при этом закрывается. Также должна быть кнопка выход.
вторые страницы все разные. На основном поле от 5 - 20 чекбоксов и 3 кнопки. назад, продолжить, выход. Назад - перекидывает на 1 окно. Продолжить - запускает выбранные функции, выход - закрывает окно.
Заранее большое спасибо за помощь
 

Arei

Скриптер
Сообщения
938
Репутация
115
OffTopic:
Причём тут меню?
Ты сам понял что написал.
Напиши по пунктам хотя бы.
 

sss

Продвинутый
Сообщения
332
Репутация
96
wolk88
Вот есть хорошая программа - http://autoit-script.ru/index.php?topic=273.0
Там можно быстро клепать формы.
По поводу нескольких окон - я делаю так: в Koda создаю основную форму, генерирую, создаю вторую форму, и код второй формы заключаю в функцию (есс-но без инклюдов, их в самое начало.) А потом просто из цикла первой формы вызываю вторую форму. Описал замудрено, поэтому прилагаю пример:
Код:
; тут все инклюды без повторения
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

; тут создаю первую форму из Koda
$Form1 = GUICreate("Form1", 338, 171)
$Label1 = GUICtrlCreateLabel("Первая форма", 8, 8, 79, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 8, 32, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 8, 56, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 8, 80, 97, 17)
$Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 8, 104, 97, 17)
$Checkbox5 = GUICtrlCreateCheckbox("Checkbox5", 128, 32, 97, 17)
$Checkbox6 = GUICtrlCreateCheckbox("Checkbox6", 128, 56, 97, 17)
$Checkbox7 = GUICtrlCreateCheckbox("Checkbox7", 128, 80, 97, 17)
$Checkbox8 = GUICtrlCreateCheckbox("Checkbox8", 128, 104, 97, 17)
$Checkbox9 = GUICtrlCreateCheckbox("Checkbox9", 232, 32, 97, 17)
$Checkbox10 = GUICtrlCreateCheckbox("Checkbox10", 232, 56, 97, 17)
$Checkbox11 = GUICtrlCreateCheckbox("Checkbox11", 232, 80, 97, 17)
$Checkbox12 = GUICtrlCreateCheckbox("Checkbox12", 232, 104, 97, 17)
$button_1_next = GUICtrlCreateButton("Дальше - вторая форма", 8, 136, 147, 25, $WS_GROUP)
$button_1_exit = GUICtrlCreateButton("Выход", 160, 136, 171, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
; тут основной цикл
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $button_1_exit
			Exit
		Case $button_1_next
			GUISetState(@SW_HIDE, $Form1)
			my_SecondForm()
			GUISetState(@SW_SHOW, $Form1)

	EndSwitch
WEnd

; тут вторая форма
Func my_SecondForm()
	$Form2 = GUICreate("Form2", 236, 131)
	$Label1 = GUICtrlCreateLabel("Вторая форма", 8, 8, 77, 17)
	$Radio1 = GUICtrlCreateRadio("Radio1", 8, 32, 113, 17)
	$Radio2 = GUICtrlCreateRadio("Radio2", 8, 48, 113, 17)
	$Radio3 = GUICtrlCreateRadio("Radio3", 8, 64, 113, 17)
	$Radio4 = GUICtrlCreateRadio("Radio4", 8, 80, 113, 17)
	$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 128, 32, 97, 17)
	$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 128, 48, 97, 17)
	$Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 128, 64, 97, 17)
	$Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 128, 80, 97, 17)
	$Button_2_back = GUICtrlCreateButton("Первая форма", 8, 104, 99, 25, $WS_GROUP)
	$Button_2_exit = GUICtrlCreateButton("Выход", 112, 104, 115, 25, $WS_GROUP)
	GUISetState(@SW_SHOW)
; тут цикл второй формы - нажатия на кнопки и т.д.
	While 1
		$2Msg = GUIGetMsg()
		Switch $2Msg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $Button_2_exit
				Exit
			Case $Button_2_back
				GUIDelete($Form2)
				ExitLoop
		EndSwitch
	WEnd
EndFunc   ;==>my_SecondForm
Делаю так чтобы не нагромождать код. Можно конечно и без функции, но так легче для восприятия. А то один раз запутался и всю программу свою испортил - не туда поставил функцию и от злости все удалил )
Код приближен к твоей просьбе, но вплотную не делал - мало времени было.
 
Автор
W

wolk88

Новичок
Сообщения
12
Репутация
0
;D Извиняюсь, если не понятно.

На первом листе от 5 до 9 кнопок. Они перекидывают на лист 2. Лист один при этом закрывается.
На 2 листе, список программ. От 5-20. Выбор через чекбоксы. Программы на листах 2 частично пересекаются.
Далее, идет установка тех программ которые были выбраны чекбоксами на 2 листе.
после завершения установки программ, нужно вывести окно с логом.

Мне нужно просто понять примерный принцип.
Ка я представляю 1 страницу.

Код:
#include <GUIConstants.au3>

Opt("GUIOnEventMode", 1)

$startwindows = GUICreate("Меню 0", 200, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Menu1 = GUICtrlCreateButton ("Menu1",  10, 30, 50)
GUICtrlSetOnEvent(-1, "Menu1Pressed")

$Menu2 = GUICtrlCreateButton ("Menu2",  10, 60, 50)
GUICtrlSetOnEvent(-1, "Menu2Pressed")

$Menu3 = GUICtrlCreateButton ("Menu3",  10, 90, 50)
GUICtrlSetOnEvent(-1, "Menu3Pressed")

$Menu4 = GUICtrlCreateButton ("Menu4",  10, 120, 50)
GUICtrlSetOnEvent(-1, "Menu4Pressed")

$Menu5 = GUICtrlCreateButton ("Menu5",  10, 150, 50)
GUICtrlSetOnEvent(-1, "Menu5Pressed")

;~ GUISwitch($startwindows)
GUISetState(@SW_SHOW)

While 1
  Sleep(1000)  ; Idle around
WEnd

Func CLOSEClicked()
	Exit
EndFunc



Так я представлял второй лист

Код:
Func Menu1Pressed()
	
$menu1massiv = StringSplit( _
		"1|2|3|4|5|6|7|" & _
		"8|9|10|11|" & _
		"12 |13 |14 |т|т|т", "|")
		
Local $aCheckBoxes[$menu1massiv[0] + 1]

GUIDelete($startwindows)
$menu1windows = GUICreate("Меню 1", 200, 500)


$iTop = 30
For $i = 1 To $menu1massiv[0]
	$aCheckBoxes[$i] = GUICtrlCreateCheckbox($menu1massiv[$i], 10, $iTop, 190, 20, -1)
	GUICtrlSetState(-1, $GUI_CHECKED)
	$iTop += 20
Next

$Otmena = GUICtrlCreateButton ("Отмена",  110, 400, 50)
GUICtrlSetOnEvent(-1, "CLOSEClicked")

$Go = GUICtrlCreateButton ("Далее",  10, 400, 50)
GUICtrlSetOnEvent(-1, "GUI_Event")

GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUISwitch($menu1windows)
GUISetState(@SW_SHOW)
EndFunc

;~ Func
;~ 	Switch @GUI_CtrlId
;~ For $i = 1 To $menu1massiv[0]
;~ 	If GUICtrlRead($aCheckBoxes[$i]) = 1 Then _Install($i)
;~ 	Next	
;~ 	EndSwitch
;~ EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Если я правильно понял, то нужно что то типа Wizard'а (мастера):

Код:
#include <GuiConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Main_GUI = GUICreate("Wizard Demo!", 400, 300)
$Img_Path = @SystemDir & "\oobe\images\wpakey.jpg" ;@SystemDir & "\Setup.bmp"
$iStep = 1

Global $Main_Ctrls[10][4] = _
		[ _
		[_GUICtrlCreateSeperator(0, 2, 265, 3, 396), 0, 0, 0], _
		[GUICtrlCreateButton("<<Back", 170, 270, 60), $GUI_DISABLE, $GUI_ENABLE, $GUI_ENABLE], _
		[GUICtrlCreateButton("Next>>", 240, 270, 60), $GUI_ENABLE, $GUI_ENABLE, $GUI_DISABLE], _
		[GUICtrlCreateButton("Exit", 325, 270, 60), 0, 0, 0], _
		[GUICtrlCreatePic($Img_Path, 2, 2, 160, 263, _
			$SS_SUNKEN, $WS_EX_STATICEDGE + $WS_EX_CLIENTEDGE), $GUI_SHOW, $GUI_HIDE, $GUI_HIDE], _
		[GUICtrlCreateLabel("Wellcome!", 240, 20, 150), $GUI_SHOW, $GUI_HIDE, $GUI_HIDE], _
		[GUICtrlCreateInput("Some input", 10, 20, 180, 20), $GUI_HIDE, $GUI_SHOW, $GUI_HIDE], _
		[GUICtrlCreateCheckbox("Some checkbox", 10, 50), $GUI_HIDE, $GUI_SHOW, $GUI_HIDE], _
		[GUICtrlCreateEdit("Some Edit", 10, 20, 180, 220), $GUI_HIDE, $GUI_HIDE, $GUI_SHOW], _
		[GUICtrlCreateLabel("Some Label", 220, 20), $GUI_HIDE, $GUI_HIDE, $GUI_SHOW] _
		]

GUICtrlSetFont($Main_Ctrls[5][0], 12, 800)
_Elements_SetState($iStep)

GUISetState(@SW_SHOW, $Main_GUI)

While 1
	$Msg = GUIGetMsg()
	
	Switch $Msg
		Case $Main_Ctrls[3][0], $GUI_EVENT_CLOSE
			$Ask = MsgBox(256 + 52, "Attention", "Are you sure you want to exit the Wizard now?", 0, $Main_GUI)
			If $Ask <> 6 Then ContinueLoop
			Exit
		Case $Main_Ctrls[2][0]
			$iStep += 1
			_Elements_SetState($iStep)
		Case $Main_Ctrls[1][0]
			$iStep -= 1
			_Elements_SetState($iStep)
	EndSwitch
WEnd

Func _GUICtrlCreateSeperator($Direction, $Left, $Top, $Width = 3, $Lenght = 25)
	If $Direction Then Return GUICtrlCreateLabel("", $Left, $Top, $Width, $Lenght, $SS_SUNKEN)
	Return GUICtrlCreateLabel("", $Left, $Top, $Lenght, $Width, $SS_SUNKEN)
EndFunc   ;==>_GUICtrlCreateSeperator

Func _Elements_SetState($iStep)
	For $i = 1 To UBound($Main_Ctrls) - 1
		_GUICtrlSetState($Main_Ctrls[$i][0], $Main_Ctrls[$i][$iStep])
	Next
EndFunc   ;==>_Elements_SetState

Func _GUICtrlSetState($iCtrlID, $iState)
	If BitAND(GUICtrlGetState($iCtrlID), $iState) <> $iState Then
		GUICtrlSetState($iCtrlID, $iState)
	EndIf
EndFunc   ;==>_GUICtrlSetState
 
Верх