Что нового

скрытие большого количества Gui элементов

bjack

Новичок
Сообщения
3
Репутация
0
Здравствуйте )
Подскажите как сделать такое:
Имеется форма на которой есть три радиокнопки ( GUICtrlCreateRadio). Форма должна менять свое содержание в зависимости от выбранной. Хочется создать три каких-то "панели" которые я буду подкладывать в зависимости от выбранной радиокнопки.
Тупой перебор (GUICtrlCreate - GUICtrlDelete) не нравится - на одной из панелей у меня таб на 5 вкладок, и на каждой вкладке по 44 кнопки (даже не спрашивайте зачем :biggrin:). Для двух оставшихся панелей он в целом подходит, на них порядка 5 GUI элементов. Городить дочернюю форму - тоже не вариант, все это уже на дочерней форме)))
 

joiner

Модератор
Локальный модератор
Сообщения
3 362
Репутация
586
либо скрытие(не удаление), либо дочерняя форма. либо
Код:
GUICtrlCreateTab
 
Автор
B

bjack

Новичок
Сообщения
3
Репутация
0
либо скрытие(не удаление), либо дочерняя форма. либо
Код:
GUICtrlCreateTab
Спасибо за оперативность)
Похоже надо добавить жизнеописания)))

Задача в общем банальная:
Есть специфическое оборудование управляемое с компа. Есть его родная софтинка, в которую надо периодически тыкать мышкой.
Делаю обычный планировщик - список задач, со временем начала и 2 кнопки "новая задача" и "удалить задачу". Задач принципиально 3 варианта:
1. погасить все (тут нам только время указать, ну и название можно, чтобы в списке красиво было)
2. запустить кратковременную программу (в нужное время выбрать файл лежащий в определенной папке)
3. "выборочное включение" .... в родной программе это место реализовано как 5 вкладок, на каждой из которых по 44 кнопки. Соответственно нужно картину воссоздать(время, название и набор нажатых кнопок)
Вот и получается такой алгоритм:
В главном окне планировщика жмем "добавить задачу", открывается дочерняя форма с 3 радиокнопками по типу задач + 2 поля ввода "время" и "название" + 2 кнопки "Ok" и "Cancel"... И самое интересное: серединка, которую, из-за третьего типа задач, хотелось группой менять.
Для создания групп испробованы
Код:
GUICtrlCreateGroup  и  GUIStartGroup
но они для радиокнопок и результата не дали.
Скрытие/отображение конечно лучше создания/удаления, но это все равно лопатить 220+ элементов (третий тип задачи, будь он не ладен)
Код:
GUICtrlCreateTab
При попытке положить на форму второй таб ISN AutoIt Studio меня пожурил (дословно не помню, но вроде можно только один. А по условию поставленной задачи (третий тип задачи, будь он снова не ладен), мне таб нужен чуть глубже. Дочерняя форма от дочерней формы - тоже не айс))

P.S.
Проверил второй
Код:
GUICtrlCreateTab
воткнуть можно, но он "прилипает" к первому - продолжает его
В общем хотелось красоты в реализации, но видимо не судьба(
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3 362
Репутация
586
как совет - пиши в обычном редакторе
скрытие довольно быстро работает
пример.

Код:
#include <GUIConstantsEx.au3>
#include <Array.au3>

$Form1 = GUICreate("Form1", 500, @DesktopHeight - 80, -1, -1)
$Radio1 = GUICtrlCreateRadio("Radio1", 24, 16, 113, 17)
$Radio2 = GUICtrlCreateRadio("Radio2", 24, 48, 113, 17)
Local $id
Local $aF[0]
Local $aF1[0]
Local $top
For $i = 1 To 300
    $id = GUICtrlCreateCheckbox($i, 150, $top, 50, 20)
    GUICtrlSetState(-1, $GUI_HIDE)
    _ArrayAdd($aF, $id)
    $top += 20
Next
$top = 0
For $i = 300 To 600
    $id = GUICtrlCreateCheckbox($i, 150, $top, 50, 20)
    GUICtrlSetState(-1, $GUI_HIDE)
    _ArrayAdd($aF1, $id)
    $top += 20
Next
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case -3
            Exit
        Case $Radio1
            If UBound($aF1) Then
                For $i = 0 To UBound($aF1) - 1
                    GUICtrlSetState($aF1[$i], $GUI_HIDE)
                Next
            EndIf
            If UBound($aF) Then
                For $i = 0 To UBound($aF) - 1
                    GUICtrlSetState($aF[$i], $GUI_SHOW)
                Next
            EndIf
        Case $Radio2
            If UBound($aF) Then
                For $i = 0 To UBound($aF) - 1
                    GUICtrlSetState($aF[$i], $GUI_HIDE)
                Next
            EndIf
            If UBound($aF1) Then
                For $i = 0 To UBound($aF1) - 1
                    GUICtrlSetState($aF1[$i], $GUI_SHOW)
                Next
            EndIf
        Case Else
            If $nMsg > 0 Then ConsoleWrite(GUICtrlRead($nMsg,1) & @LF)
    EndSwitch
WEnd
чтобы выглядело красиво нужно много написать)
еще как вариант. делать дочерние окна внутри родительского окна. там будет проще - скрыть все окно с элементами. визуально выглядит вполне). при очень большом количестве элементов я бы выбрал этот вариант
 
Последнее редактирование:
Автор
B

bjack

Новичок
Сообщения
3
Репутация
0
Верх