| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 будет доставлено одно. |