Панель для проксей 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. |