Новые книги

Это попытка последовательного изложения истории UNIX, Linux и свободных ОС вообще, а также связанных с ними графических интерфейсов. Она разделяется на три части: в первой рассматривается история UNIX-подобных операционных систем, во второй – дистрибутивов Linux, в третьей – их интерфейсов. Основана на печатных и сетевых материалах, воспоминаниях очевидцев, устной традиции и личных впечатлениях.
Одна из последних тенденций в деловом мире — проектная система организации работ; в последние годы навыки управления проектами требуются от менеджеров практически любого уровня. В этой книге вы найдете информацию о различных подходах к планированию и управлению проектами, научитесь составлять планы, графики работ и бюджет, а также правильно организовывать и контролировать процесс выполнения проекта. Вы узнаете о значении хороших взаимоотношений с людьми — теми, кто выполняет проект с вами, и теми, для кого он выполняется.

Теоретический материал сопровождается примерами, схемами и рисунками, подсказками и полезными советами, которые облегчат планирование и реализацию проекта. Прочитав книгу «Управление проектами для чайников», вы научитесь выявлять и преодолевать проблемы, которые мешают успешному применению эффективных методов. Эту книгу найдут для себя полезной как начинающие, так и опытные менеджеры, а также все, кто интересуется современными подходами к организации труда.

Вопрос и Ответ 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