Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #85, ЯНВАРЬ 2006 г.

Панель для проксей

f0gg0t (f0gg0t@gmail.ru)

Хакер, номер #085, стр. 085-120-2


[функция SetSite]

function TProxyBar.SetSite(const pUnkSite: IUnknown): HResult;

var

Olewind:IOleWindow;

begin

if pUnkSite<>nil then

begin

pUnkSite.QueryInterface(IInputObjectSite,Site);

if SUCCEEDED(pUnkSite.QueryInterface(IOleWindow,Olewind)) then

begin

Olewind.GetWindow(ParentWnd);

Olewind._Release;

MakeForm(ParentWnd);

end;

pUnkSite._Release;

end;

Result := S_OK;

end;

Я не стал заморачиваться с winapi, а использовал VCL. Да, знаю я, что это не по-хакерски, но VCL правит миром, Delphi не стал бы таким популярным без него. Если захочешь реализовать на чистом api, то тебе придется изрядно напрячь мозг, но я в тебя верю :). Вернемся к нашим интерфейсам.

Второй функцией, наследованной от IObjectWithSite, является GetSite, браузер всегда вызывает ее после SetSite. В ней мы должны вернуть ослику его интерфейс, который он нам давал поиграть в прошлой функции. Просто вызываем Site.QueryInterface и возвращаем ему его интерфейс, пусть подавится, сволочь! Далее по списку идет IDeskBand. Что ж, держите скальпель, коллега, будем вскрывать :). Если вначале ты решил изучить исходник, то уже успел заметить функцию с названием GetBandInfo, занимающую гораздо большую площадь, чем остальные. От нее браузер получает информацию о различных параметрах тулбара, таких как размеры, заголовок и т.д. В качестве параметров браузер передает ей ID нашей панели, способ отображения и структуру pbdi. Вот ее-то мы и должны заполнить. Причем pdbi.dwMask заполнять не нужно, это идентификатор того, что браузер желает от нас узнать.

Мы проверяем, не требует ли браузер в данную минуту от нас каких-либо параметров, и заполняем только те пункты, которые ему требуются. Что такое ptMaxSize и ptMinSize поймет даже тюлень, а вот об остальных параметрах я расскажу подробнее:

dwModeFlags - переменная, которая определяет поведение нашего тулбара, всего можно использовать три эффекта: пошаговое изменение размера по вертикали, где за шаг отвечает ptIntegral, использование нестандартного цвета и отображение, так называемым затопленным появлением (в msdn можешь вычитать названия флагов).

ptActual - это идеальный размер для твоей панели; при всех обстоятельствах IE старается достичь именно его, и если тулбару не мешают товарищи по службе, то он будет отмасштабирован в соответствии с этим параметром.

Назад на стр. 085-120-1  Содержание  Вперед на стр. 085-120-3