У меня есть элемент управления для редактирования на ленте DevExpress типа TcxBarEditItem
, для которого я записываю нажатия клавиш, чтобы обновить «плавающий» список возможных функций для запуска.
По какой-то причине обработчик событий TcxBarEditItem
и его родительских классов совсем не работает, как ванильные эквиваленты Delphi, а это означает, что я должен записывать эти нажатия клавиш.
Мой вопрос, однако, заключается в том, как записать / или запретить, чтобы пользователь делал такие вещи, как вставка в загруженный текст или выделение и удаление загруженного текста?
То, как эти элементы управления работают, означает использование String(TcxBarEditItem(control).EditValue)
(то есть, как я могу получить доступ к элементу управления, поскольку он является членом класса Command - TS8RibbonCommand
), на самом деле не указывает на текст в редактировать элемент управления, пока пользователь не щелкнет его. Я пытался сделать кучу таких вещей, как программная установка фокуса в другом месте и перефокусировка, но, похоже, ничто иное не работает с записью нажатий клавиш.
В фрагменте кода mirroredJumpStart
- моя копия того, что печатает пользователь. Функция RefreshJumpStart
принимает строковое значение и перебирает все строковые значения в списке и заполняет список, используя AnsiContainsString
.
procedure TS8RibbonJumpStartEdit.KeyPress(Sender: TObject; var Key: Char);
begin
if (Key in ['a'..'z']) or (Key in ['A'..'Z']) or (Key in ['0'..'9']) or (Key = ' ') then
manager.mirroredJumpStart := manager.mirroredJumpStart + Key
else if (Key = Chr(VK_BACK)) and (Length(manager.mirroredJumpStart) <> 0) then
Delete(manager.mirroredJumpStart, Length(manager.mirroredJumpStart), 1);
manager.RefreshJumpStart(manager.mirroredJumpStart);
end;
Любая помощь будет отличной!