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

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

Ответить
Настройки темы
[решено] Как узнать изменено ли значение checkbox

Пользователь


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

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


Как узнать менялось ли значение checkbox у строки из ListView, это не помогает - "If BitAND(GUICtrlRead($iCtrlID), $GUI_CHECKED) Then ..."

Отправлено: 11:32, 20-10-2009

 

Аватара для FlatX007

Ветеран


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

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


Может я не правильно понял

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

Dim $sIndex[2] = ["Checkbox1", "Checkbox2"]

$nForm = GUICreate("", 196, 92)
$Checkbox1 = GUICtrlCreateCheckbox($sIndex[0], 8, 8, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox($sIndex[1], 8, 32, 97, 17)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

GUISetState(@SW_SHOW)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_COMMAND($hWndGUI, $MsgID, $WParam, $LParam)
    Local $iIDFrom = BitAND($wParam, 0xFFFF)
    Local $iCode = BitShift($wParam, 16)
    Dim $aRead[2] = [GUICtrlRead($iIDFrom), GUICtrlRead($iIDFrom, 1)]

    For $i = 0 To UBound($sIndex) - 1
        If $aRead[1] = $sIndex[$i] Then
            MsgBox(0, Default, "Изменено значение чекбокса - " & $aRead[1])
            ExitLoop
        EndIf
    Next
    Return $GUI_RUNDEFMSG
EndFunc

Отправлено: 12:04, 20-10-2009 | #2



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

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


Аватара для Creat0R

Must AutoIt


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

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


Цитата FlatX007:
Может я не правильно понял »
Неа Автор же пишет про checkbox в ListView. И в случае с твоим примером не нужен WM_COMMAND, оно проверяется в цикле обычно.

Цитата malev:
Как узнать менялось ли значение checkbox у строки из ListView »
Я как то тоже был озадачен этим вопросом, вот пример:

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

$hGUI = GUICreate("ListView Item Сhecked")

$hListView = GUICtrlCreateListView("Column 1|Column 2", 10, 10, 380, 360, -1, $LVS_EX_CHECKBOXES + $WS_EX_DLGMODALFRAME)

_GUICtrlListView_RegisterSortCallBack($hListView)

For $i = 1 To 10
    GUICtrlCreateListViewItem("Item " & $i & "|SubItem " & $i, $hListView)
Next

$Status_Label = GUICtrlCreateLabel("", 10, 385, 380, 15, $SS_SUNKEN)

GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func ItemChecked_Proc($iItem, $bState, $iID)
    GUICtrlSetData($Status_Label, "<" & $iItem & "> is checked = " & $bState & ", CtrlID = " & $iID)
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $LVN_COLUMNCLICK ; A column was clicked
                    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)

                    ; Kick off the sort callback
                    _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem"))
                Case $NM_CLICK, $NM_DBLCLK, $NM_RCLICK
                    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                    Local $iIndex = DllStructGetData($tInfo, "Index")

                    If $iIndex <> -1 Then
                        Local $iX = DllStructGetData($tInfo, "X")
                        Local $iPart = 1
                        If _GUICtrlListView_GetView($hListView) = 1 Then $iPart = 2 ;for large icons view

                        Local $aIconRect = _GUICtrlListView_GetItemRect($hListView, $iIndex, $iPart)

                        If $iX < $aIconRect[0] And $iX >= 5 Then
                            $iOld_Sel_Index = _GUICtrlListView_GetSelectedIndices($hListView)
                            _GUICtrlListView_SetItemSelected($hListView, $iIndex)

                            $iID = GUICtrlRead($iIDFrom)

                            ControlListView($hWnd, "", $iIDFrom, "SelectClear")
                            If $iOld_Sel_Index <> "" Then _GUICtrlListView_SetItemSelected($hListView, Number($iOld_Sel_Index))

                            ItemChecked_Proc(_GUICtrlListView_GetItemText($hListView, $iIndex), _
                                (_GUICtrlListView_GetItemChecked($hListView, $iIndex) = 0), $iID)
                            Return 0
                        EndIf
                    EndIf
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 21-10-2009 в 07:04.

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

Отправлено: 14:11, 20-10-2009 | #3


Пользователь


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

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


Вот это код, действительно работает, еще бы как узнать ControlID чекнутого элемента, индекс не подойдет так как я сортирую список

Отправлено: 16:06, 20-10-2009 | #4


Аватара для Creat0R

Must AutoIt


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

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


Цитата malev:
индекс не подойдет так как я сортирую список »
Ну а зачем ID для сортировки? Я поправил свой пример, он теперь включает и сортировку

Цитата malev:
как узнать ControlID чекнутого элемента »
И это добавил в свой пример.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 06:51, 21-10-2009 | #5


Пользователь


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

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


Конечно ID не нужен для сортировки просто мне нужно записать check строки в файл, а при сортировке все индекса меняются кто был первым может стать последним поэтому и идентифицирую запись по ID. Можно конечно еще поле добавить порядковый номер...Считаю тему решенной. Спасибо.

Отправлено: 13:40, 21-10-2009 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как поменять значение в оперативной памяти kronic AutoIt 2 16-12-2009 17:50
Разное - [решено] Узнать когда было изменено имя рабочей группы viter_alex Microsoft Windows 2000/XP 2 07-07-2009 13:02
Delphi - Как отключить все Checkbox'ы на форме? R.M.L Программирование и базы данных 9 08-06-2009 00:59
[решено] Как проверить Checkbox, как в Input писать только определенные символы leprecon AutoIt 4 21-05-2009 23:02
Как узнать переменную которой передается значение?? FADE Вебмастеру 2 30-06-2004 18:45




 
Переход