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

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

Просмотров: 1205Комментарии: 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