Я использую стандартные действия «Вырезать», «Копировать» и «Вставить» в главном меню. У них есть горячие клавиши Ctrl-X, Ctrl-C и Ctrl-V.
Когда я открываю модальную форму, например FindFilesForm.ShowModal, тогда все ярлыки работают из формы.
Но когда я открываю немодальную форму, например FindFilesForm.Show то ярлыки не работают.
Я бы подумал, что эти действия должны работать, если FindFilesForm является активной формой. Это модальность не должна иметь к этому никакого отношения, или я ошибаюсь в своем мышлении?
Тем не менее, как я могу заставить ярлыки работать с немодальной формой?
После ответа Кэри я продолжил исследование. Это не проблема с некоторыми элементами управления, например TMemo или TEdit.
Но это для некоторых других. В частности, те, где это происходит, включают:
- текст в TComboBox
- текст в TFindDialog
- элемент управления TElTreeInplaceEdit, часть LMD ElPack
Я посмотрю, есть ли другие, и добавлю их в список.
Все они находятся в важных немодальных формах моей программы.
Так что мне все еще нужно решение.
Хорошо. Мне очень нужна помощь с этим. Так что это первый вопрос, за который я назначаю награду.
Мое обсуждение с Кэри, которое происходит через его ответ, и комментарии к нему более подробно описывают мою проблему.
И как я упоминал в одном из этих комментариев, похожая проблема, похоже, обсуждается здесь. / а>
Мне нужно решение или обходной путь, который позволит Ctrl-X, Ctrl-C и Ctrl-V всегда работать в TComboBox и TFindDialog в немодальном окне. Если эти две проблемы будут решены, я уверен, что мой TElTreeInplaceEdit также будет работать.
Как описывает Кэри, настройка простой тестовой программы занимает всего пару минут. Надеюсь, кто-нибудь сможет это решить.
Просто будьте осторожны, потому что, кажется, есть что-то, что позволяет ему работать иногда, но не работать в другое время. Если я смогу выделить это более подробно, я сообщу об этом здесь.
Спасибо за любую помощь, которую вы можете мне предложить.
Mghie очень много работал, чтобы найти решение, и его обработчик OnExecute в сочетании с обработчиком ActionListUpdate сделали свое дело. Поэтому за его усилия я даю ему принятое решение и награды.
Но его обработчик обновления списка действий непростой, и вам нужно указать в нем все случаи, которые вы хотите обработать. Допустим, есть также Ctrl + A для выбора всего или Ctrl-Y для отмены, которую вы, возможно, захотите. Общая процедура была бы лучше.
Так что, если вы столкнетесь с этим вопросом в поисках ответа, попробуйте сначала ответ, который я предоставил, который добавляет обработчик IsShortcut. Он сработал для меня и должен обрабатывать все случаи и не требует обработчиков OnExecute, так что это намного проще. Питер Боул написал этот код, и Уве Молжан получает гонорар со стороны искателей.
Спасибо Кэри, mghie, Уве и Питеру за то, что помогли мне решить эту проблему. Без тебя не справился бы. (Возможно, я мог бы это сделать, но это могло занять у меня 6 месяцев.)