Как остановить выделение пользователя и удаление текста в элементе управления редактирования? - PullRequest
1 голос
/ 06 декабря 2011

У меня есть элемент управления для редактирования на ленте 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;

Любая помощь будет отличной!

1 Ответ

0 голосов
/ 06 декабря 2011

Предполагая, что это стандартный элемент управления TEdit ...

  • Вы можете ограничить объем текста, используя свойство MaxLength
  • Вы можете ловить отдельные нажатия клавиш, наблюдая параметр Key в событии OnKeyDown

Просто пара маленьких советов, не уверен, поможет ли это, потому что вы не говорите, что используете TEdit

...