Страница 1 из 2

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 10:57
Игорь Столяров
Привет всем ! :)

Подскажите пожалуйста, можно ли как-то определить текущее состояние DropBox (свернут или открыт) ?

Проблемс в следующем: нужно выполнить некоторые действия при выборе нового значения в DropBox при ACCEPTED.
Но у DropBox есть противное свойство - если навести на него курсор мышки и начать ожесточенно крутить колесико,
то значение меняется, а событие ACCEPTED не возникает. :( В этом случае можно ловить смену значения через NewSelection,
но нужно знать в каком состоянии находится DropBox (свернут или открыт) ... :(

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 12:49
kreator
Не DropBox, а, видимо, DropCombo. А чем не нравиться событие NewSelection? По-моему, нормальный механизм отслеживания того, что происходит в Комбо. Пользователь ведь может просто набирать символы и при этом происходит поиск и меняется выбранное значение. Поведение при открытом и закрытом Комбо по идее должно быть одинаковым. Я к тому, зачем нужно знать состояние? Тем более, что простого механизма определения нет.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 12:54
Игорь Столяров
kreator писал(а): Не DropBox, а, видимо, DropCombo.
Нет. Именно LIST с опцией DROP(). После выбора нового значения в DropBox нужно выполнить некоторые расчеты (медленно).
Если их выполнять при простом перемещении засветки в списке - то получается не best.
Именно поэтому дается возможность выбрать пролистать список, а при выборе значения (Accepted) - выполняем расчет показателей.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 13:15
Yufil
Можно попробовать в свёрнутом дроплисте поменять Prop:From на текстовую константу-значение,
?Droplist{Prop:From} = 'CurrentValue'
а по событию развёртывания (Event:Dropdown) - обратно на список.

Тогда колесом и клавишами не листается, пока список не развёрнут, нечего листать...

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 13:34
Игорь Столяров
Спасибо ... Я тоже как-то прихожу к мысли, что лучший способ - это вырубить (как-то) скроллинг при наведении
курсора мыши, без разворачивания списка ....
Надо полазить LibSrc, ну не может же такого быть, что бы не было флага разворачивание списка ... :(

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 13:42
Admin
Для расчетов легко реализуется тайм-аут таймерами. Крутишь - не считает. Притормозил чутка - расчиталось. Не раз так делал.
P.S. Со времен Topspeed так делал. MEMO прочитать, картинку из инета загрузить и т.д.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 13:57
kreator
Понял. Положи на дроплист регион. Колёсико мышки перестанет работать. Только регион, наверно, не должен на кнопку открытия заходить.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 15:12
Admin
kreator писал(а):Колёсико мышки перестанет работать.
Я как пользователь буду не рад.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 15:47
kreator
Admin писал(а):
kreator писал(а):Колёсико мышки перестанет работать.
Я как пользователь буду не рад.
Дроплист неправильно работает. Дроплист не выбран, а только мышка над ним. Какого художественного смысла (©) он (дроплист) реагирует на колёсико? Давайте посмотрим как у других. Вот в IBExpert'е (написан на Дельфях) такого поведения нет, проверил.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 16:23
Admin
Вот скриншот.
2016-10-21_23-23-01.png
2016-10-21_23-23-01.png (8.89 КБ) 3568 просмотров
Выбрана кнопка OK. Мышка над списком работает!

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 16:25
Admin
IBExpert'е
Не авторитет.
Контролы родные виндовые? Зная Delphi, ответ - нет.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 16:30
kreator
В седьмой Винде в экране "Выполнить" колесо не работает. Дома проверю в десятой.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 16:36
kreator
В Экселе 2010 в настройках тоже колесо не работает. Надо включить здравый смысл, которого, правда, нет. В чём смысл прокрутки невыбранного дроплиста. Смысл, похоже один - запутать пользователя и создать проблемы разработчику.

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 16:47
Yufil
В FreeABC для старых версий (не знаю, как сейчас) есть модуль vsa_mwhl, обрабатывающий колесо.

Просматриваются все контролы на экране. Если контрол видимый и при этом находится под курсором мыши,

IF INRANGE(MOUSEX(),FEQ{Prop:XPos},FEQ{Prop:XPos}+FEQ{Prop:Width}) |
AND INRANGE(MOUSEY(),FEQ{Prop:YPos},FEQ{Prop:YPos}+FEQ{Prop:Height})

этому контролу отправляются несколько раз Upkey или DownKey, независимо от того, выбран он или нет.
А вот если под курсором подходящего контрола нет, брался другой, лишь бы List или Text, это убирал.

Возможно, и сейчас так - ищется контрол под курсором мыши, невзирая на...

Текущее состояние DropBox

Добавлено: 21 Октябрь 2016, 17:02
Admin
Проблемс в следующем: нужно выполнить некоторые действия при выборе нового значения в DropBox при ACCEPTED.
Мое мнение. Не нужно лезть в дебри со мышиным скроллом.
На NewSelection постоянно запоминаем время. На таймере смотрим, прошло к примеру 200ms -> выполняем какой то код (который тормозит).
Все. И тогда можно забыть про прокрутку мышью.
Будет работать на всех версия Windows, не зависимо от того крутят мышью или бегают кнопками по контролу.