Среда, 18.06.2025, 14:38
Приветствую Вас Гость | RSS
Меню сайта
fff
  • Индексация
  • Девочки
    Форма входа
    Категории раздела
    Теория алгоритмов [3]
    Теория алгоритмов
    Code Snippets [1]
    Code Snippets
    Все о PHP [20]
    Все о PHP
    Visual C++ [13]
    Visual C++
    WIN32 API [7]
    WIN32 API
    Delphi [72]
    Delphi
    ASP [2]
    ASP
    Java [67]
    Java
    VBScript [6]
    VBScript
    CGI [2]
    CGI
    VRML [2]
    VRML
    PERL [9]
    PERL
    HTML [4]
    HTML
    XML [10]
    XML
    Архив записей

    Статьи по Оптимизации

    ПРОГРАММИРОВАНИЕ! СОЗДАНИЕ САЙТОВ И ИХ ОПТИМИЗАЦИЯ

    Главная » Статьи » Программирование » Delphi

    Программируем на Delphi - система сообщений
    Программируем на Delphi - система сообщений
    Что такое сообщение? Это информацтя о некотором изменении в пользовательском интерфейсе, например перемещение окна или нажатие клавиши на клавиатуре. Сообщения также уведомляют программу, что истек заданный отрезок времени. Сообщения используются для операций с совместным использованием данных.

    С точки зрения программиста, сообщение - это целое значение беззнака, которому для простоты чтения назначена символьная константа, начинабщаяся с символов wm_ (Window Message). Например, сообщение wm_lbuttondown говорит программе, что пользователь нажал левую кнопку мыши, wm_lbuttonup говорит, что пользователь отпустил левую кнопку мыши.

    Каждая Windows программа занимается лишь тем, что реагирует на получаемые сообщения. В Delphi операции с сообщениями скрыты глубоко в VCL, причем когда вы назначаете обработчик какого-либо события, на самом деле вы назначаете обработчик соответствующего сообщегия. Естественно, что не все сообщения реализованы в Delphi как события и с этими сообщениями нужно работать самомтоятельно.

    Ссообщение можно представить следующей записью:
    Message = record

    msg : longint; // номер сообщения

    lParam : longint; // информационные

    wParam : longint; // поля

    end;

    В полях lParam и wParam содержится дополнительная информация о происшедшем событии, например, для сообщения wm_lbuttondown в lParam содержатся координаты указателя мыши момент нажатия кнопки мыши, в wParam содержатся сведения были ли нажаты клавиши Ctrl или Shift в момент нажатия кнопки мыши.

    Если вам нужно перехватить сообщение, делайте так:(в качестве примера рассмотрим wm_mousemove)
    Добавьте в список uses модуль messages
    Добавьте в класс формы в раздел public или private такую строчку:
    procedure messageHook(var msg : TMessage); message wm_mousemove;
    В блоке imlementation реализуйте данную процедуру, параметры wParam и lParam лежат в msg.lParam, msg.wParam.
    При перехватывании сообщений нужно соблюдать осторожность, так как своими действиями вы можете нарушить работоспособность вашей программы. Например, выполняя какие-либо действия в зависимости от значения wParam (или lParam) вы тем самым блокируете действия, которые были бы выполнены по умолчанию (если бы вы не перехватили сообщение), поэтому необходимо исполбзовать ключевое слово inherited, чтобы вызывать обработчик сообщений по умолчанию для тех значений праметров, которые ваша процедура не обрабатывает.

    Кстати, вместо записи TMessage вы мжете использовать TWMxxx, где xxx зависит от сообщения (для wm_command, например, - TWMCommand и т.п.)

    Поступающие в программу сообщения выстраиваются в очередь, из которой они извлекаются либо оконной поцедурой, либо вашей процедурой-перехватчиком.

    Программа может не только принимать, но и рассылать сообщения. Это делается с помощью функций SendMessage и PostMessage. PostMessage ставит сообщение в очередь, SendMessage посылает сообщение напрямую, минуя очередь.

    Синтаксис:
    SendMessage(wnd : HWND; msg : longint; lParam,wParam : longint);
    PostMessage(wnd : HWND; msg : longint; lParam,wParam : longint);

    Категория: Delphi | Добавил: Merlin (07.12.2009)
    Просмотров: 441 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *: