Новые книги

Windows Server 2012 R2 Pocket Consultant: Storage, Security, & Networking is designed to be a concise and compulsively usable resource for Windows administrators, developers, and programmers, and for anyone else who wants to use the storage, networking, and security features of Windows Server 2012 R2. This is the readable resource guide that you’ll want on your desk or in your pocket at all times. The book discusses everything you need to perform core tasks. Because the focus is directed on providing you with the maximum value in a pocket-sized guide, you don’t have to wade through hundreds of pages of extraneous information to find what you’re looking for. Instead, you’ll find exactly what you need to get the job done.
Эта книга написана в рамках онлайн-курса «Юридическая поддержка стартапов» на платформе «Открытое образование». Перед вами учебное пособие и одновременно справочник по юридическим вопросам российского предпринимательства.

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

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