Домашняя лаборатория мудрого KAA

Почему в TDBEditEh не вводятся двойные кавычки? (EhLib v8.1)

Просмотров: 616Комментарии: 0
Программирование (Programming)Delphi
Почему в TDBEditEh не вводятся двойные кавычки? (EhLib v8.1)
Good news, everyone!

Если с компонентом TDBEditEh связан выпадающий список и он открыт, то кавычку ввести не получится. После препарирования модуля DBCtrlsEh выяснилось, что процедура TCustomDBEditEh.WndProc содержит ошибку.

Модуль DBCtrlsEh строка 4795:


if ((CharCode in [VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT]) and not(ssAlt in ShiftState))
  or ((CharCode in [VK_HOME, VK_END]) and (ssCtrl in KeyDataToShiftState(KeyData)))

Дело в том, что код кавычки равен 34 и код константы VK_NEXT тоже равен 34. В результате программа "думает", что была нажата VK_NEXT, а не кавычка. Чтобы решить проблему, необходимо обрабатывать код 34 только когда НЕ нажата клавиша SHIFT.

Решение:


if ((CharCode in [VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT]) and (ShiftState * [ssAlt, ssShift] = []))
  or ((CharCode in [VK_HOME, VK_END]) and (ssCtrl in KeyDataToShiftState(KeyData)))
Если код
ShiftState * [ssAlt, ssShift] = []
кажется тебе странным, то самое время вспомнить про операции над множествами.

© By Farnsworth

Оставьте комментарий!

Используйте нормальные имена

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)