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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2010, 16:52   #1
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию Горячие клавиши в Delphi

Пишу бота. Когда бот начинает управлять мышью не работают горячие клавиши. Горячие клавиши настраивал с помошью TActionBars chortCut.
Пока бот не работает с мышью горячие клавиши работают.
Как прервать работу бота с помошью нажатия комбинации клавиш?!
Может попробовать RegisterHotKey? напишите если несложно как это сделать?
я пробовал писать вот так

Код:
private
    { Private declarations }
    id1: Integer;
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
Код:
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = id1 then
    begin
      {что-то делаем в программе}
      MessageDlg('Работает второй способ)) ',
  mtWarning,[mbOk],0);  //
  Exit;   //
    end
end;
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
id1 := GlobalAddAtom('Hotkey1');
Handle1:=FindWindow('TForm1','Form1'); //0x50304
RegisterHotKey(Handle1, id1, VK_CONTROL, MapVirtualKey(VkKeyScan('y'),0));
end;
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Handle1:=FindWindow('TForm1','Form1'); //0x50304
UnregisterHotKey(Handle1, id1)
end;
Maddy вне форума Ответить с цитированием
Старый 23.04.2010, 16:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

используйте Form1.Handle
а id1 назначьте сами как константу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.04.2010, 17:08   #3
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

ой не удаляется(

Последний раз редактировалось Maddy; 23.04.2010 в 17:11.
Maddy вне форума Ответить с цитированием
Старый 23.04.2010, 17:11   #4
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
используйте Form1.Handle
а id1 назначьте сами как константу.
Исправил код но все равно не работает.

Код:
private
    { Private declarations }
    id1: Integer;
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
...
var...
const id='HotKey1';

Код:
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = id1 then
    begin
      {что-то делаем в программе}
      MessageDlg('Работает второй способ)) ',
  mtWarning,[mbOk],0);  //
  Exit;   //
    end
end;
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle, id1, VK_CONTROL, MapVirtualKey(VkKeyScan('y'),0));
end;
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Form1.Handle, id1)
end;
Maddy вне форума Ответить с цитированием
Старый 23.04.2010, 17:13   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
private
    { Private declarations }
    id1: Integer;
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
...
var...
const id=1;
типы параметров кто смотреть будет?

Код:
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = id then
    begin
      {что-то делаем в программе}
      MessageDlg('Работает второй способ)) ',
  mtWarning,[mbOk],0);  //
  Exit;   //
    end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin;
RegisterHotKey(Handle, id, MOD_CONTROL, MapVirtualKey(VkKeyScan('y'),0));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Handle, id)
end;
***у нас переменная id, а не id1
***зачем лишняя морока, учитывая что окно с такими данными может быть и не одно.
***хоть бы названия констант от этой функции посмотрели
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.04.2010, 17:32   #6
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
procedure TForm1.FormCreate(Sender: TObject);
begin;
RegisterHotKey(Handle, id, MOD_CONTROL, MapVirtualKey(VkKeyScan('y'),0));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Handle, id)
end;[/CODE]
***у нас переменная id, а не id1
***зачем лишняя морока, учитывая что окно с такими данными может быть и не одно.
***хоть бы названия констант от этой функции посмотрели

таперь компилятор ругается на недостаток параметров.
[Error] Pr1.pas(407): Not enough actual parameters

Последний раз редактировалось Maddy; 23.04.2010 в 17:37.
Maddy вне форума Ответить с цитированием
Старый 23.04.2010, 17:39   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

на какую строку ругается то?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.04.2010, 17:43   #8
Maddy
Пользователь
 
Регистрация: 18.01.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
на какую строку ругается то?
Нашел ошибку в строке.
Начал работать но с такой большой задержкой. Нажму комбинацию а он секунд 30 думает и то через раз выдает сообщение. первый способ мнгновенно реагирует. Почему?

Последний раз редактировалось Maddy; 23.04.2010 в 17:46.
Maddy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Горячие клавиши. Lazio Помощь студентам 2 08.09.2010 02:20
Нестандартные горячие клавиши Marsel737 Общие вопросы Delphi 1 27.11.2009 16:32
Горячие клавиши Altera Общие вопросы Delphi 5 13.09.2008 21:27
Горячие клавиши VS 2008 .:KOLYAN:. Свободное общение 2 02.09.2008 14:32