| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Ctrl-V: конфликт между меню и find-диалогом |
| Автор: ilyalyu 25.10.2006, 20:52 |
| Итак, на первый взгляд простая задача: в главном меню на кнопке "Paste" ("Вставить") необходимо указать отвечающую данной операции горячую клавишу, т.е. Ctrl-V. Казалось бы, все просто - достаточно указать горячую клавишу в свойстве ShortCut и написать обработчик события OnClick, который будет выполнять необходимую операцию (вставлять текст из Clipboard в TMemo компоненту). Я так и сделал, и столкнулся с такой проблемой... Оказалось, что я не могу вставить текст в Find диалог с помощью горячей клавиши Ctrl-V. Вместо этого, приложение вызывает обработчик события OnClick, который вставляет текст в TMemo компоненту. Ни одного простого способа обойти эту проблему я так и не нашел. Например: 1. Найти компоненту, заменяющую Find диалог - не удалось, кроме того, такая компонента наверняка будет отличаться по стилю от других диалогов. 2. Написать собственную компоненту - сложно (хотя, похоже, в больших приложениях именно так и делают). 3. Вместо того чтобы использовать свойство ShortCut, рисовать меню, используя событие OnDrawItem - тоже очень сложно, кроме того, где гарантия, что такое меню не будет отличаться по стилю от остальных компонент. 4. Вставлять текст из Clipboard в Find диалог внутри обработчика события OnClick с помощью Windows message WM_Paste - не получилось (в TEdit текст вставляется, а в TFindDialog - нет). Может, я упускаю из вида какое-то простое решение? Ведь, задача, которую я описал, не относится к разряду экзотических. |
| Автор: Seraphim 25.10.2006, 20:57 |
| А может лучше так, не проверенно конечно Вообщем, на твой TEdit поставить событие по нажатию клавишь Ctrl+v и если этот TEdit.Focused:=True; Постлать твою комманду вставки кода. Попробуй так ;) |
| Автор: ilyalyu 25.10.2006, 21:11 |
| Тут вопрос не в том, как вставить текст в TMemo по нажатию Ctrl+V - он туда и так автоматически вставляется. Проблема в том, как простым способом поместить текст Ctrl+V на кнопку меню, и чтоб при этом Find диалог продолжал работать как надо. |
| Автор: Yanis 26.10.2006, 11:01 | ||
| ilyalyu А разве так не проще?
P. S. Ну по крайней мере пользоваться где нужно 3 и 8 строкой. |
| Автор: ilyalyu 26.10.2006, 18:41 | ||
| Yanis, Спасибо за совет. Правда пришлось еще деактивировать форму, чтобы пользователь не мог смотреть меню в то время, когда показывается диалог:
|
| Автор: Yanis 27.10.2006, 10:32 |
| ilyalyu Пожалуйста, но помоему с блокирование формы ты перегнул |
| Автор: ilyalyu 28.10.2006, 21:40 |
| Действительно, можно проверять свойство active. Не могу понять, почему сразу так не сделал. Наверное - заскок... Еще раз спасибо. |