Internet Explorer Toolbar plugin
От: Mira  
Дата: 26.10.05 09:02
Оценка:
Привет всем!

______________________
Предисловие:
Пишу Toolbar для Internet Explorer (ну, вроде известного всем Google-Toolbar).
Заказчик требует исходник только для C++ Builder...

______________________
Суть проблемы:
Приложение работает нормально, но не могу задействовать визуальные темы
(Windows XP Visual Themes). Поэтому мой тулбар выглядит на фоне продвинутого XP-шного
Internet Explorer как кусок окна времен Windows 95.

Я пробовал писать тулбар в Visual Studio и делать так как написано в MSDN. То есть
я ликовал файл манифеста в проект и объявлял макрос

#define ISOLATION_AWARE_ENABLED 1

перед включением файла windows.h — и в этом случае все работает великолепно.
Визуальные стили отображаются.

Попытка объявления макроса ISOLATION_AWARE_ENABLED в C++ Builder приводит к ошибкам
при компиляции (все ошибки в библиотечных файлах — например в commctrl.h).

Пробовал использовать компоненты написаные для C++ Builder такие как TThemeManager и TXPThemes.
В обычном приложении они работают, а в DLL, представляющей собой,
плагин для Internet Explorer — нет!

Ведь должен быть выход... Не писать же отрисовку каждого компонента вручную...

______________________
Вопрос:
Как задействовать визуальные стили для Internet Explorer Toolbar написаного для C++ Builder?

______________________
Послесловие:
Перед тем как задать этот вопрос я перебробовал еще около двух десятков вариантов
решения проблемы. Походу бьюсь с этим уже целый месяц. Поэтому очень прошу, не давайте пустых
советов — поробуй так, попробуй этак. Пишите, если точно знаете как решается данная проблема.

______________________
Исходник:
В качестве исходника попробуйте RSDN-Bar:

http://www.rsdn.ru/article/files/Progs/RSDNbar/rsdnbar-v.2.0-source.zip

А вот статья:

http://www.rsdn.ru/article/files/Progs/rsdnbar.xml
Автор(ы): Порохня Дмитрий aka Flamer
Дата: 12.07.2003
Re: Internet Explorer Toolbar plugin
От: Rusland  
Дата: 26.10.05 11:21
Оценка:
Здравствуйте, Mira, Вы писали:

Аналогичная проблема. У меня CBuilder6.
Может кто-нибудь знает как программно отключить/включить показ картинок в ie?
Re: Internet Explorer Toolbar plugin
От: _GIZMO  
Дата: 31.10.05 07:50
Оценка:
Здравствуйте, Mira, Вы писали:

M>Привет всем!


M>______________________

M>Предисловие:
M>Пишу Toolbar для Internet Explorer (ну, вроде известного всем Google-Toolbar).
M>Заказчик требует исходник только для C++ Builder...

M>______________________

M>Суть проблемы:
M>Приложение работает нормально,но не могу задействовать визуальные темы
M>(Windows XP Visual Themes). Поэтому мой тулбар выглядит на фоне продвинутого XP-шного
M>Internet Explorer как кусок окна времен Windows 95.
Такая же фигня. Я думаю, что это SDK в Билдере старенький т.к. если просмотреть соотв. хедеры, то там ISOLATION_AWARE_ENABLED и не пахнет. Т.е. путь один — надо перелопачивать и подкл. хедеры и либы от VC7.

Плюс к тому же у меня еще одна фигня: — когда кликаю правой кнопкой мыши над тулбаром, вылезает контекстное меню которое управляет отображением и настройкой тулбаров. Выбираю в нем напр. Ссылки панель исчезает, а меню нет, что за фигня не знаешь?

...
M>Попытка объявления макроса ISOLATION_AWARE_ENABLED в C++ Builder приводит к ошибкам
M>при компиляции (все ошибки в библиотечных файлах — например в commctrl.h).
ошибок у меня не дает, но схема все равно не работает...


M>______________________

M>Вопрос:
M>Как задействовать визуальные стили для Internet Explorer Toolbar написаного для C++ Builder?
Если решишь первый, дай знать плз.
И по моей проблеме может подскажешь чего, у тебя такого нет?
_GIZMO
Re[2]: Internet Explorer Toolbar plugin
От: Mira  
Дата: 09.11.05 22:14
Оценка:
Здравствуйте, _GIZMO, Вы писали:

_GI>Такая же фигня. Я думаю, что это SDK в Билдере старенький т.к. если просмотреть соотв. хедеры, то там ISOLATION_AWARE_ENABLED и не пахнет. Т.е. путь один — надо перелопачивать и подкл. хедеры и либы от VC7.


_GI>Плюс к тому же у меня еще одна фигня: — когда кликаю правой кнопкой мыши над тулбаром, вылезает контекстное меню которое управляет отображением и настройкой тулбаров. Выбираю в нем напр. Ссылки панель исчезает, а меню нет, что за фигня не знаешь?


_GI>...

M>>Попытка объявления макроса ISOLATION_AWARE_ENABLED в C++ Builder приводит к ошибкам
M>>при компиляции (все ошибки в библиотечных файлах — например в commctrl.h).
_GI>ошибок у меня не дает, но схема все равно не работает...




КОД ПОЛУЧЕН ПО ПОЧТЕ




На счет вопроса с не-исчезающим меню... Оно исчезает и появляется вновь...

Такой эффект вызывается особенностью модели диспетчера сообщений VCL...
Достаточно в главной форме перехватывать сообщение WM_CONTEXTMENU и не давать выполнять его потомкам...
Для этого твою сабклассинг функцию:


void __fastcall TFindBarObjImpl::BandWndProc(TMessage& Message)
{
if(Message.Msg == WM_PARENTNOTIFY) // tell container about focus change
{
m_bHasFocus = true; // input focus in our window
FocusChange(true);
}
SavedWndProc(Message);
}


измени на:


void __fastcall TFindBarObjImpl::BandWndProc(TMessage& Message)
{
switch (Message.Msg)
{
case WM_CONTEXTMENU : SavedWndProc(Message);
Message.Result = true;
break;
case WM_PARENTNOTIFY : m_bHasFocus = true; // tell container about focus change
FocusChange(true); // input focus in our window
default : SavedWndProc(Message);
break;
}
}

-----------------------------------------------

Кстати, у тебя в коде создается и сабкласится главное окно...

// subclass main window proc
SavedWndProc = m_hOurWindow->WindowProc;
m_hOurWindow->WindowProc = BandWndProc;

Затем, назначается его хэндл в функции:


STDMETHODIMP TFindBarObjImpl::GetWindow(HWND *phWnd)
{
if (!phWnd)
return E_INVALIDARG;

if (m_hOurWindow && IsWindow(m_hOurWindow->Handle))
{
*phWnd = m_hOurWindow->Handle;
return S_OK;
}
return E_FAIL;
}

А ты попробуй создать окно, засабкласить его для перехвата WM_CONTEXTMENU,
затем засабклась сам тулбар для перехвата WM_PARENTNOTIFY, и назначь хэндл тулбара в GetWindow...

Получишь чистый, прозрачный тулбар в IЕ...

-----------------------------------------------

Далее, у тебя объявлен ISOLATION_AWARE_ENABLED, у тебя билдер 5.0 — и говоришь, что компилируется?

А где XP-Manifest в твоем проекте? Я не нашел...


Mir@
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.