|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
TListBox с функцией фильтрующего поиска
На базе TListBox реализовал фильтрующий поиск. Когда вводишь символ, поверх листбокса появляются TEdit и еще один листобокс. Текст вводится в TEdit, отфильтрованные результаты поиска - в дочерний листбокс:
Проблема: при кликаньи дочернего листбокса проявляется (моргает) основной листбокс, также иногда проявляются вертикальный скролбар родительского. Причем, этот скролбар при входе в режим поиска я убираю функцией ShowScrollBar(Handle,SB_VERT,false), но при кликаньи он все равно появляется. Собственно, вопрос: как заставить родительский листбокс не отрисовывать себя, чтобы никаких морганий не было и скролбары не появлялись? |
#2
|
||||
|
||||
LockWindowUpdate(...).
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Цитата:
Нет. В этом случае вообще все внутри листбокса перестает отрисовываться. Необходимо сделать так, чтобы только строки и скролбары родительского листобокса не отрисовывались. Дочерние контролы должны отрисовываться как обычно. |
#4
|
|||
|
|||
а если так?
PHP код:
|
#5
|
|||
|
|||
Цитата:
Вот это помогло. Строки родительского листбокса не проявляются. Теперь осталась проблема со скролбарами. |
#6
|
|||
|
|||
По поводу скролбаров:
Удалось только перманентно отключить скроллбары через CreateParams, исключить из стиля флаги WS_HSCROLL и WS_VSCROLL. Но это не решает проблему, так как скролбары нужны, когда поиск не используется. Их нужно именно включать и отключать. В принципе, для этого есть SetWindowLong, но вертикальный скролбар почему-то не отключается. Код следующий: Код:
style:=GetWindowLong(Handle,GWL_STYLE); SetWindowLong(Handle,GWL_STYLE,style and not WS_HSCROLL and not WS_VSCROLL); SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_FRAMECHANGED); Вертикальный скролбар не убирается. Здесь обсуждалась моя проблема, но там пришли к выводу, что это вообще невозможно - отключать скроллбары у уже созданных листбоксов. Я что-то сомневаюсь в этом, может просто что-то еще надо сделать? |