BeginUpdate - EndUpdate для DI_LISTBOX Topic is solved

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
buniak_a_h
Posts: 1398
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

BeginUpdate - EndUpdate для DI_LISTBOX

Post by buniak_a_h »

Ситуация:
имеется список (DI_LISTBOX)
имеется "хитрый" критерий фильтрации пунктов списка (например, реализованный в функции GetVisible)
Требуется установить этот фильтр.
Я знаю два способа решения:
1. Для каждого j-го элемента выставлять или гасить флаг LIF_HIDDEN в зависимости от результата GetVisible и обновлять его посылкой DM_LISTUPDATE с параметром {Index=j, Flags=<сформированный влаг>}.
2. Для всех элементов списка DI_LISTBOX[6] выставить соответствующие флаги и затем вызвать DM_LISTSET сразу для всех элементов списка.
Второй подход мне не хотелось бы применять, т.к. при этом требуется сформировать ПОЛНЫЙ элемент списка, в т.ч. и те поля, которые не изменяются. Кроме того, при этом теряются некоторые параметры, которые были установлены при формировании диалога (например, Source)
Первый подход плох тем, что на экране отображается процесс показа/сокрытия пунктов списка. И это, к тому же, замедляет установку фильтра.
В связи с этим вопрос:
Есть ли аналог пары BeginUpdate / EndUpdate? Было бы очень кузяво …
Если нет - имеет ли смысл заносить в "хотелки"?
Вариант решения: Если бы Menu.FilterStr умел принимать не одну строку, а, например, список видимых (или НЕвидимых) через '\n', или таблицу вместо строки - это тоже решило бы задачу. Но, насколько я понимаю, такого сервиса нету.

User avatar
zg
zero-gravity
Posts: 5700
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 134 times
Contact:

BeginUpdate - EndUpdate для DI_LISTBOX

Post by zg »

buniak_a_h wrote:
Sun 05 Jan, 2020 17:53
Второй подход мне не хотелось бы применять, т.к. при этом требуется сформировать ПОЛНЫЙ элемент списка, в т.ч. и те поля, которые не изменяются. Кроме того, при этом теряются некоторые параметры, которые были установлены при формировании диалога (например, Source)
что такое Source? какие параметры теряются?

buniak_a_h
Posts: 1398
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

BeginUpdate - EndUpdate для DI_LISTBOX

Post by buniak_a_h »

zg wrote:
Mon 06 Jan, 2020 01:30
что такое Source?
Извините, перепутал. arg - поле, которое делает far.MakeMenuItems (например, far.Show).
Ещё один пример потери каких-то данных: результат поиска -> Show all выводит список (по-моему, DI_USERCONTROL), который "раскрашивает" в строке часть, соответствующую найденному образцу. Если спрятать ненужные пункты по первому типу, то раскраска остаётся; если по второму - ой! всё становится одного цвета. Т.е. что-то теряется. Увы, конкретнее не могу, просто это - аргумент против второго подхода.

User avatar
John Doe
Бюрократ
Posts: 12598
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 34 times
Been thanked: 260 times

BeginUpdate - EndUpdate для DI_LISTBOX

Post by John Doe »

DM_ENABLEREDRAW

Post Reply

Return to “Нужна помощь”