Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.11.2011, 14:41
user686 user686 вне форума
Прохожий
 
Регистрация: 02.11.2011
Сообщения: 8
Репутация: 10
По умолчанию TListBox с функцией фильтрующего поиска

На базе TListBox реализовал фильтрующий поиск. Когда вводишь символ, поверх листбокса появляются TEdit и еще один листобокс. Текст вводится в TEdit, отфильтрованные результаты поиска - в дочерний листбокс:



Проблема: при кликаньи дочернего листбокса проявляется (моргает) основной листбокс, также иногда проявляются вертикальный скролбар родительского.
Причем, этот скролбар при входе в режим поиска я убираю функцией ShowScrollBar(Handle,SB_VERT,false), но при кликаньи он все равно появляется.

Собственно, вопрос: как заставить родительский листбокс не отрисовывать себя, чтобы никаких морганий не было и скролбары не появлялись?
Ответить с цитированием
  #2  
Старый 02.11.2011, 15:00
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

LockWindowUpdate(...).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 02.11.2011, 15:19
user686 user686 вне форума
Прохожий
 
Регистрация: 02.11.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
LockWindowUpdate(...).

Нет. В этом случае вообще все внутри листбокса перестает отрисовываться.

Необходимо сделать так, чтобы только строки и скролбары родительского листобокса не отрисовывались. Дочерние контролы должны отрисовываться как обычно.
Ответить с цитированием
  #4  
Старый 02.11.2011, 15:36
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

а если так?
PHP код:
SendMessage(HandleWM_SETREDRAWWPARAM(False), 0);
    
SendMessage(HandleWM_SETREDRAWWPARAM(True), 0); 
Ответить с цитированием
  #5  
Старый 02.11.2011, 16:05
user686 user686 вне форума
Прохожий
 
Регистрация: 02.11.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pyro
а если так?
PHP код:
SendMessage(HandleWM_SETREDRAWWPARAM(False), 0);
    
SendMessage(HandleWM_SETREDRAWWPARAM(True), 0); 

Вот это помогло. Строки родительского листбокса не проявляются.

Теперь осталась проблема со скролбарами.
Ответить с цитированием
  #6  
Старый 02.11.2011, 17:00
user686 user686 вне форума
Прохожий
 
Регистрация: 02.11.2011
Сообщения: 8
Репутация: 10
По умолчанию

По поводу скролбаров:

Удалось только перманентно отключить скроллбары через 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);

Вертикальный скролбар не убирается. Здесь обсуждалась моя проблема, но там пришли к выводу, что это вообще невозможно - отключать скроллбары у уже созданных листбоксов. Я что-то сомневаюсь в этом, может просто что-то еще надо сделать?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter