2012-04-24 13 views
10

la scorciatoia da tastiera Ctrl+Backspace normalmente cancella la parola a sinistra dal cursore. Ma non funziona in nessuno dei controlli Delphi standard che ci si aspetterebbe (TEdit, TMemo, TComboBox ecc.). È interessante notare che, Ctrl+Delete funziona bene.Ctrl + Backspace in Delphi Controls

Qualcuno sa come correggere facilmente questo comportamento?

So che ignorare la procedura KeyDown lo farebbe, ma questo è un po 'troppo complicato come KeyDown deve essere sovrascritto per ogni componente.

+0

Questo non è un problema specifico di Delphi. Infatti, 'TEdit' e gli altri controlli sono semplicemente wrapper per i controlli nativi di Microsoft Windows e si comportano in questo modo. Prova, ad esempio, la casella di modifica nella finestra di dialogo "Seleziona carattere" del Blocco note. Modifica i comandi con il completamento automatico abilitato, tuttavia, accetta i tasti di scelta rapida Ctrl + Backspace. –

+3

Come Raymond ['said'] (http://blogs.msdn.com/b/oldnewthing/archive/2007/10/11/5395501.aspx). – TLama

+0

Interessante, non lo sapevo. Ma è ancora un po 'fastidioso perché la scorciatoia funziona in così tanti posti, incluso persino il software MS. – oxo

risposta

17

Questo non è un problema specifico di Delphi. Infatti, TEdit e gli altri controlli sono semplicemente wrapper per i controlli nativi di Microsoft Windows e si comportano in questo modo. Prova, ad esempio, la casella di modifica nella finestra di dialogo "Seleziona carattere" del Blocco note. Modifica i comandi con il completamento automatico abilitato, tuttavia, accetta i tasti di scelta rapida Ctrl + Backspace. Penso che si può attivare questa facilmente

SHAutoComplete(Edit1.Handle, 
    SHACF_AUTOAPPEND_FORCE_OFF or SHACF_AUTOSUGGEST_FORCE_OFF) 

(usa ShLwApi).

+0

+1, stavo scrivendo un commento per cambiare la bandiera da 'SHACF_DEFAULT = 0', eri più veloce. È il modo più semplice per implementare questa funzione. – TLama

+0

@TLama: Sì, il vero completamento automatico non è probabilmente quello che l'OP vuole ... Tuttavia, mi chiedo se non c'è un modo migliore per farlo. Dopo tutto, ha poco senso abilitare il "completamento automatico disabilitato" per far funzionare il tasto rapido Ctrl + Backspace ... –

+0

Probabilmente si dovrebbe anche aggiungere il flag "SHACF_FILESYS_ONLY", non perché abbia senso, ma perché la documentazione esplicitamente dice "Questo flag deve essere usato in combinazione con uno o più dei flag SHACF_FILESYS * o SHACF_URL *." riferendosi alle bandiere che uso sopra. –

Problemi correlati