
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