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

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

СКАЧАТЬ многострочном'+ #13

      + #10 + 'текстовом поле');

      //Добавление строк в списки

      AddToCombo(4001, 'Строка 1');

      AddToCombo(4001, 'Строка 2');

      AddToCombo(4001, 'Строка 3');

      AddToList(5 001, 'Строка 1');

      AddToList(5 001, 'Строка 2');

      AddToList(5 001, 'Строка 3');

      ShowWindow(hMainWnd, SW_NORMAL);

      //Запуск цикла обработки сообщений

      while (Longint(GetMessage(mess, 0, 0, 0)) <> 0)

      do begin

      TranslateMessage(mess);

      DispatchMessage(mess);

      end;

      end.

      Код листинга 2.21 заодно демонстрирует использование некоторых из приведенных ранее функций работы с элементами управления. Выглядит созданное окно так, как показано на рис. 2.3.

      Рис. 2.3. Окно с элементами управления

      Принцип построения функции обработки сообщений для этого окна описан в листинге 2.22.

Листинг 2.22. Функция обработки сообщений

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

      function WindowFunc(hWnd:HWND; msg:UINT;

      wParam:WPARAM; lParam:LPARAM):LRESULT; stdcall;

      var

      ps: PAINTSTRUCT;

      begin

      case msg of

      WM_PAINT:

      begin

      //Перерисовка содержимого окна

      BeginPaint (hWnd, ps);

      Text Out (ps.hdc, 10, 10, 'Текст в окне', 12);

      EndPaint(hWnd, ps);

      end;

      WM_CLOSE:

      if (hWnd = hMainWnd) then

      PostQuit Message(0); //При закрытии этого окна завершается

      //приложение

      WM_COMMAND:

      begin

      case LOWORD(wParam) of

      //нажата "Кнопка 1"

      1001: if HIWORD(wParam) = BN_CLICKED then;

      //нажата "Кнопка 2"

      1002: if HIWORD(wParam) = BN_CLICKED then;

      //установлен "Флажок 1"

      2001: if HIWORD(wParam) = BN_CLICKED then;

      //установлен "Флажок 2"

      2002: if HIWORD(wParam) = BN_CLICKED then;

      //установлен "Переключатель 1"

      3001: if HIWORD(wParam) = BN_CLICKED then;

      //установлен "Переключатель 2"

      3002: if HIWORD(wParam) = BN_CLICKED then;

      //установлен "Переключатель 3"

      3003: if HIWORD(wParam) = BN_CLICKED then;

      //выделение в ComboBox

      4001: if HIWORD(wParam) = CBN_SELCHANGE then;

      //выделение в ListBox

      5001: if HIWORD(wParam) = LBN_SELCHANGE then;

      //изменен текст в Edit

      6001: if HIWORD(wParam) = EN_CHANGE then;

      //изменен текст в Memo

      6002: if HIWORD(wParam) = EN_CHANGE then;

      end;

      end;

      else

      begin

      //Обработка по умолчанию

      WindowFunc:= DefWindowProc(hWnd, msg, wParam, lParam);

      Exit;

      end;

      end;

      WindowFunc:= S_OK; //Сообщение обработано

      end;

      Приведенная в листинге 2.22 функция не претендует на то, чтобы быть эталоном в порядке классификации сообщений от элементов управления. Иногда бывает полезно сразу классифицировать сообщения не по элементам управления, которые их прислали, а по типу самих сообщений. К тому же в ряде случаев можно предусмотреть один обработчик сообщений сразу для нескольких элементов управления, например, для группы переключателей. В таком случае полезным окажется параметр lParam сообщения СКАЧАТЬ