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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2015, 13:37   #1
yohohox
 
Регистрация: 21.05.2015
Сообщений: 9
По умолчанию (HotKey) - 1 кнопка, разные действия

Добрый день Товарищи.
Подмогите пожалуйста разобраться.

При первом нажатии на кнопку например "HOME" у нас выводиться одно сообщение, при втором нажатии выводим другое сообщение.

Привожу пример:
Код:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    HotKeyIDStart, HotKeyIDStop: Integer;
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;
	
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyIDStart then
    begin
      ShowMessage('Нажали HOME');
    end;
  if Msg.HotKey = HotKeyIDStop then
    begin
      ShowMessage('Нажали End');
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  HotKeyIDStart := GlobalAddAtom('HotKey1');
  RegisterHotKey(Handle, HotKeyIDStart, 0, VK_HOME);
  
  HotKeyIDStop := GlobalAddAtom('HotKey2');
  RegisterHotKey(Handle, HotKeyIDStop, 0, VK_END);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, HotKeyIDStart);
  GlobalDeleteAtom(HotKeyIDStart);
  
  UnRegisterHotKey(Handle, HotKeyIDStop);
  GlobalDeleteAtom(HotKeyIDStop);
end;
В примере реализованно на 2 клавишах, а нужно на 1.
Как сделать.. непонятно.

Благодарю за внимание.
yohohox вне форума Ответить с цитированием
Старый 16.07.2015, 13:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var SecondClick: Boolean;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyIDStart then
    begin
      if SecondClick then ShowMessage('Нажали HOME 2')  else ShowMessage('Нажали HOME 1');
      SecondClick:=not SecondClick;
    end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.07.2015, 14:24   #3
yohohox
 
Регистрация: 21.05.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
var SecondClick: Boolean;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyIDStart then
    begin
      if SecondClick then ShowMessage('Нажали HOME 2')  else ShowMessage('Нажали HOME 1');
      SecondClick:=not SecondClick;
    end;
end;
Спасибо! Вроде работает, но не совсем так, как хотелось бы
Я видимо неправильный пример привел

Например там не ShowMessage, а вот так:

Код:
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyIDStart then
    begin
      if SecondClick then
        begin
          Windows.Beep(500, 100);
          Form1.Color := clRed;
        end
      else
        begin
          Windows.Beep(1000, 100);
          Form1.Color := clLime;
          SecondClick:=not SecondClick;
        end;
    end;
end;
В таком случае мы нажали 1 раз, 2 раз и все.. дальше ничего происходить не будет.
yohohox вне форума Ответить с цитированием
Старый 16.07.2015, 14:29   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от yohohox Посмотреть сообщение
Спасибо! Вроде работает, но не совсем так, как хотелось бы
Код:
else
        begin
          Windows.Beep(1000, 100);
          Form1.Color := clLime;
          SecondClick:=not SecondClick;
        end;
    end;
end;
В таком случае мы нажали 1 раз, 2 раз и все.. дальше ничего происходить не будет.
SecondClick:=not SecondClick; нужно вынести из условия.

Последний раз редактировалось Iron Monk; 16.07.2015 в 14:32.
Iron Monk вне форума Ответить с цитированием
Старый 16.07.2015, 14:36   #5
yohohox
 
Регистрация: 21.05.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
SecondClick:=not SecondClick; нужно вынести из условия.
Действительно.

Всем большое спасибо!
yohohox вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Действия на разные кнопки sanya839 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.02.2014 18:44
ROBOKASSA. Как произвести действия после оплаты, если не была нажата кнопка "Вернуться в магазин"? Mr_freeman PHP 0 14.12.2012 14:11
Разные пароли на разные диапазоны zenner Microsoft Office Excel 22 27.11.2010 01:25
Разные компиляторы - разные результаты Кипящий чайник Общие вопросы C/C++ 3 16.07.2010 14:54
HotKey Simply-Art Win Api 16 15.08.2008 12:10