Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Двойной щелчок мышью: два WM_LBUTTONUP при одном WM_LBUTTONDOWN - как так?

7.4K
30 июля 2011 года
malor
69 / / 20.01.2007
Делая двойной щелчок в клиентской зоне я проверял какие приходят Message.Msg и получалось что одно WM_LBUTTONDOWN и два WM_LBUTTONUP. Почему?
Код:
implementation

{$R *.dfm}

var countClick :Word;
    Description: Word;

procedure TForm1.Wndproc(var Message: TMessage);
begin

  case Message.Msg of

    WM_LBUTTONDOWN, WM_LBUTTONUP:
    begin
      countClick := countClick + 1;

      Description := Message.Msg;

    end;

  else
    inherited;
  end;

end;
278
30 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Читайте про механизм двойного щелчка. Двойной щелчок (с точки зрения системы) есть две быстро сменяющие друг друга пары WM_LBUTTONDOWN - WM_LBUTTONUP. Поэтому последовательность сообщений, которые приходят вашему окну, следующая:
1. WM_LBUTTONDOWN, который вы ловите.
2. WM_LBUTTONUP, который вы также ловите.
3. Должен был бы прийти второй WM_LBUTTONDOWN, но, поскольку он приходит сразу после предыдущего, он трансформируется системой в WM_LBUTTONDBLCLK, который НЕ обрабатывается вашей оконной процедурой, потому вы его и не видите.
4. WM_LBUTTONUP, который никто не отменял после второго щелчка.
Вот и все.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог