Панель для проксей 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 старается достичь именно его, и если тулбару не мешают товарищи по службе, то он будет отмасштабирован в соответствии с этим параметром. |