У меня есть сильно модифицированное управление на основе TStringGrid. Я хочу разрешить пользователю делать выбор в этой сетке, но ограничивать выбор одной единственной строкой (текущей строкой).TStringGrid грязный взломать - ограничение выбора на одну строку
Реализация: Когда пользователь нажимает левую кнопку мыши, я использую грязный взломать: В режиме OnMouseDown я захватываю курсор мыши и держу его в текущей строке. Пользователь может перемещать мышь вверх и вниз на своем пэде, но курсор не будет двигаться вверх или вниз. Он останется в текущем ряду. Когда пользователь отпускает кнопку (событие OnMouseUp), я освобождаю захват.
Однако этот хак, как я уже сказал, очень грязный. Есть несколько проблем. Например, если пользователь нажимает левую кнопку мыши (LMB), а затем не отпускает эту кнопку, он нажимает правую кнопку, появляется всплывающее меню, но захват мыши никогда не будет отпущен. Таким образом, мышь будет заблокирована в области экрана, пока у пользователя не будет блестящей идеи щелкнуть LMB еще раз, чтобы разблокировать мышь. Это может быть ошибка в D7. Существует отдельная статья об этом здесь: TStringGrid - OnMouseUp is not called!
Существует элегантный способ сделать это?
Edit: OnSelectCell не работает. Событие OnSelectCell вызывается только один раз, когда вы нажимаете на ячейку. Если вы удерживаете кнопку нажатой и перемещаете мышь, чтобы развернуть выделение, OnSelectCell больше не будет вызываться. Действительно MoveCurrent отображается только в TCustomGrid.MouseDown.
Не ограничивайте движение мыши! Пользователи ненавидят вас за это и перестанут использовать ваше программное обеспечение. –