FAQ 4. Как на CppWebBrowser запретить вывод стандартное контекстное меню...
IHTMLDocument2::put_designMode(WideString("On"))
как в этом случае побороть стандартное меню?
как побороть его ???
как побороть его ???
Вообще нужно переустанавливать при каждом DocumentComplete.
Я обновил FAQ's, перечитай еще раз вопрос № 4.
И попробуй переустанавливать при смене режима редактирования.
я так и делал:
LPDISPATCH pDisp, Variant *URL)
{
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2>spDoc(WB->Document);
if (CheckBox1->Checked) spDoc->put_designMode(L"On");
dochandler = new TDocHandler(WB);
}
//----------------------------------------------------------------------
void __fastcall TMainForm::WBBeforeNavigate2(TObject *Sender,
LPDISPATCH pDisp, Variant *URL, Variant *Flags,
Variant *TargetFrameName, Variant *PostData, Variant *Headers,
VARIANT_BOOL *Cancel)
{
dochandler->Release();
}
выдает стандартное меню и все тут... (со старым кодом и FAQ)
с новым щас буду разбираться...
http://msdn2.microsoft.com/en-us/library/aa770042.aspx
все равно стандартное меню :(
Тогда х.з., надо копать.
Есть такая фишка http://msdn2.microsoft.com/en-us/library/aa704056.aspx
посмотри может поможет.
и под каким ВСВ?
hinstSHDOCLC = LoadLibrary(TEXT("SHDOCLC.DLL")); заменил на:
hinstSHDOCLC = LoadLibrary(TEXT("shdocvw.dll")); // т.к. ИЕ всетаки берется из shdocvw.dll (может это и не правильно, но работает)
на Application::OnMessage повесил код:
if (Msg.message == WM_RBUTTONUP)
{
POINT p;
GetCursorPos(&p);
WBPopupMenu->Popup(p.x, p.y);
}
хотя чую что такой подход через Ж... но в принципе результат достигнут
Хы... все тело virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(....) можно закоментить, и оставить только return S_OK; (это при условии обработки Application::OnMessage ) :D
dochandler = new TDocHandler(); мешает редактированию, а именно, нельзя теперь текст выделять мышкой (только с клавиатуры или с шифтом)
то что в FAQ работает?
Да.
(создал чистый проект, вкорячил туда из ФАКа и ноль эмоций... хотя если CppWebBrowser1->Document == NULL, тогда только работает)
приведи код...
и под каким ВСВ?
BCB5+IE6(5.5)+XP
вышел из положения следующим образом:
hinstSHDOCLC = LoadLibrary(TEXT("SHDOCLC.DLL")); заменил на:
hinstSHDOCLC = LoadLibrary(TEXT("shdocvw.dll")); // т.к. ИЕ всетаки берется из shdocvw.dll (может это и не правильно, но работает)
IE из shdocvw.dll не берется, из shdocvw.dll берется MS Web Browser Control. IE это отдельная программа которая использует для работы MS Web Browser Control, а меню он (WBC и соотв. IE) загружает из shdoclc.dll
Хы... все тело virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(....) можно закоментить, и оставить только return S_OK;
так в комментарии FAQ's (взятом из MSDN) так и написано...
dochandler = new TDocHandler(); мешает редактированию, а именно, нельзя теперь текст выделять мышкой (только с клавиатуры или с шифтом)
FAQ's обновлен...
некоторые хакеры жалуются, что после замены контекстного
меню им не удается выделять текст мышкой, специально для
них...
*/
:D :D :D
теперь работает?
задавали подобный вопрос ранее, а т.к. я не самый умный т.е. все знать не могу, поэтому рекомендую почитывать MSDN (что сам вчера и проделал) и не надеятся только на FAQ's, GIZMO & forum.
Удачи, хакерам:)!
почему через virtual HRESULT STDMETHODCALLTYPE ShowContextMenu не работает не пойму никак (к стати, наверно там надо указать что то типа LoadMenu с хенделом моего меню)
МСДН регулярно почитываю, только я вобщем понимаю что написано, а сам, увы пока не умею писать подобное...
ЗЫ: ежели не сложно, можно будет увидень проект, а то мож че не так делаю?
проект прикрепил к FAQ's ...
и даже скачанный с ФАК не работает!? Фантастика!!!:)
ну тогда не знаю...
ЗЫ: а у меня работает...
выдает ошибку "неизвестная ф-я _ASSERTE_" в модуле utilcls.h
заменил:
#include "atlbase.h"
на
#include "atlvcl.h"
только тогда компилится, но не работает... (всмысле показывает это долбанное меню)
если убрать все из ShowContextMenu и оставить там return S_OK; тогда стандартное меню отключается, а свое через Application::OnMessage
PS: выделение стало работать...
выдает ошибку "неизвестная ф-я _ASSERTE_" в модуле utilcls.h
заменил:
#include "atlbase.h"
на
#include "atlvcl.h"
только тогда компилится, но не работает... (всмысле показывает это долбанное меню)
если убрать все из ShowContextMenu и оставить там return S_OK; тогда стандартное меню отключается, а свое через Application::OnMessage
PS: выделение стало работать...
Билдер 6? А IE какой и система?
IE 6.0.29 sp2 (привязка к версии IE не есть гуд)
Win XP
IE 6.0.29 sp2 (привязка к версии IE не есть гуд)
Win XP
у меня так же, только Билдер 5-й.