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

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

СКАЧАТЬ произошло с элементом управления;

      • младшие 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;

      Controls.hAppInst:= hInst;

      //Создание элементов управления

      CreateFrame(10, 80, 170, 70, –1, 'Кнопки');

      CreateButton(2 0, 100, 70, 30, 1001, 'Кнопка 1');

      CreateButton(100, 100, 70, 30, 1002,'Кнопка 2');

      CreateFrame(2 00, 10, 200, 180, –1, 'Флажки и переключатели');

      CreateCheck(2 10, 30, 180, 20, 2001, 'Флажок 1');

      CreateCheck(2 10, 60, 180, 20, 2002, 'Флажок 2', True);

      CreateOption(2 10, 100, 180, 20, 3001, 'Переключатель 1', True);

СКАЧАТЬ