2012-04-24 4 views
10

Ctrl+Backspace ярлык клавиатуры обычно удаляет слово слева от каретки. Но он не работает ни в одном из стандартных элементов управления Delphi, которые вы ожидаете (TEdit, TMemo, TComboBox ect.). Интересно, что Ctrl+Delete работает просто отлично.Ctrl + Backspace в элементах управления Delphi

Кто-нибудь знает, как правильно исправить это поведение?

Я знаю, что переопределение процедуры KeyDown сделало бы это, но это довольно сложно, так как KeyDown должен быть переопределен для каждого компонента.

+0

Это не проблема, связанная с Delphi. Действительно, «TEdit» и другие элементы управления являются просто оболочками для собственных элементов управления Microsoft Windows, и они ведут себя так. Попробуйте, например, окно редактирования в диалоговом окне «Выбрать шрифт» в блокноте. Однако отредактируйте элементы управления с включенным автозавершением, примите горячую клавишу Ctrl + Backspace. –

+3

Как Реймонд ['said'] (http://blogs.msdn.com/b/oldnewthing/archive/2007/10/11/5395501.aspx). – TLama

+0

Интересно, я этого не знал. Но это все еще немного раздражает, потому что ярлык работает во многих местах, включая даже программное обеспечение MS. – oxo

ответ

17

Это не проблема, связанная с Delphi. Действительно, TEdit, а остальные элементы управления являются только оболочками для собственных элементов управления Microsoft Windows, и они ведут себя так. Попробуйте, например, окно редактирования в диалоговом окне «Выбрать шрифт» в блокноте. Однако отредактируйте элементы управления с включенным автозавершением, примите горячую клавишу Ctrl + Backspace. Я думаю, что вы можете позволить это легко

SHAutoComplete(Edit1.Handle, 
    SHACF_AUTOAPPEND_FORCE_OFF or SHACF_AUTOSUGGEST_FORCE_OFF) 

(использует ShLwApi).

+0

+1, я писал комментарий, чтобы вы меняли флаг с 'SHACF_DEFAULT = 0', вы были быстрее. Это самый простой способ реализовать эту функцию. – TLama

+0

@TLama: Да, фактическое автозаполнение, вероятно, не то, что хочет OP ... Тем не менее, мне интересно, нет ли лучшего способа сделать это. В конце концов, нет смысла включать «отключенное автозаполнение» для того, чтобы получить горячую клавишу Ctrl + Backspace для работы ... –

+0

Возможно, также следует добавить флаг 'SHACF_FILESYS_ONLY', а не потому, что это имеет смысл, а потому, что документация явно говорит: «Этот флаг должен использоваться в сочетании с одним или несколькими флагами SHACF_FILESYS * или SHACF_URL *». ссылаясь на флагов, которые я использую выше. –

Смежные вопросы