Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Правильное блок-ние и разблок-ние компонентов


Автор: Antony41 12.7.2009, 15:33
Здравствуйте Уважаемые! Возникла следующая проблема:

У меня так сказать на форме есть список ListView и панелька с несколькими кнопками (открыть, переместить выделить удалить и тд.)

После выполнения некоторых процедур в список добавляются нужные мне файлы, так вот когда я например выделяю файл в списке, то кнопки открыть, переместить, выделить, удалить должны активироваться(enabled), а при снятии выделения пользователем должны блокироваться. Предположим у меня в списке несколько файлов

C:\1.rar
C:\2.rar
C:\3.rar
C:\4.rar
C:\5.rar

когда я выделяю первый итем все прекрасно кнопки активируются, когда после этого кликаю на второй итем, происходит сналала блокирование кнопок а потом снова активация, тут становится ясным, что во всём виновато свойство OnSelected оно реагирует как на выделение так и на снятие выделения, и получается мерцание!!! Фак! что делать?

Автор: RomanEEP 13.7.2009, 13:20
У обычной кнопки можно раз 10 поменять  св-во Enabled и нет никакого мигания
а свойства OnSelected не вижу у ListView есть только OnSelectItem

Автор: Antony41 13.7.2009, 16:44
ты прав на счёт onSelectedItem  опечатался, а вот попробуй размести таймер с интервалом 1,

и напиши

Button1.Enabled:=not Button1.Enabled;

Получается что то вроде того

Автор: kami 13.7.2009, 18:18
можно завести обработчик WM_USER. При срабатывании OnSelectItem просто посылаем (PostMessage) себе сообщение, без разницы с какими параметрами (анализировать их нет смысла).
А уже в обработчике анализируем состояние выбора в ListView.
Получается:
- пришел deselect.
- отправили себе сообщение (через PostMessage)
- пришел Select
- отправили себе сообщение
- доставлено наше первое WM_USER, обработано и выставлено enabled кнопкам и иже с ними.
- доставлено наше второе WM_USER, но так как состояние не изменилось, кнопки не "моргнут".

Если же select не произошло, то ничего страшного не случится - просто WM_USER будет доставлено одно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)