29.11.2006, 18:04 | #1 |
Участник
|
Listbox - отследить прокрутку (scroll), или как прикрутить UpDown (Spin) Control
Я сейчас пытаюсь сделать поле ввода, значения в котором можно было бы менять, используя "стрелки", как у UpDown (Spin) или даже DomainUpDown Control. Пока что получилось реализовать это на основе "бесконечного" Listbox. В него при инициализации заносятся нужные значения, скажем, десяток элементов из "вычисляемого" списка, и выбор позиционируется посередине. Если же выбрать элемент ниже/выше текущего выбранного, то список "прокручивается" (строки удаляются/добавляются), и новый выбранный элемент опять позиционируется в середине списка, т.е. сверху и снизу от него получается примерно равное число строк. Если высоту такого списка задать равной высоте одной строки, то вместо scrollbar'а у него появляются кнопки со стрелками - как раз как у Spin Control. Но при этом отсутствует возоможность выбирать значения мышкой, щелкая только по этим кнопкам: прокрутка работает, но выбранным остается старое значение, пока по новому не щелкнешь мышой.
Так вот, как можно отследить, что пользователь прокручивает Listbox? Или как прикрутить к обычному полю ввода (String/Date/RealEdit) Spin Control? P.S. Если кому интересно, что у меня получилось в плане "бесконечных" списков, могу выложить пример. |
|
29.11.2006, 20:29 | #2 |
Участник
|
Зачем вам SPIN?
Сделайте рядом 2 кнопки и контролируйте EDIT. |
|
29.11.2006, 21:21 | #3 |
Британский учённый
|
Занимался подобным, не совсем Spin, но своя формочка с кнопками, дополнительный функционал. Так вот с Listbox / Combobox не знаю? сам застрял А с остальными перекрываю lookup и свою форму вызываю. Если не подходит, тогда опишите пожалуйста задачу подробнее, или лучше выложите код, может кому и пригодится. Хотя такими вещами в Аксапте мало кому приходится заниматься
|
|
29.11.2006, 21:41 | #4 |
Участник
|
|
|
29.11.2006, 23:08 | #5 |
Участник
|
Провел небольшой эксперимент со StringEditControl'ом - что с EDT, что без него у меня lookup вызывается только по Alt-Down, на обычные кнопки Up/Down - ноль эмоций (вводить с клавы звездочку не предлагать! ) Так что не подходит...
|
|
30.11.2006, 10:36 | #6 |
Участник
|
Думаю можно повесить Hook какой...
Или ActiveX... тогда можно сделать полный SPIN-control |
|
30.11.2006, 10:56 | #7 |
Участник
|
Класс, реализующий "бесконечный" прокручиваемый Listbox
Во вложении - пара классов для создания "бесконечного" Listbox'а: собственно, абстрактный класс, реализующий функциональность прокрутки, и класс-наследник, приведенный в качестве примера. Конструктору в параметрах передаются: ссылка на FormListboxControl (предполагается, что control принадлежит какой-то форме), число элементов (не менее трех), которые надо поддерживать в списке, и начальное значение, связанное с элементом, который будет выбран при инициализации Listbox, т.е. на который будет указывать selection().
X++: void new(FormListBoxControl _formListbox, int _maxItems, anytype _startValue)
X++: Types getValueType(); anytype calcNextValue(anytype _currentValue, boolean _next); str fmtListValue(anytype _value); int calcSelectionDelta(anytype _from, anytype _to); В примере используется дополнительный BaseEnum и одна дополнительная метка. Последний раз редактировалось gl00mie; 30.11.2006 в 11:57. Причина: замечания belugin |
|
|
За это сообщение автора поблагодарили: belugin (10). |
30.11.2006, 11:04 | #8 |
Участник
|
С хуками возиться не хочется ActiveX есть штатный - Microsoft UpDown Control, только как его привязять к полю ввода, как сделать, чтобы он реагировал, когда в поле ввода нажимаются стрелки вверх/вниз, непонятно
|
|
30.11.2006, 11:21 | #9 |
Участник
|
С моей точки зрения лучше сделать для этих целей отдельный абстрактный класс или интерфейс.
http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller в .Net |
|
30.11.2006, 11:52 | #10 |
Участник
|
Цитата:
PS. Подправил описание класса, чтобы было меньше двусмысленностей. Последний раз редактировалось gl00mie; 30.11.2006 в 11:59. |
|
30.11.2006, 12:39 | #11 |
Участник
|
Тут акцент на слово "отдельный". Типа один класс для описания абстракуии коллекции объектов, а другой для показа этой абстракции в списке.
|
|
30.11.2006, 17:37 | #12 |
Участник
|
Всё, конечно, здорово, но хотелось бы вернуться к исходному вопросу Кто-нить прикручивал к полям ввода UpDown (Spin) Control? Или получалось у кого-нить отследить прокрутку Listbox'а? По поводу второго у меня надежд мало, потому что штатный виндовый Listbox, судя по описалову оконных сообщений, даже при работе через WinAPI о таких вещах не сообщает...
|
|
30.11.2006, 18:50 | #13 |
Британский учённый
|
Вот посмотрите пожалуйста скрин
|
|
30.11.2006, 19:04 | #14 |
Участник
|
|
|
30.11.2006, 20:11 | #15 |
Британский учённый
|
ну это Spin прикрученный к StringEdit, Вы ведь вроде спрашивали как его можно прикрутить? Или я что то не так понял?
|
|
30.11.2006, 23:12 | #16 |
Участник
|
Цитата:
PS. Можно на "ты", я не обижусь |
|
01.12.2006, 12:02 | #17 |
Британский учённый
|
Упс , теперь понял. Подумал, что Вы желаете реализовать, что то типа прокручиваемого листбокса (как менюшки в Аксапте). Сорри , хотел помочь.
|
|
01.12.2006, 15:58 | #18 |
Британский учённый
|
Как вариант в методе task прокручивать. Правда, если на форме только один контрол, например StringEdit, то task ArrowUp и ArrowDown не отрабатывают. Но вот если есть еще скажем грид (т.е. контрол по которому можно перемещаться вверх/вниз), тогда работает. Можно запоминать активный контрол и если активен нужный - листать.
|
|
|
|