Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2009, 07:50   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Зоны действий горячих клавишь

Привет всем! У меня такая проблема. Короче в одном окне есть tActionMenager с целой кучей экшенов. У многих экшенов установлены горячие клавиши, на типа Ctrl+C, Alt+F и т.д. Проблема в том, что в другом окне есть Поле ввода. И вот если там нажать Ctrl+C, то выделенный текст не только не копируется, но и срабатывает событие onExecate у действия в другом окне. Как мне сделать так, что бы горячие клавиши работали бы только в пределах заданого окна?
Altera вне форума Ответить с цитированием
Старый 08.07.2009, 10:32   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

У ActionManager'a есть свойство State, т.е. можно приостанавливать его работу.
Можно сделать так:
Когда фокус переходит к другой форме приостанавливаем ActionManager.
Код:
procedure TForm1.FormDeactivate(Sender: TObject);
begin
  ActionManager1.State := asSuspended;
end;
Когда фокус возвращается - возобновляем:
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
  ActionManager1.State := asNormal;
end;
P.S. Вообще не рекомендуется перекрывать стандартные дейсвия типа: Ctrl+A, Ctrl+С, Ctrl+V и прочие.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Daramant; 08.07.2009 в 10:34.
Daramant вне форума Ответить с цитированием
Старый 08.07.2009, 12:11   #3
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Привет всем! У меня такая проблема. Короче в одном окне есть tActionMenager с целой кучей экшенов. У многих экшенов установлены горячие клавиши, на типа Ctrl+C, Alt+F и т.д. Проблема в том, что в другом окне есть Поле ввода. И вот если там нажать Ctrl+C, то выделенный текст не только не копируется, но и срабатывает событие onExecate у действия в другом окне. Как мне сделать так, что бы горячие клавиши работали бы только в пределах заданого окна?
Вместо мэнэджера руками проверять что было нажато на форме

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

end;

end.


form1.KeyPreview := true;
Lime вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по использованию горячих клавиш и Enter в Delphi Evgenii Общие вопросы Delphi 3 16.06.2009 22:31
Отлов горячих клавиш, Builder C++ 6.0 MsF C++ Builder 2 24.02.2009 11:02
Срочно требуется помощь с привязкой горячих клавиш..... Jinxers Операционные системы общие вопросы 4 08.02.2009 20:09
выполнение нескольких действий??? zzzzz HTML и CSS 2 11.12.2008 11:59
Сравнение попиксельно зоны рабочего стола с указанным *.bmp Travolta Общие вопросы .NET 1 02.12.2008 13:01