Автор Тема: [Баг] GUICtrlCreateListView и параметры строки  (Прочитано 5205 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Похоже, нашел баг. Кликайте в следующем коде по строкам в ListView:
Код: AutoIt [Выделить]
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>

$hGUI = GUICreate('ListView', 200, 200)
$idLV = GUICtrlCreateListView('Column', 10, 40, 180, 150)
$idBtn = GUICtrlCreateButton('Test', 50, 10, 100, 20)
For $i = 0 To 9
    _GUICtrlListView_InsertItem($idLV, 'Item_' & $i, -1, -1, $idBtn); параметр = $idBtn
Next
GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $idBtn
            MsgBox(64, 'Info', 'Button click or ListView item?', 0, $hGUI)
    EndSwitch
WEnd


Русское сообщество AutoIt

[Баг] GUICtrlCreateListView и параметры строки
« Отправлен: Июль 19, 2015, 17:31:12 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2693
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #1, Отправлен: Июль 19, 2015, 18:11:16 »
Я уже подробно описывал, откуда такое поведение LV. Для того, чтобы с элементами LV можно было работать как с другими элементами GUI, AutoIt использует $iParam для хранения ID элемента LV. Таким образом не делается никаких различий между элементами LV и другими элементами GUI.

Если LV заполняется функциями из UDF, то для разрешения данного конфликта нужно прописать заглушку в WM_NOTIFY:

Код: AutoIt [Выделить]
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

    Local $tNMHDR = DllStructCreate($tagNMHDR , $lParam)
    Local $hTarget = DllStructGetData($tNMHDR, 'hWndFrom')
    Local $nNC = DllStructGetData($tNMHDR, 'Code')

    Switch $hTarget
        Case $hLV
            Switch $nNC
                Case $LVN_ITEMACTIVATE
                    Return 0
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY



Думай, прежде чем говорить.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790

  • Автор темы
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #2, Отправлен: Июль 20, 2015, 07:38:50 »
Yashied  [?]
Цитировать
для разрешения данного конфликта нужно прописать заглушку в WM_NOTIFY
Прописал, не помогает.
(нажмите для показа/скрытия)

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2693
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #3, Отправлен: Июль 20, 2015, 08:08:18 »
Значит что-то поменялось. Раньше LV не рагировал на одиночный клик. Добавьте заглушку на $NM_CLICK.

Русское сообщество AutoIt

Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #3 Отправлен: Июль 20, 2015, 08:08:18 »

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790

  • Автор темы
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #4, Отправлен: Июль 20, 2015, 11:04:32 »
Yashied  [?]
Цитировать
Добавьте заглушку на $NM_CLICK.
Спасибо, помогло.
Решение:
(нажмите для показа/скрытия)

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2693
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #5, Отправлен: Июль 20, 2015, 11:40:18 »
На самом деле, поскольку максимальное значение элементов на GUI в AutoIt ограничено 65532, то можно просто использовать диапазон значений от 65536 при использовании $iParam.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790

  • Автор темы
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #6, Отправлен: Июль 20, 2015, 11:47:52 »
Yashied  [?]
Цитировать
можно просто использовать диапазон значений от 65536 при использовании $iParam.
Я этим путем и пошел.

Русское сообщество AutoIt

Re: [Баг] GUICtrlCreateListView и параметры строки
« Ответ #6 Отправлен: Июль 20, 2015, 11:47:52 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
4993 Просмотров
Последний ответ Октябрь 25, 2009, 09:48:28
от snoitaleR
11 Ответов
6428 Просмотров
Последний ответ Ноябрь 06, 2009, 12:35:10
от amel27
6 Ответов
3820 Просмотров
Последний ответ Август 14, 2011, 00:27:49
от madmasles
5 Ответов
2080 Просмотров
Последний ответ Август 26, 2012, 05:35:38
от joiner
2 Ответов
1792 Просмотров
Последний ответ Август 27, 2012, 18:59:48
от Buburum
7 Ответов
5476 Просмотров
Последний ответ Ноябрь 23, 2012, 16:09:20
от Medic84
6 Ответов
2254 Просмотров
Последний ответ Сентябрь 24, 2013, 20:51:34
от Merovingien
6 Ответов
6832 Просмотров
Последний ответ Июнь 19, 2015, 20:44:51
от Gen345
3 Ответов
575 Просмотров
Последний ответ Июнь 04, 2016, 21:49:21
от Alofa
2 Ответов
1414 Просмотров
Последний ответ Ноябрь 02, 2016, 10:54:56
от kristow13