Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.

Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 22

Название: Delphi. Трюки и эффекты

Автор: Александр Чиртик

Издательство:

Жанр: Программы

Серия:

isbn: 978-5-911-80219-6

isbn:

СКАЧАТЬ окну посылается сообщение WM_COMMAND.

      Примечание

      Сообщение WM_COMMAND приходит также при перерисовке так называемых «самоперерисовывающихся» (Owner Dr aw) элементов управления. Однако ввиду специфики данного вопроса и ограниченности объема г лавы мы его рассматривать не будем.

      Итак, когда родительское окно получает сообщение WM_COMMAND, то из двух прилагающихся параметров (lParam и wParam) можно извлечь следующие сведения:

      • старшие 16 бит wParam представляют собой целочисленный код уведомления, позволяющий определить, что же именно произошло с элементом управления;

      • младшие 16 бит wParam представляют собой идентификатор элемента управления, состояние которого изменилось (именно этот идентификатор мы передавали вместо дескриптора меню при создании элементов управления);

      • lParam содержит дескриптор (HWND) окна элемента управления, состояние которого изменилось.

      Для выделения старших 16 бит из 32-битного значения можно использовать функцию HiWord. Для получения младших 16 бит можно использовать функцию с именем LoWord. Обе они объявлены в модуле Windows.

      В качестве примеров можно привести следующие коды уведомлений:

      • BN_CLICKED – нажата кнопка;

      • EN_CHANGE – изменен текст в текстовом поле;

      • LBN_SELCHANGE – изменилось выделение в списке;

      • CBN_SELCHANGE – изменилось выделение в раскрывающемся списке.

      Эти и все остальные константы уведомлений стандартных элементов управления объявлены в модуле Messages.

      Примечание

      Коды уведомлений рассматриваемых в этой г лаве элементов управления приводятся в приложении 3.

      Пример приложения

      Рассмотрим небольшой пример, иллюстрирующий принцип работы с элементами управления, помещенными на форму описанным ранее способом. Проект этого приложения называется ControlsDemo.

      Не будем заострять внимание на регистрации класса главного окна приложения, так как она аналогична приведенной в листинге 2.4. Рассмотрим создание окна с элементами управления в нем (листинг 2.21).

Листинг 2.21. Создание главного окна приложения (с элементами управления)

      program ControlsDemo;

      uses

      Windows, Messages,

      Controls in 'Controls.pas';

      {$R *.res}

      var

      hMainWnd: HWND;

      hInst: Cardinal;

      mess: MSG;

      //Функция обработки сообщений

      …

      //Создание окна и цикла обработки сообщений

      begin

      hInst := GetModuleHandle(nil);

      //Регистрация и создание главного окна

      if not RegisterWindow() then Exit;

      hMainWnd := CreateWindow(

      'MyWindowClass', //Имя класса окна

      'Главное окно', //Заголовок окна

      WS_OVERLAPPEDWINDOW,

      CW_USEDEFAULT, //Координата X по умолчанию

      CW_USEDEFAULT, //Координата Y по умолчанию

      CW_USEDEFAULT, //Ширина по умолчанию

      CW_USEDEFAULT, //Высота по умолчанию

      HWND(nil), //Нет родительского окна

      HMENU(nil), //Нет меню

      hInst,

      nil);

      if (hMainWnd = HWND(nil)) then Exit;

      //Инициализация модуля Controls для работы с главным окном

      Controls.hParentWnd := hMainWnd;

СКАЧАТЬ