рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Обработка сообщений от клавиатуры, часто используемые сообщения.

Обработка сообщений от клавиатуры, часто используемые сообщения. - раздел Образование, Общая характеристика языка Си в сравнении с другими процедурными языками Существует Несколько Способов Обработки Сообщений От Клавиатуры, Каждый Метод...

Существует несколько способов обработки сообщений от клавиатуры, каждый метод пригоден для той или иной ситуации. Рассмотрим самые основные и распространенные методы обработки сообщений клавиатуры.

 

1. Обработка сообщений клавиатуры, посылаемых вашему приложению.

Применяется когда, нужно обрабатывать сообщения клавиатуры и фокус ввода у вашего приложения. Есть несколько способов, рассмотрим два из них.

Первый способ реализуется довольно просто: у формы устанавливаем свойство keypreview в true и обрабатываем событие onkeypress. К примеру, так:

 

procedure tform1.formkeypress(sender: tobject; var key: char);

begin

if key = '1' then beep; //если нажата клавиша 1 выдать звук в системный динамик

end;

 

Примечание: не всегда звук будет выдаваться в системный динамик, иногда он выдается в колонки.

 

Второй вариант, перехват события onmessage объекта application:

Для начала создадим и пропишем свой обработчик перехватываемых событий:

 

private

//процедура для перехвата событий onmessage обьекта application

procedure appmessage(var msg: tmsg; var handled: boolean);

 

 

procedure tform1.appmessage(var msg: tmsg; var handled: boolean);

begin

end;

 

При запуске приложения (событие формы oncreate) передаем обработку события onmessage, нашей процедуре:

 

procedure tform1.formcreate(sender: tobject);

begin

application.onmessage := appmessage;

end;

 

Теперь при возникновении любого события onmessage, мы сможем его перехватить и обработать в процедуре appmessage:

 

appmessage(

var msg: tmsg; //посылаемое сообщение

var handled: boolean //определяет будет ли событие доходить до компонента

//если handled = true событие до компонента не дойдет

);

 

Примечание: под фразами «дойдет/не дайдет до компонента» подразумевается, то, что когда windows посылает сообщение нашей программе, его должен принять тот компонент, у которого в данный момент фокус ввода. Если мы поставим handled = true, то компонент, которому предназначалось это событие, его не получит.

 

Остается лишь написать обработчик:

 

procedure tform1.appmessage(var msg: tmsg; var handled: boolean);

begin

if msg.message = wm_keydown //если нажата кнопка (кнопка удерживается), то

then begin

memo1.lines.add(char(msg.wparam)); //добавляем в memo нажатую клавишу

handled := false; //сообщение дальше этого обработчика ПОЙДЕТ

end;

end;

 

wm_keydown – событие возникает в момент нажатия и удержания кнопки. Так же можно применить:

wm_keyup - событие возникает в момент отпускания кнопки, wm_keyfirst и др.

 

 

2. Регистрация в системе «горячих» клавиш (hotkey).

 

Применяется тогда, когда нужно реагировать на нажатие, какой-либо клавиши (комбинации клавиш), в не зависимости от того у какого приложении

я в данный момент фокус ввода. Этот способ применяют для небольшого кол-ва клавиш, на которые должно реагировать ваше приложение. Для реализации этого метода в системе регистрируется «горячая» клавиша, после чего система будет посылать сообщение приложению, каждый раз, как будет нажата зарегистрированная клавиша. Регистрация клавиши происходит функцией registerhotkey

 

function registerhotkey(

hwnd: hwnd; // окно, которому посылается сообщение с «горячей» клавишей

id: integer; // идентификатор "горячей" клавиши

fsmodifiers, // флажки модификации клавиш

vk: uint // код виртуальной клавиши

): bool;

 

 

fsmodifiers может быть комбинацией следующих значений:

mod_alt - Любая клавиша alt должна удерживаться нажатой.

mod_control - Любая клавиша ctrl должна удерживаться нажатой.

mod_shift - Любая клавиша shift должна удерживаться нажатой

mod_win - Любая клавиша windows удерживалась нажатой.

 

Примечание: в параметре fsmodifiers, приведенные выше клавиши можно комбинировать обыкновенным сложением либо оператором or. К примеру: mod_alt or mod_control или mod_alt + mod_control.

 

Освобождение «горячей» клавиши выполняется функцией unregisterhotkey

 

function unregisterhotkey(

hwnd: hwnd; // окно, которому посылается сообщение с «горячей» клавишей

id: integer // идентификатор "горячей" клавиши

): bool;

 

посылаемое сообщение программе при нажатии «горячей» клавиши: wm_hotkey

 

twmhotkey = packed record

msg: cardinal;

hotkey: longint; // код виртуальной клавиши

unused: longint; // в младшем бите содержаться флажки модификаторы клавиш

// (описаны выше: параметр fsmodifiers функции registerhotkey)

//в старшем бите содержится код виртуальной клавиши

result: longint; //возвращает ноль в случае успеха

end;

 

Рассмотрим это на примере.

Создадим новый проект и поместим на форму memo, после чего надо создать и прописать принимаемое нами сообщение:

 

private

procedure wmhotkey(var msg: twmhotkey); message wm_hotkey;

 

 

procedure tform1.wmhotkey(var msg: twmhotkey);

begin

end;

 

Создадим «горячую клавишу» объявив ее в глобальных константах:

 

const

hotkey1 = ord('r');

 

 

21.Органы управления: кнопки, флажки, переключатели. Групповая рамка. Статический орган управления для вывода текста.

Статический орган управления - это окно, создаваемое на базе предопределенного класса "static". Строго говоря, статический орган управления нельзя использовать для управления работой приложения, так как он не воспринимает щелчки мыши и не способен обрабатывать сообщения от клавиатуры. Статический орган управления не посылает родительскому окну сообщение WM_COMMAND.

 

Когда курсор мыши перемещается над статическим органом управления, Windows посылает функции окна этого органа сообщение WM_NCHITTEST. В ответ на это сообщение статический орган возвращает Windows значение HTTRANSPARENT. В результате Windows посылает сообщение WM_NCHITTEST родительскому окну, лежащему под органом управления. В результате все сообщения от мыши попадают через "прозрачное" окно статического органа управления в родительское окно.

 

Зачем же нужен такой орган управления, который ничем не управляет?

 

Обычно этот орган управления используется для оформления внешнего вида диалоговых панелей или окон приложения. Задавая различные стили, вы можете создать статический орган управления в виде закрашенного или незакрашенного прямоугольника, а также строки текста. Статические органы управления могут использоваться внутри диалоговых панелей для отображения пиктограмм.

Создание статического органа управления

 

Для создания статического органа управления вы должны использовать функцию CreateWindow. В качестве первого параметра этой функции следует указать класс окна "static":

HWND hStatic;

hStatic = CreateWindow("static", NULL,

WS_CHILD | WS_VISIBLE | SS_BLACKFRAME,

20, 40, 100, 50,

hWnd, (HMENU)-1, hInstance, NULL);

 

Второй параметр определяет текст, который будет расположен внутри органа управления. Вы можете указать этот параметр как NULL, если текст не используется.

 

В третьем параметре следует указать один из стилей статического органа управления. В нашем примере указан стиль SS_BLACKFRAME.

 

Так как статический орган управления не посылает сообщения родительскому окну, в качестве девятого параметра (идентификатор органа управления) можно указать любое число, например, 1.

 

– Конец работы –

Эта тема принадлежит разделу:

Общая характеристика языка Си в сравнении с другими процедурными языками

Операции языка Си... Любое выражение языка состоит из операндов переменных констант и др соединенных знаками операций Знак операции...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Обработка сообщений от клавиатуры, часто используемые сообщения.

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Общая характеристика языка Си в сравнении с другими процедурными языками.
Общая характеристика языка программирования Си. Алфавит языка. Понятие переменной и константы в языке программирования Си, их типы. Примеры. Язык программирования Си был разработан в 1972 году сотр

Основные типы данных, переменные и константы. Препроцессор языка Си.
  В алфавит языка программирования Си включаются латинские буквы (прописные и строчные), цифры и некоторые специальные знаки: скобки круглые “(“ и “)” , квадратные “[“ и “]” , фигурны

Ввод-вывод чисел, символов и строк на консоль. Переключение ввода-вывода, работа с файлами.
Под функциями ввода-вывода подразумеваются функции, которые выполняют транспортировку данных в программу и из нее. Мы уже использовали две такие функции: printf( ) и scanf( ). Теперь рассмотрим нес

Циклы и другие управляющие средства.
Цикл с предусловием   Существует три вида циклов: while, for и do. Цикл while имеет следующую форму: while (e) s;   Оператор s выполняется до

Строковые константы, массивы символьных строк и их инициализация. Указатели и строки, ввод-вывод и обработка строк.
В языке C, в отличие от языка Pascal, отсутствует специальный строковый тип данных. Строка представляет собой последовательность (одномерный массив) из одного или более символов, последним из котор

Определение структурных переменных. Доступ к компонентам структуры.
Структура объединяет логически связанные данные разных типов. Структурный тип данных определяется следующим описанием:   struct имя_структуры {   Описа

Объединения и перечисления. Указатели и структуры. Массив структур.
Объединения   Объединение описывает переменную, которая может иметь любой тип из некоторого множества типов.   Определение объединенного типа данных ан

Стандартные библиотечные функции языка Си, функция генерации случайных чисел.
Библиотека языка Си содержит множество функций и макроопределений. Библиотеки меняются от системы к системе, но есть ядро функций (стандартная библиотека).   Эти функции испо

Динамические структуры данных (стек, список, дерево, граф).
  Стек (англ. stack — стопка) — структура данных с методом доступа к элементам LIFO (англ. Last In — First Out, «последним пришел — первым вышел»). Чаще всего принцип работы стека сра

Графический интерфейс пользователя (GUI). Типы данных Win32.
Графи́ческий интерфе́йс по́льзователя (ГИП), графический пользовательский интерфейс (ГПИ) (англ. Graphical user interface, GUI; сленг. ГУИ или Гуй) — разновидность пользовательского

Однострочное и многострочное поле для ввода текста.
Можно создавать одну или несколько строк текста, каждая из которых является отдельным объектом. Строки можно по отдельности перемещать, форматировать или редактировать иным образом.  

Создание процесса, создание потока, рабочие функции потока, обмен сообщениями между процессами и потоками.
Функция CreateThread создает для процесса новый поток. Созданный поток должен определить начальный адрес кода, с которого новый поток должен исполняться. Как правило, начальный адрес - это название

Графический интерфейс устройства (CDI). Контекст устройства. Регионы и отсечение.
Графический интерфейс пользователя (Graphical User Interface, GUI) это система средств для взаимодействия пользователя с устройством, основанная на представлении всех доступных пользователю системн

Режимы многозадачности, многопоточная архитектура, преимущества Windows.
Многозадачность (multitasking) - это способность операционной системы выполнять несколько программ одновременно. В основе этого принципа лежит использование операционной системой аппаратного таймер

Базовый алгоритм численного интегрирования методом прямоугольников.
Задача численного интегрирования состоит в замене исходной подинтегральной функции f(x), для которой трудно или невозможно записать первообразную в аналитике, некоторой аппроксимирующей функцией &#

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги