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

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

f0gg0t (f0gg0t@gmail.ru)

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


wszTitle - это caption тулбара. Так как это не string, то нужно преобразовать строковое значение в тип WideChar функцией StringToWideChar.

StringToWideChar(Caption, @pdbi.wszTitle, Length(Caption) + 1);

crBkgnd - цвет тулбара, он будет задействован, если ты присвоишь dwModeFlags значение DBIMF_BKCOLOR.

Вот небольшой кусочек их функции GetBandInfo, чтобы было понятно, о чем же идет речь:

if (pdbi.dwMask AND DBIM_MINSIZE) <> 0

then begin

pdbi.ptMinSize.x := MinXSize;

pdbi.ptMinSize.y := MinYSize;

end;

Далее идут функции ShowDW и CloseDW. Первая показывает и скрывает форму в зависимости от переменной fshow, а также включает и выключает фокус с помощью функции OnFocusChangeIS, из сохраненного ранее интерфейса браузера. Второй функцией уничтожаем окно.

ResizeBorderDW выполняет какие-то страшные манипуляции с границей фрейма, выделенного под наше окно, но мы не будем его реализовывать и пишем Result:=E_NOTIMPL, сообщая ишаку, что мы не имплементировали эту функцию. Особняком среди этих интерфейсов стоит IContextMenu, без него тулбар будет работать, и можно не реализовывать его имплементы, но при этом тулбарина потеряет некоторую функциональность. Как видно из названия, IContextMenu - это интерфейс, где описаны функции для работы с контекстным меню. Что ж, поехали по порядку. В функции QueryContextMenu мы должны вставить все желаемые пункты меню, а уже в InvokeCommand определить, какое колдовство будет происходить при нажатии на каждый пункт. Посмотри сорец на диске, там все просто ;).

Вот вроде бы и все, что нужно для создания элементарного тулбара, но так как мы будем использовать компоненты для ввода с клавиатуры (Memo, Edit и тд.), то нам нужно реализовать фокус, а то мы просто-напросто не сможем получить в тулбаре никакой инфы с клавы. Методы для работы с фокусом объявлены в интерфейсе IInputObject.

UIActivateIO, как написано в MSDN, эта функция активирует/деактивирует объект, точнее она меняет фокус в зависимости от переменной fActivate. Просто делаем SetFocus, если fActivate - истина, и ничего не делаем, если fActivate - ложь.

HasFocusIO определяет, существует ли клавишный фокус, и на основании ответа делает выводы. Реализуется легко: просто возвращаем в нее фокус ;).

TranslateAcceleratorIO - здесь нужно отловить нажатие клавиши <TAB> и послать фокус в далекое путешествие по тулбарным просторам.

Помимо всего прочего, не стоит забывать: чтобы COM-сервер у нас заработал, нам нужно создать его GUID. GUID - это такой ID сервера, который обеспечивает его уникальность во Вселенной и во всех измерениях. Достигается это с помощью манипуляций с датой и временем, а также параметрами железа. В среде Delphi сделано все за нас, и по нажатию <CTRL+SHIFT+G> в позицию курсора помещается сгенерированный GUID. Без него тебе не удастся зарегистрировать тулбар. Чтобы зарегистрировать любой COM-сервер, нужно создать несколько ключей в реестре. Вот они:

HKEY_CLASSES_ROOT\CLSID\[ГУИД]\. Здесь пишем название COM-сервера в значении по умолчанию. В нашем случае - ProxyBar.

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