2012-04-24 7 views
10

Ctrl+Backspaceキーボードショートカットは通常、キャレットから左にある単語を削除します。しかし、あなたが期待する標準的なDelphiコントロールのいずれにおいても機能しません(TEditTMemoTComboBoxなど)。興味深いことに、Ctrl+Deleteはうまく動作します。DelphiコントロールのCtrl + Backspace

誰もこの動作を簡単に修正する方法を知っていますか?

KeyDownプロシージャをオーバーライドするとわかりますが、これはすべてのコンポーネントでオーバーライドする必要があるので、あまりにも複雑すぎます。KeyDown

+0

これはDelphi固有の問題ではありません。実際、「TEdit」とその他のコントロールは、ネイティブのMicrosoft Windowsコントロールのラッパーに過ぎず、このように動作します。たとえば、メモ帳の[フォントの選択]ダイアログで編集ボックスを試してください。ただし、自動補完を有効にしてコントロールを編集するには、Ctrl + Backspaceホットキーを受け入れます。 –

+3

Raymond ['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 *フラグの1つまたは複数と組み合わせて使用​​する必要があります」と述べています。上記のフラグを参照してください。 –

関連する問題