Автор Тема: Маркировка найденого при поиске в виртуальном 2D ListView  (Прочитано 317 раз)

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

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 27
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Здравствуйте.
Вот здесь https://www.autoitscript.com/forum/topic/179112-incremental-search-in-owner-drawn-listview/
я увидел довольно оригинальную функцию маркировки жёлтеньким найденых букв.

Нажмите для отображения изображения в оригинальном размере.

Взял оригинальный пример "2) Show matching rows only.au3". Но там проблема больших маленьких букв.
Вот код:
(нажмите для показа/скрытия)

И мне всё равно хотелось бы адаптировать такую функцию в свой виртуальный ListView.
Вот он,  с поиском по первому столбцу (индекс ноль) и инкрементальным фильтром.

(нажмите для показа/скрытия)

И я попытался их соединить! Конечно это не заработало  :(
При попытке добавлить стиль $LVS_OWNERDRAWFIXED,  перестают отображаться элементы в ListView.
Вот что получилось:
(нажмите для показа/скрытия)

Наверно нужно подправить функцию WM_DRAWITEM, но сам я этого не осилю.
Я буду рад, если кто то будет готов поломать мозги и поправить то, что получилось.

Может кто то предложит своё решение, но с привязкой к моему примеру (двумерный виртуальный ListView).
Спасибо.

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


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

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


Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 973
  • Репутация: 177
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Из того , что увидел - у Вас не отрабатывает функция "WM_DRAWITEM" потому , что внутри функции используется переменная "$idListView" , а она у Вас - локальная, уберите "Local" , при создании "ListView"
Далее , Вы используете Двумерный массив "$aItems" , следовательно допишите индекс при выборе текста подпункта (внутри функции "WM_DRAWITEM") в конце строки должно быть " $sItemText = $aItems[$aSearch[$iIndex]][0]" ну и далее допишите заполнение остальных столбцов.
Дальше уже не копался.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 27

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
ra4o
Спасибо за Ваш ответ. Добавил стиль и внёс указанные изменения.
Поиск заработал с указаныым стилем, выделение жёлтым нет.

... ну и далее допишите заполнение остальных столбцов.
Дальше уже не копался.

Мне сложно так понять. Копайте пожалуйста дальше  :)
Я думаю, что это будет полезно и другим.
Спасибо.

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

Re: Маркировка найденого при поиске в виртуальном 2D ListView
« Ответ #2 Отправлен: Июль 13, 2019, 11:38:38 »

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 27

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Немного подправил код с учётом замечаний ra4o.
Перестала отображаться информация в колонках, кроме первой.
Как добавить? В $aSearch? Но это массив для поиска, нет? А я ищу по первой колонке.
По прежнему нет выделения жёлтым.
Помогите понять как это работает?

(нажмите для показа/скрытия)

Оффлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 973
  • Репутация: 177
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
По прежнему нет выделения жёлтым.
Код: AutoIt [Выделить]
;Уберите в основном цикле "Local" в строке
$sSearch = GUICtrlRead($idEdit)
;Измените в функции "WM_DRAWITEM" строку
Local $sMatch = StringRegExp( $sItemText, $sSearch, 1 ), $extended = @extended, $iLen = StringLen( $sMatch[0] )
;на строку
Local $sMatch = StringRegExp( $sItemText,'(?i)'& $sSearch, 1 ), $extended = @extended, $iLen = StringLen( $sMatch[0] ); (Поиск без учёта регистра символов)


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

Re: Маркировка найденого при поиске в виртуальном 2D ListView
« Ответ #4 Отправлен: Июль 16, 2019, 00:07:53 »

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 27

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Я в шоке!!! 4 знака, и функция заработала!!!
Высший пилотаж!!!
Я очень ценю Вашу помощь.
Осталось возвратить данные в столбцы 1,2,3.
Это уже легче (но не для меня  :( ).
Прошу помощи.
Спасибо.

Оффлайн liond66 [?]

  • Новичок
  • *
  • Сообщений: 27

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Повисло всё на пол дороги  :(
Как вернуть отображение информации в столбиках 1,2,3?
Может это не так легко, как я себе представляю?
ra4o, Вы в теме, на Вас главная надежда.
А также приглашаю всех помочь с кодом.
Ещё раз выложу код после всех изменений.
(нажмите для показа/скрытия)

Спасибо.

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


 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
2635 Просмотров
Последний ответ Январь 23, 2013, 11:51:21
от WSWR
4 Ответов
2983 Просмотров
Последний ответ Июнь 26, 2013, 15:33:28
от Geqsogen
3 Ответов
1951 Просмотров
Последний ответ Август 23, 2015, 17:40:03
от eralex
5 Ответов
2874 Просмотров
Последний ответ Ноябрь 12, 2013, 18:29:36
от Garrett
0 Ответов
991 Просмотров
Последний ответ Ноябрь 12, 2013, 17:26:18
от madmasles
5 Ответов
1699 Просмотров
Последний ответ Март 18, 2014, 05:30:49
от MCR
6 Ответов
9230 Просмотров
Последний ответ Август 24, 2015, 21:17:53
от alex33
5 Ответов
1496 Просмотров
Последний ответ Май 31, 2016, 23:35:44
от inververs
2 Ответов
2697 Просмотров
Последний ответ Июнь 24, 2016, 19:26:14
от Makrut
2 Ответов
1050 Просмотров
Последний ответ Октябрь 25, 2016, 08:24:08
от ildar