Показать сообщение отдельно
  #1  
Старый 27.08.2017, 18:29
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Оперативное получение значения из ячейки грида

Всем привет!
Уже немало лет я занимаюсь разработкой баз данных (на любительском уровне, я - самоучка). И все эти годы шли поиски оптимального варианта интерфейса БД. Казалось бы, в вопросе, как вводить/редактировать данные, всё просто - либо прямо в гриде, либо на отдельной форме. Последний вариант, безусловно, удобен наибольшими возможностями. В то же время ввод данных прямо в гриде визуально очень изящен, и - главное - сильно сокращает код (то есть усилия и время работы программиста) по сравнению с вариантом с дополнительной формой.
Итак, исходные данные: ввод новых данных (Insert) прямо в гриде в поле, НЕ допускающее повторяющихся значений.
Задача: оперативный (при каждом OnKeyDown или KeyPress) контроль вводимых в ячейку грида данных с выдачей пользователю оповещения (не-модального, разумеется) о том, что такая запись уже есть в БД.
И вот тут я сталкиваюсь с проблемой - как получить вводимое текстовое значение из ячейки грида. Способы, предлагаемые в Инете (grid.SelectedField.AsString, или queryMyField.AsString), не подходят - вводимое значение становится доступным только после ухода из редактируемого поля и передаче фокуса ввода в соседнее поле. А так, чтобы при каждом нажатии на кнопки клавиатуры, - не выходит никак. Задумка такая: при переходе в режим вставки/редактирования активируется дополнительная панель под основным гридом, а там - дополнительный грид в режиме ReadOnly, данные в котором фильтруются при каждом изменении вводимого пользователем значения в основном гриде. Или - как вариант - можно менять цвет грида в момент, когда набранная пользователем комбинация символов совпадёт с уже имеющейся в БД в данном поле.
Вариант, когда оповещение выдаётся после того как значение в уникальном поле уже введено полностью, меня не устраивает. Это сделать несложно, только это не будет удобно (на мой придирчивый взгляд к идеологии интерфейса).
И вот собственно вопрос. Можно ли каким-то образом получить вводимый в ячейку грида текст, например, через свойство Canvas? Повторюсь, я самоучка, и в очень многих вопросах просто дуб дубом, в этом уж точно. Нигде не могу найти ответ на свой вопрос. Может кто подскажет, как быть? Использую грид EhLib 4.3.21.
Ответить с цитированием