Что нового

[Элементы GUI] Не обрабатывается _GUICtrlListBox_Create

Pavel

Новичок
Сообщения
125
Репутация
3
Здравствуйте.
Существует два окна:
Код:
$GUImain

и
Код:
$GUIConfig = GuiCreate('Конфигурация', 460, 570, -1 + 300, -1 - 20, $LVS_REPORT, $WS_EX_MDICHILD, [b]$GUImain[/b])

Во втором окне существует список
Код:
$nListServers = _GUICtrlListBox_Create($GUIConfig, "", 25, 30, 200, 135)

Однако при клике по списку цикл
Код:
While 1
$msg = GUIGetMsg(1)
Select
Case $msg[0] = $nListServers
MsgBox(0,0, 'debug')
EndSelect
WEnd

его не обрабатывает.
Что не так?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Pavel
Потому что функции UDF возвращают дескриптор, а не идентификатор.
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Жажду продолжения светлой мысли :whistle:
(вопрос ставился "Что не так?", а не "Почему?" ;) )
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Развивая мысль.
GUIGetMsg
$array[2] = The control handle the event is from (if applicable)
Переводя на русский. Возвращает дескриптор контрола на которое было произведено действие.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А ну в принципе все правильно. Оно и не должно работать. Все действия с созданными таким образом элементами производится через WM_COMMAND

Смотреть пример в справке. Собственно у меня к Вам вопрос. А зачем Вам так создавать ListBox в принципе эти ф-ии созданы для отображения динамических элементов =)
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
В списке будут добавляться/изменяться/удаляться адреса серверов/логинов/паролей с сохранением/удалением из sqlite базы.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Создайте обычный ListBox. А управляйте расширенными функциями. В чем проблема?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Pavel
Пример из справки

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

Opt('MustDeclareVars', 1)

Example()

Func Example()
    Local $MESSAGE = "Следующие кнопки были нажаты"
    Local $add, $clear, $mylist, $close, $msg, $index, $read, $setsel, $count, $select, $find_string, $del_item, $insert, $color, $tmp
    
    GUICreate("GUI с элементом списка - list") ; Создаёт окно в центре экрана

    $read = GUICtrlCreateButton("Текст пункта", 40, 30, 121, 25)
    $index = GUICtrlCreateButton("Индекс выделенного", 40, 60, 121, 25)
    $setsel = GUICtrlCreateButton("Выделить пункт 4", 40, 90, 121, 25)
    $select = GUICtrlCreateButton("Выделить Пункт1", 40, 120, 121, 25)
    $find_string = GUICtrlCreateButton("Найти строку Пункт 3", 40, 150, 121, 25)
    $del_item = GUICtrlCreateButton("Удалить строку 3", 40, 180, 121, 25)
    $count = GUICtrlCreateButton("Количество пунктов", 40, 210, 121, 25)
    $add = GUICtrlCreateButton("Добавить пункт", 40, 240, 121, 25)
    $insert = GUICtrlCreateButton("Вставить в позицию", 40, 270, 121, 25)
    $color = GUICtrlCreateButton("Изменить цвет", 40, 300, 121, 25)
    $clear = GUICtrlCreateButton("Очистить список", 40, 330, 121, 25)


    $mylist = GUICtrlCreateList("Отсчёт пунктов с 0", 180, 30, 190, 100, $GUI_SS_DEFAULT_LIST+$LBS_NOINTEGRALHEIGHT)
    ; стиль LBS_NOINTEGRALHEIGHT предотвращает изменение высоты кратно высоте пункта
    ; чтобы отключить сортировку в списке ипользуйте стиль $WS_BORDER+$WS_VSCROLL+$LBS_NOINTEGRALHEIGHT
    GUICtrlSetLimit(-1, 200) ; ограничить прокрутку по горизонтали
    GUICtrlSetData(-1, $MESSAGE)
    GUICtrlSetData(-1, 'Пункт 1|Пункт 2|Пункт 3|Текст', 'Пункт 2')
    $close = GUICtrlCreateButton("моя кнопка выхода", 180, 140, 190, 25)

    GUISetState()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()

        Select
            Case $msg = $add
                GUICtrlSetData($mylist, "Нажата кнопка ""Добавить""|")
            Case $msg = $clear
                GUICtrlSetData($mylist, "")
            Case $msg = $index
                $tmp=GUICtrlSendMsg($mylist, $LB_GETCURSEL, 0, 0)
                MsgBox(0, 'Текст выделенного пункта', $tmp)
            Case $msg = $read
                $tmp=GUICtrlRead($mylist)
                MsgBox(0, 'Текст выделенного пункта в списке', $tmp)
            Case $msg = $setsel
                GUICtrlSendMsg($mylist, $LB_SETCURSEL, 4, 0)
            Case $msg = $count
                $tmp=GUICtrlSendMsg($mylist, $LB_GETCOUNT, 0, 0)
                MsgBox(0, 'Количество пунктов в списке', $tmp)
            Case $msg = $select
                GUICtrlSendMsg($mylist, $LB_SELECTSTRING, 0, 'Пункт 1')
            Case $msg = $find_string
                $tmp=GUICtrlSendMsg($mylist, $LB_FINDSTRINGEXACT, 0, 'Пункт 3')
                MsgBox(0, 'Найдена точная строка в списке - Пункт 3', 'Индекс = '&$tmp)
            Case $msg = $del_item
                $tmp=GUICtrlSendMsg($mylist, $LB_DELETESTRING, 3, 0)
            Case $msg = $insert
                GUICtrlSendMsg($mylist, $LB_INSERTSTRING, 3, 'Вставлен в позицию 3')
            Case $msg = $color
                GUICtrlSetBkColor($mylist, 0xCCCC99)
            Case $msg = $close
                MsgBox(0, "", "Нажата кнопка закрытия", 2)
                Exit
        EndSelect
    WEnd
EndFunc
 
Верх