![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TMainMenu ShortCut
Aragorn © (2007-11-07 10:18:00)Допустим есть форма с множеством компонентов ввода, есть пункт меню 'Copy' с горячей клавишей Ctrl+C. Для некоторых компонентов написан обработчик Ctrl+C.
Как сделать чтобы остальные компоненты ввода использовали свои обработчики Ctrl+C ?
Aragorn (2007-11-07 23:05:00) [1]
> И что это за обработчик?
Например, для Ctrl+F есть для некоторых компонент мои обработчики, а есть родные, используемые мной. А для Ctrl+C мне просто надо указать горячую клавишу и писать для каждого нет никакого желания.
Perform(WM_COPY, 0, 0) здесь решает.
Спасибо.
Leonid Troyanovsky (2007-11-07 19:39:00) [2]
> Aragorn © (07.11.07 10:18)
> пункт меню 'Copy' с горячей клавишей Ctrl+C. Для некоторых
> компонентов написан обработчик Ctrl+C.
И что это за обработчик?
> Упростим задачу:
> Edit1: TEdit;
Из обработчика меню делай активному Edit Perform(WM_COPY, 0, 0)
--
Regards, LVT.
Aragorn (2007-11-07 18:20:00) [3]
> Юрий Зотов © (07.11.07 11:29) [5]
Упростим задачу:
Edit1: TEdit;
miCopy: TMenuItem; // c ShortCut Ctrl+C (Ну нужно чтобы здесь отображался этот ShortCut)
При нажатии Ctrl+С на TEdit1 нужно чтобы он сам это отрабатывал, что он собственно отлично делает без перехвата ShortCut'ом. Писать Edit1.CopyToClipboard (то что у Вас предложено в CopyMenuItem.Click;) практически невозможно, потому что много компонентов различных типов, и у всех типов методы копирования в буфер различны.
Dennis I. Komarov (2007-11-07 11:34:00) [4]Ctrl + C - это зарезервированныя сочетание для копирование. Нужно использовать другое сочетание для операции. Это ИМХО :)
Юрий Зотов (2007-11-07 11:29:00) [5]> Aragorn © (07.11.07 11:19) [4]
В execute что-то типа этого:
WinControl := компонент, на котором фокус;
if WinControl нужный компонент then
WinControl.KewDown(...)
else
CopyMenuItem.Click;
Aragorn (2007-11-07 11:19:00) [6]Ок, повесил на Action.
В execute проверяю если фокус на нужных мне компонентах - вызываю свой обработчик. А если нет? Мне надо чтобы эти компоненты отработали свои действия по этим горячим клавишам. Писать сюда же их же вызовы для этих горячих клавиш нереально - слишком много компонентов.
Я мог бы просто ловить это Ctrl+C прямо на компоненте, для которых написаны мои обработчики. Но нужно меню, с написанной горячей клавишей (напр. Copy Сtrl+С). А оно перехватывает это Ctrl+C и остальным компонентам не дает выполнить свои действия.
Юрий Зотов (2007-11-07 11:01:00) [7]Повесить Ctrl+C на Action и в Execute проверять, где фокус?
Aragorn (2007-11-07 10:54:00) [8]inherited чего? нажатия на пункт меню?
Sonia (2007-11-07 10:35:00) [9]inherited