Чтобы увидеть, как именно происходит этот процесс, можно модифицировать функцию KeyMouse_OnMouseMove, чтобы выводимый текст изменял цвет в зависимости от того, какие клавиши нажимаются. Модифицированная функция KeyMouse_OnMouseMove способна реально продемонстрировать всю мощь, присущую системе сообщений Windows. Строчка, ассоциированная с WM_MOUSEMOVE, плавно изменяет цвета при нажатии клавиш Control и Shift. В процессе модификации функции KeyMouse_OnMouseMove я ввел вызовы SetTextColor и RGB. Эти два вызова постоянно используются в Windows-программах.
Макрос RGB возвращает 4-байтное значение, определяющее цвет. Возвращаемый цвет определяется тремя параметрами, передаваемыми в макрос, каждый из которых может принимать значение от 0 до 255.
Если третий параметр устанавливается равным 255, а остальные нулю, результирующий цвет будет темно-синим. Если первый параметр равен 255, а остальные нулю, то цвет будет красным. Средний параметр управляет интенсивностью зеленого в цвете, возвращаемом макросом RGB.
Функция SetTextColor легче для понимания, нежели макрос RGB, поскольку он устанавливает цвет текста, который выводится в передаваемый ей контекст устройства. Иначе говоря, она "копирует" результат функции RGB в контекст устройства.
Рассмотрим, как происходит нажатие кнопок мыши. Программа KeyMouse использует функции KeyMouse_OnLButtonDown и КеуMouse_OnLButtoftUp для записи случаев нажатия кнопки. Работа этих функций очень похожа на работу всех остальных программ. Легче понять, что происходит, когда кнопку отпускают, нежели когда ее нажимают. Поэтому начнем с функции KeyMouse_OnLButtonUp. Обработка нажатий кнопок немного сложнее, поскольку необходимо отличать одинарные щелчки от двойных. К счастью, для этого в Windows предусмотрена относительно простая система.
Если необходимо обрабатывать двойные щелчки левой или правой кнопками мыши, то надо начать с установки стиля окна в CS_DBLCLKS. Это делается в методе Register.
Сообщение, посылаемое при двойном щелчке левой кнопкой мыши, называется WM_LBUTTONDBLCLK, но соответствующий взломщик сообщения из WINDOWSX направляет эту информацию в ту же функцию, которая обрабатывает сообщения WM LBUTTONDOWN.
Завладев контекстом устройства, функция проверяет, был ли сделан двойной щелчок или одинарный. В первом случае параметр fDoubleClick будет равен TRUE. При этом функция печатает строку, сигнализирующую, что было послано сообщение WM_LBUT TONDBLCLK. Кроме того, функция информирует пользователя о текущем состоянии координат и об установках флажков. Разумеется, если двойного щелчка не было, пользователь извещается о сообщения WM_LBUTTONDOWN. Тогда функция отображает текущее состояние всех параметров, включая координаты мыши в момент нажатия левой кнопки. Windows гарантирует, что программе посылается достаточно информации об ее окружении. Программист должен научить программу отвечать на эти сообщения.
Для работы с программой в среде DELPHI необходимо:
1) Вызвать DELPHI;
2) В главном меню выбрать опцию FILE;
3) В подменю выбрать опцию New Application;
4) В главном меню выбрать опцию Viev;
5) В подменю выбрать опцию Project Manager;
6) Закрыть все, не сохраняя ничего;
7) В главном меню выбрать опцию Viev;
8) В подменю выбрать опцию Project Source;
9) Отредактировать появившуюся в окне программу;
10) Имя программы и имя проекта должны совпадать.
program Window1;
{ Базовый код, для расширения меняется только оконная функция}
uses
Windows, Messages;
const
AppName = 'First';
{****** Оконная функция *******}
function WindowProc(Window: HWnd; AMessage, WParam,
LParam: Longint): Longint; stdcall; export;
{------ Назначение: обработка сообщений, приходящих в окно -------}
{ В программе обрабатывается только сообщение завершения работы}
begin
WindowProc := 0;
case AMessage of
wm_Destroy: begin
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.