Новые книги

В книге изложены технологии структурного программирования, объектно-ориентированного проектирования, визуального программирования, технология, основанная на абстракции данных Дейкстеры. Рассмотрено использование средств автоматизации проведения программных разработок.

Второе издание (1-е — 2005 г.) дополнено главами по структуре данных и основам инженерии создания программ.

Для студентов вузов, обучающихся по направлению «Информатика».
Перед вами пошаговая инструкция для собственников бизнеса, которые хотят увеличить свои продажи в Интернете, а также для специалистов, занимающихся управлением проектов по созданию веб-сайта компании. Книга позволит читателям, не имея специальных знаний, создать очередь клиентов на своем интернет-сайте. Ее структура повторяет алгоритм, по которому авторы создают успешные интернет-проекты – продающие, посещаемые и наполненные качественной информацией. Если последовательно проработать информацию из каждой главы, как советуют авторы, можно увеличить прибыль своего бизнеса в несколько раз! К книге прилагается бесплатный видеокурс, состоящий из 6 уроков по основным аспектам издания. Посмотреть курс можно по ссылке, размещенной на обложке и в конце книги. Также в качестве подарка каждому читателю предоставляется скидка на хостинг и продвижение сайта от партнеров.

Вопрос и Ответ 36



Вопросы и Ответы


      36. Каким образом работать с иконками расположенными в панели задач Win'95?

      Функция работы с, так называемыми, нотификационными иконками, которые находятся в правой части панели задач Windows'95, определена в модуле ShellAPI:

      function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL;

      В зависимости от переданного сообщения в параметре dwMessage, эта функция может добавлять, модифицировать или удалять иконки, данные о которых передаются в параметре lpData. Поддерживаются три сообщения:

      Сообщение

      Описание

      NIM_ADD Добавить иконку в панель задач.
      NIM_MODIFY Изменить параметры иконки в панели задач.
      NIM_DELETE Удалить иконку из панели задач.

      Для работы с нотификационными иконками необходимо правильно заполнить поля данных, которые содержатся в структуре TNotifyIconData:

      Поле

      Тип

      Описание

      cbSize

      DWORD

      Размер передаваемой структуры.

      Wnd

      HWND

      Указатель на главное окно программы.

      uID

      UINT

      Идентификатор иконки.

      uFlags

      UINT

      Устанавливаемые флаги:

      Флаг

      Назначение

      NIF_MESSAGE

      Посылать сообщение при щелчке мыши.

      NIF_ICON

      Отображать иконку в панели задач.

      NIF_TIP

      Показывать подсказку (Hint).

      uCallbackMessage

      UINT

      Номер сообщения посылаемого иконкой при щелчке на ней мышью.

      hIcon

      HICON

      Указатель на используемую иконку.

      szTip

      array [0..63] of WideChar

      Подсказка (Hint).

      Пример:

      ............

      uses ShellAPI;

      var NID :TNotifyIconData;

      ............

      {Добавление}
      procedure TForm1.bAddClick(Sender: TObject);
      begin

        {Установка необходимых значений в поля структуры TNotifyIconData}
        WITH NID DO BEGIN

          uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
          cbSize := SizeOf(NID);
          uID := 123;
          Wnd := Handle;
          szTip := 'Пример подсказки'+#0;
          hIcon := Application.Icon.Handle;
          uCallBackMessage := WM_USER+10;

        END;
        {Добавление иконки в панель задач}
        IF Shell_NotifyIcon(NIM_ADD,@NID) THEN MessageBeep(0);

      end;

      ............

      {Изменение}
      procedure TForm1.bModifyClick(Sender: TObject);
      begin

        {Установка новых значений в поля структуры TNotifyIconData}
        WITH NID DO BEGIN

          szTip := 'Пример подсказки 1'+#0;
          hIcon := LoadIcon(0,IDI_ASTERISK);

        END;
        {Изменение иконки в панели задач}
        IF Shell_NotifyIcon(NIM_MODIFY,@NID) THEN MessageBeep(0);

      end;

      ............

      {Удаление иконки из панели задач}
      procedure TForm1.bDeleteClick(Sender: TObject);
      begin

        IF Shell_NotifyIcon(NIM_DELETE,@NID) THEN MessageBeep(0);

      end;

      ............

      {Процедура реакции на события передаваемые иконкой}
      procedure TForm1.WndProc(var M: TMessage);
      var CursorPos: TPoint;
      begin

        {Проверка на принадлежность сообщения иконке}
        IF M.Msg = WM_USER+10 THEN
        {Реакция на необходимые события}
        CASE M.LParam OF

          WM_RBUTTONUP :

            BEGIN

              GetCursorPos(CursorPos);
              PopupMenu1.Popup(CursorPos.X, CursorPos.Y);

            END;

          WM_LBUTTONDBLCLK :

            ShowMessage('Двойной щелчок мыши!');

        END;
        {Передача необработанных сообщений дальше}
        INHERITED WndProc(M);

      end;

      ............

      P.S. Использование нотификационных иконок в Delphi вызывает некоторые сложности, так как, необходимо прятать окно и оставлять на экране только иконку, а простое использование свойства Visible не дает необходимого результата. Выход из этого положения видится, только, в отказе от использования объекта TApplication и работе с функциями API напрямую. Данный подход хорош еще и тем, что эти программы постоянно находятся в памяти, а использование в них объектно-ориентированной библиотеки Delphi будет отнимать слишком много ресурсов.


...предыдущая страница следующая...
оглавление



"Вопрос и Ответ 36"
Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2024 .
При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны!
Время генерации страницы: 0.006