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



              

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


  •  uFlags — набор флагов, главные из которых означают:
    •  CMF_NORMAL — обычный вызов контекстного меню, пункты могут быть добавлены. Значение этого флага нулевое, проверять его следует, очистив все биты в параметре uFlags, кроме пяти младших (маска $1F);
    •  CMF_DEFAULTONLY — устанавливается, если пользователь задал с объектом действие по умолчанию (например, двойной щелчок). В этом случае пункты меню добавляться не должны;
    •  CMF_VERBSONLY — устанавливается, если меню создается для ярлыка объекта, а не для самого объекта. В этом случае многие пункты меню создаваться не должны;
    •  CMF_EXPLORE — устанавливается, если меню создается для объекта, находящегося на левой панели Проводника.

    Для иллюстрации объектов — расширений контекстного меню — выберем пример ContMenu (поставляется с Delphi в папке DEMOS\ACTIVEX \SHELLEXT). В этом примере для объектов типа "проект Delphi" добавляется возможность запуска компилятора в командной строке. При вызове метода QueryContextMenu нужный пункт добавляется с помощью функции

    InsertMenu!

    function TContextMenu.QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst,

    idCmdLast, uFlags: UINT): HResult; 

    begin

    Result := 0; // или использовать MakeResult(SEVERITY_SUCCESS, // FACILITY_NULL, 0);

    if ( (uFlags and $OOOOOOOF) = CMF__NORMAL) 

    or

    ((uFlags and CMF_EXPLORE) о 0) then begin 

    // Добавить один пункт меню во всплывающее меню 

    InsertMenu(Menu, indexMenu, MF__STRING or MF_BYPOSITION, idCmdFirst,

    'Compile...');

    Result := 1; 

    // или использовать MakeResult(SEVERITY_SUCCESS, // 

    FACILITY_NULL, 1)

    end; 

    end;

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

    Параметры Getcommandstring просты. Первый — idCmd — соответствует идентификатору пункта меню, второй — uType — запрос на тип информации (GCS_HELPTEXT — текст подсказки, GCS_VERB — полное название пункта меню). Наконец, параметры pszName и cchMax  задают буфер, в который будут копироваться текстовые данные. Полное название необходимо системе, чтобы с его помощью вызывать предусмотренные в пункте действия программно. В примере ContMenu возврат названия (т. е. обработка запроса GCS_VERB) не предусмотрен, а в ответ на запрос GCS_HELPTEXT возвращается текстовая строка "Compile the selected Delphi project".


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