VCL разработан, чтобы дать приоритет ярлыкам пунктов меню. Однако вы можете написать свой обработчик щелчка элемента (или обработчик выполнения действия), чтобы выполнить некоторую специальную обработку, когда ActiveControl имеет значение TCustomEdit (вызов отменен и т. Д.)
Редактировать: Я понимаю, что вам не нравится обрабатывать все возможные особые случаи во многих местах вашего кода (все пункты меню или обработчики действий). Боюсь, я не могу дать вам полностью удовлетворительный ответ, но, возможно, это поможет вам найти более общее решение. Попробуйте следующий обработчик события OnShortCut в вашей форме:
procedure TMyForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var
Message: TMessage absolute Msg;
Shift: TShiftState;
begin
Handled := False;
if ActiveControl is TCustomEdit then
begin
Shift := KeyDataToShiftState(Msg.KeyData);
// add more cases if needed
Handled := (Shift = [ssCtrl]) and (Msg.CharCode in [Ord('C'), Ord('X'), Ord('V'), Ord('Z')]);
if Handled then
TCustomEdit(ActiveControl).DefaultHandler(Message);
end
else if ActiveControl is ... then ... // add more cases as needed
end;
Вы также можете переопределить метод IsShortCut аналогичным образом и извлечь формы вашего проекта из этого нового потомка TCustomForm.