Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо