Самоучитель по Delphi 7 для профессионалов



              

Добавление пунктов в системное контекстное меню - часть 3


Наиболее сложным является метод Invokecommand. Он вызывается при выборе пользователем вставленного вами пункта меню. По сути дела метод InvokeCommand представляет собой прямой аналог обработчика onclick обычных пунктов меню (объектов TMenuitem) в Delphi.

Единственным параметром метода является структура типа TCMinvoke-commandinfo, поля которой имеют такое предназначение:

  •  cbsize — размер структуры в байтах;
  •  hwnd — задает дескриптор окна, которое будет владельцем диалоговых окон, вызываемых из метода;
  •  fMask — определяет, заданы ли параметры dwHotkey/hicon;
  •  Ipverb — вызываемая команда;
  •  IpFarameters — параметры (если есть);
  •  IpDirectory — рабочая папка (поле не обязательно);
  •  nShow — флаг состояния окна, который будет передан в функцию ShowWindow (SW_*);
  •  dwHotKey — "горячая" комбинация клавиш, которая будет сопоставляться приложению, запускаемому из этого пункта меню (только если в параметре fMask установлен флаг CMIC_MASK_HOTKEY);
  • hIсоn — значок, который будет сопоставляться приложению, запускаемому из этого пункта меню (только если в параметре fMask установлен флаг CMIC_MASK_ICON);
  •  Monitor — монитор по умолчанию (поле не обязательно).

Отдельно следует остановиться на описании параметра ipverb. Как уже говорилось, он может представлять из себя как идентификатор пункта меню, так и его текст — строку, заканчивающуюся нулем. Чтобы выяснить это, нужно проверить старшее слово этого 32-разрядного параметра на равенство нулю. В примере ContMenu вызов по тексту не предусмотрен:

if (HiWord(Integer(Ipici.IpVerb)) <> 0) then

begin

Exit; 

end;

Для создания расширения контекстного меню мы должны породить объект, поддерживающий эти интерфейсы. К сожалению, мастера, предусмотренные в Delphi, не позволяют в автоматизированном режиме создавать объекты, реализующие уже существующие интерфейсы. Поэтому и описание, и реализацию методов придется делать "по старинке", вручную. В примере ContMenu описание объекта таково:




Содержание  Назад  Вперед