Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Отловить нажатие по плюсику

Ответить
Настройки темы
[решено] Отловить нажатие по плюсику

Аватара для morgan1991

Старожил


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

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


Здравствуйте!
Вот пример из справки:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
    Local $treeview, $generalitem, $displayitem, $aboutitem, $compitem
    Local $useritem, $resitem, $otheritem, $startlabel, $aboutlabel, $compinfo
    Local $togglebutton, $infobutton, $statebutton, $cancelbutton
    Local $msg, $item, $hItem, $text

    GUICreate("My GUI with treeview", 350, 215)

    $treeview = GUICtrlCreateTreeView(6, 6, 100, 150, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
    $generalitem = GUICtrlCreateTreeViewItem("General", $treeview)
    GUICtrlSetColor(-1, 0x0000C0)
    $displayitem = GUICtrlCreateTreeViewItem("Display", $treeview)
    GUICtrlSetColor(-1, 0x0000C0)
    $aboutitem = GUICtrlCreateTreeViewItem("About", $generalitem)
    $compitem = GUICtrlCreateTreeViewItem("Computer", $generalitem)
    $useritem = GUICtrlCreateTreeViewItem("User", $generalitem)
    $resitem = GUICtrlCreateTreeViewItem("Resolution", $displayitem)
    $otheritem = GUICtrlCreateTreeViewItem("Other", $displayitem)

    $startlabel = GUICtrlCreateLabel("TreeView Demo", 190, 90, 100, 20)
    $aboutlabel = GUICtrlCreateLabel("This little scripts demonstates the using of a treeview-control.", 190, 70, 100, 60)
    GUICtrlSetState(-1, $GUI_HIDE)  ; Hides the "aboutlabel"-text during initialization
    $compinfo = GUICtrlCreateLabel("Name:" & @TAB & @ComputerName & @LF & "OS:" & @TAB & @OSVersion & @LF & "SP:" & @TAB & @OSServicePack, 120, 30, 200, 80)
    GUICtrlSetState(-1, $GUI_HIDE)  ; Hides the "compinfo"-text during initialization

    GUICtrlCreateLabel("", 0, 170, 350, 2, $SS_SUNKEN)
    $togglebutton = GUICtrlCreateButton("&Toggle", 35, 185, 70, 20)
    $infobutton = GUICtrlCreateButton("&Info", 105, 185, 70, 20)
    $statebutton = GUICtrlCreateButton("Col./Exp.", 175, 185, 70, 20)
    $cancelbutton = GUICtrlCreateButton("&Cancel", 245, 185, 70, 20)

    GUICtrlSetState($generalitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON))    ; Expand the "General"-item and paint in bold
    GUICtrlSetState($displayitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON))    ; Expand the "Display"-item and paint in bold

    GUISetState()
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $cancelbutton Or $msg = $GUI_EVENT_CLOSE
                ExitLoop

            Case $msg = $togglebutton   ; Toggle the bold painting
                If BitAND(GUICtrlRead($generalitem), $GUI_DEFBUTTON) Then
                    GUICtrlSetState($generalitem, 0)
                    GUICtrlSetState($displayitem, 0)
                Else
                    GUICtrlSetState($generalitem, $GUI_DEFBUTTON)
                    GUICtrlSetState($displayitem, $GUI_DEFBUTTON)
                EndIf

            Case $msg = $infobutton
                $item = GUICtrlRead($treeview)      ; Get the controlID of the current selected treeview item
                If $item = 0 Then
                    MsgBox(64, "TreeView Demo", "No item currently selected")
                Else
                    $text = GUICtrlRead($item, 1) ; Get the text of the treeview item
                    If $text == "" Then
                        MsgBox(16, "Error", "Error while retrieving infos about item")
                    Else
                        MsgBox(64, "TreeView Demo", "Current item selected is: " & $text)  ; $advmsg[0] contains the text and $advmsg[1] the state value of the treeview item
                    EndIf
                EndIf

            Case $msg = $statebutton
                $item = GUICtrlRead($treeview)
                If $item > 0 Then
                    $hItem = GUICtrlGetHandle($item)
                    GUICtrlSendMsg($treeview, $TVM_EXPAND, $TVE_TOGGLE, $hItem)
                EndIf

                ; The following items will hide the other labels (1st and 2nd parameter) and then show the 'own' labels (3rd and 4th parameter)
            Case $msg = $generalitem
                GUIChangeItems($aboutlabel, $compinfo, $startlabel, $startlabel)

            Case $msg = $aboutitem
                GUICtrlSetState($compinfo, $GUI_HIDE)
                GUIChangeItems($startlabel, $startlabel, $aboutlabel, $aboutlabel)

            Case $msg = $compitem
                GUIChangeItems($startlabel, $aboutlabel, $compinfo, $compinfo)
        EndSelect
    WEnd

    GUIDelete()
EndFunc   ;==>Example

Func GUIChangeItems($hidestart, $hideend, $showstart, $showend)
    Local $idx

    For $idx = $hidestart To $hideend
        GUICtrlSetState($idx, $GUI_HIDE)
    Next
    For $idx = $showstart To $showend
        GUICtrlSetState($idx, $GUI_SHOW)
    Next
EndFunc   ;==>GUIChangeItems
Скажите пожалуйста как отловить нажатие по плюсику и считать имя и controlID нажатого элемента?
Т.е. мне нужно анпример изначально есть два елемента свёрнутых, пользователь нажимает на плюсик по имени этого элемента из определённого файла считываются разделы и добавляются в этот элемент.

-------
Хочу научиться писать драйвера на с++


Отправлено: 13:24, 26-06-2009

 

Аватара для FlatX007

Ветеран


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

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


Цитата morgan1991:
считать имя и controlID нажатого элемента »
- controlID элемента возвращает строка вида
Код: Выделить весь код
 $aboutitem = GUICtrlCreateTreeViewItem("About", $generalitem)
Переменная $aboutitem содержит controlID элемента

Цитата morgan1991:
Т.е. мне нужно анпример изначально есть два елемента свёрнутых, пользователь нажимает на плюсик по имени этого элемента из определённого файла считываются разделы и добавляются в этот элемент. »
Сначало считать из определённого файла разделы, создать список элементов , а потом уже "отрисовать" GUI окно ... мммм ??? Зачем пользователю открывать плюсики - то ... непонятно

Отправлено: 07:09, 27-06-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для SyDr

Старожил


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

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


GUICtrlRead ( controlID [, advanced] )
TreeView Control identifier (controlID) of the selected TreeViewItem
TreeViewItem State of the TreeViewItem

For Treeview items several states can be returned as $GUI_FOCUS, $GUI_EXPAND and $GUI_CHECKED, $GUI_UNCHECKED (only for treeview controls with TVS_CHECKBOXES-style . So use i.e. BitAnd(GUICtrlRead($Item),$GUI_CHECKED) to test if the item is checked.

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 10:27, 27-06-2009 | #3


Аватара для morgan1991

Старожил


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

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


Цитата Sylver Dragon:
GUICtrlRead ( controlID [, advanced] ) »
Не поможет, т.к. при нажатии на плюсик разде не выделяется
Цитата FlatX007:
$aboutitem = GUICtrlCreateTreeViewItem("About", $generalitem) »
Код: Выделить весь код
$aboutitem = GUICtrlCreateTreeViewItem(GUICtrlRead($ListMenu), $generalitem)
Цитата FlatX007:
Сначало считать из определённого файла разделы, создать список элементов , а потом уже "отрисовать" GUI окно ... »
Не... Это не возможно так как на это уйдёт примерно минут 15. А так пользователь раскрыл плюсик, а там всё что нужно появилось...

-------
Хочу научиться писать драйвера на с++


Отправлено: 13:07, 27-06-2009 | #4


Аватара для SyDr

Старожил


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

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


Повторяю ещё раз:
GUICtrlRead (controlID) - advanced не нужен.
controlID - элемент с плюсиком.

Добавьте в код, в цикл обработки GUI:
If $msg<> $GUI_EVENT_MOUSEMOVE and $msg<> $GUI_EVENT_PRIMARYDOWN Then
MsgBox(4096, "", GUICtrlRead($generalitem))
EndIf

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 14:30, 27-06-2009 | #5


Аватара для morgan1991

Старожил


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

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


А если плюсиков много? И я не знаю
Цитата Sylver Dragon:
controlID - элемент с плюсиком. »

-------
Хочу научиться писать драйвера на с++


Отправлено: 23:03, 29-06-2009 | #6


Аватара для SyDr

Старожил


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

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


Знаешь ты controlID
При создании TreeViewItem ты получаешь его ID
Плюсик относится к элементу который с ним.
Пример:
$generalitem
GUICtrlRead ($generalitem) возвращает мне 1792 когда выделен и равёрнут.
1536 когда развёрнут, но не выделен.
512 когда не развёрнут и не выделен.
768 когда не развёрнут, но выделен.
GUICtrlRead ($treeview) позволяет узнать ID выделенного элемента.

Понял фишку. Ты можешь хранить массив состояний элементов с плюсиками.
При каком-нибудь событии ты проверяешь, изменилось ли состояние какого-нибудь плюсика и если изменилось как надо. - обновляешь список элментов.

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:54, 30-06-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Отловить нажатие по плюсику

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Отловить форму в IE Lodoss AutoIt 3 26-11-2009 11:12
[решено] Отловить visible text Frost_Imp AutoIt 7 25-09-2009 12:55
[решено] Отследить нажатие кнопки w3d1 AutoIt 11 03-09-2009 14:24
[решено]Нажатие кнопки-картинки в IE ikif AutoIt 10 13-07-2009 22:06
[решено] отловить двойной клик по GuiCtrlCreateList morgan1991 AutoIt 11 29-04-2009 01:44




 
Переход