Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.04.2017, 21:25
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию WinAPI не обрабатывать нажатия клавиш на форме

Доброго времени суток.
приложение полностью на winapi, Имею пустую форму, которая создается из ресурсов через DialogBox.
обработка нажатий клавиш происходит в отдельном потоке через GetKeyState. Получается такая ситуация, нажатия обрабатываются корректно, но когда нажимаешь несколько кнопок сразу или нажимаешь что-то отличное от стрелок, происходит звук типа неверно нажатой клавиши.
вопрос : как отключить "стандартный" обработчик нажатий, чтоб не "пикало" при нажатиях?
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #2  
Старый 09.04.2017, 13:26
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Например, зарегистрировать свою WndProc и по нажатию кнопок не вызывать стандартный обработчик, а просто выходить?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 09.04.2017, 21:42
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

wndproc есть,
типа отлавливать сообщеньки wm_keydown, keyup , keypress и повесить на них тупо exit. или вообще из wndproc выкинуть в конце defaultwndproc ...
попробую.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #4  
Старый 09.04.2017, 22:00
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

DefWindowProc вызывать по событиям клавы не нужно - это стандартный обработчик. Но если просто выкинуть, то отвалятся вообще все сообщения.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 27.04.2017, 11:56
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от Bargest
Например, зарегистрировать свою WndProc и по нажатию кнопок не вызывать стандартный обработчик, а просто выходить?
Не помогает.

Код:
function MainDlgFunc(hWnd : LongWord; uMsg : LongWord; wParam, lParam : Integer) : LongBOOL; stdcall;
begin
  Result := TRUE;
  case uMsg of
    $0110   : begin
              GetFullScreen(32);
              resize(hwnd);
              GamesThread := TGameThread.Create(hWnd);   // WM_INITDIALOG:
              end;
    $0002,                                                                  // WM_DESTROY
    $0010   : FreeAll;                                                    // WM_CLOSE
    $0111: case wParam of                                            // WM_COMMAND
           101: FreeAll;
           end;
  else
    Result := FALSE;
  end;
end;

begin
DialogBox(hInstance, PChar(RC_FORM), 0, @MainDlgFunc);
end.

Даже дефолтный не вызываю,.. при этом всё работает, но все-равно пикает.
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 27.04.2017 в 11:58.
Ответить с цитированием
  #6  
Старый 27.04.2017, 15:59
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А, так это не просто окно, это DialogBox. Не заметил сразу.
Цитата:
Сообщение от MSDN
Remarks

You should use the dialog box procedure only if you use the dialog box class for the dialog box. This is the default class and is used when no explicit class is specified in the dialog box template. Although the dialog box procedure is similar to a window procedure, it must not call the DefWindowProc function to process unwanted messages. Unwanted messages are processed internally by the dialog box window procedure.
Т.е. судя по МСДН, диалогбоксы сами всегда вызывают DefDlgProc.
Цитата:
Сообщение от MSDN
Typically, the dialog box procedure should return TRUE if it processed the message, and FALSE if it did not. If the dialog box procedure returns FALSE, the dialog manager performs the default dialog operation in response to the message.
То есть, если просто вернуть ТРУ, то стандартный обработчик не вызовется.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 27.04.2017 в 16:03.
Ответить с цитированием
  #7  
Старый 28.04.2017, 14:04
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Если просто вернуть ТРУ, то да, обработчик не вызывается, но она один фиг пикает.
ЗЫ. Я перерыл в обработчике вообще все сообщения, и нет ниодного, которое бы срабатывало при нажатии клавиши. Похоже сабака порылась где-то совершенно в другом месте.
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 28.04.2017 в 14:37.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter