procedure TForml. FormCreate {Sender: TObj ect) ;

var

Filelnfo: TSHFilelnfo; ImageListHandle: THandle; begin ImageListHandle : = SHGetFilelnfо (' С: \ ',

0,

Filelnfo,

SizeOf(Filelnfo) ,

SHGFI_SYSICONINDEX ОГ SHGFI_ICON);
SendMessage (ToolBarl .Handle, TB_SETIMAGELIST, 0, ImageListHandle);
end;
Точно так же можно извлечь значок, соответствующий конкретному файлу. В составе Shell есть другие функции, созданные для извлечения значков;
□ function Extractlcon (hlnst: HINST;
IpszExeFileName: PChar;
nlconlndex;
UINT): HICON;

Эта функция извлекает значок из файла IpszExeFileName (это должен быть файл типа EXE, DLL или ICO) и возвращает его дескриптор. Если значок не найден, возвращаемое значение равно 0.

□ function ExtractAssociatedlcon (hlnst: HINST;
lpIconPath: PChar;
var lpilcon: word) : HICON;

Эта функция может работать с файлами разных форматов. Сначала она, как и предыдущая, ищет значок в теле файла. Если его там нет, предпринимается попытка отыскать значок в приложении, связанном с данным типом файлов. Например, из файла с расширением doc будет извлечен один из значков Microsoft Word.

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

Вы обращали внимание на то, что некоторые приложения после установки добавляют в системное контекстное меню свои собственные пункты? Так поступают многие архиваторы, антивирусные средства и другие утилиты. Эта возможность предоставляется оболочкой Windows.

Когда пользователь щелкает правой кнопкой мыши на любом объекте в пространстве имен, система создает контекстное меню из двух частей; стандартного меню для объектов данного типа и пунктов меню, добавляемых зарегистрированными обработчиками. Зарегистрированные обработчики - это СОМ-серверы, запускаемые в адресном пространстве процесса (in-process servers) и реализованные в виде динамических библиотек.

Ваш СОМ-объект, который расширяет системное контекстное меню, должен поддерживать как минимум два интерфейса - i shellExt init и

IContextMenu. Существуют И ДВа НОВЫХ Интерфейса - IContextMenu2 и

icontextMenu3, но они вносят в логику работы контекстных меню лишь небольшие дополнения и здесь рассмотрены не будут. Интерфейс isheliExtinit отвечает за инициализацию меню, а интерфейс IContextMenu - за выполнение основных функций.

Методы интерфейса IContextMenu приведены в табл. 31.3.

Таблица 31.3. Методы интерфейса IContextMenu

Метод

Описание

function QueryContextMenu (Menu: HMENU;
indexMenu, idCmdFirst, idCmdLast, uFlags: UINT) : HResult;
stdcall;

Добавляет пункт к системному контекстному меню

function InvokeCommand (var lpici : TCMInvokeComraandlnfo) : HResult;
stdcall;

Осуществляет вызов обработчика

function GetComraandString (idCmd, uType: UINT;
pwReserved: PUINT;
PszName: LPSTR;
cchMax: UINT): HResult;
stdcall;

Возвращает описание добавленного пункта меню (подсказку или полное название)

Рассмотрим их подробнее. Параметры метода QueryContextMenu означают следующее:

□ Мети - дескриптор системного меню;
□ indexMenu - позиция в меню, в которую следует вставить пункт (пункты);

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Ноябрь
    2018
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс