Гобелен - кликните для возврата на главную
Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.
Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Жладимира Вольфовича Жириновского.
Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.
Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.
Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!
Вы пишите " В заголовочном файле (например, WebBrowserEventHandler.h)", как именно это делать в IDE Borland C++ Buildet 6 и нужно ли как то затем подключать написанное к проекту.
Подключение обработчика событий WebBrowser в Borland C++ Builder 6
Откройте ваш модуль формы (например, Unit1.cpp)
В самом верху, после других #include, добавьте:
#include "WebBrowserEventHandler.h"
Создаем класс обработчика:
// WebBrowserEventHandler.h
#ifndef WEBBROWSEREVENTHANDLER_H
#define WEBBROWSEREVENTHANDLER_H
#include <ocidl.h> // Для IDispatch
class TWebBrowserEventHandler : public TObject, public IDispatch
{
public:
// IDispatch methods
STDMETHOD(GetTypeInfoCount)(unsigned int* pctinfo) { return E_NOTIMPL; }
STDMETHOD(GetTypeInfo)(unsigned int iTInfo, LCID lcid, ITypeInfo** ppTInfo) { return E_NOTIMPL; }
STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, unsigned int cNames, LCID lcid, DISPID* rgDispId);
STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
// IUnknown methods
STDMETHOD_(ULONG, AddRef)() { return 1; }
STDMETHOD_(ULONG, Release)() { return 1; }
STDMETHOD(QueryInterface)(REFIID riid, void** ppv);
};
#endif
// Добавьте после #include, но до кода формы
STDMETHODIMP TWebBrowserEventHandler::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,
unsigned int cNames, LCID lcid, DISPID* rgDispId)
{
if (cNames == 1 && wcscmp(rgszNames[0], L"OnButtonClick") == 0)
{
*rgDispId = 1;
return S_OK;
}
return DISP_E_UNKNOWNNAME;
}
STDMETHODIMP TWebBrowserEventHandler::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr)
{
if (dispIdMember == 1) // OnButtonClick
{
if (pDispParams->cArgs > 0 && pDispParams->rgvarg[0].vt == VT_BSTR)
{
WideString param = pDispParams->rgvarg[0].bstrVal;
Form1->Label1->Caption = "Получен параметр: " + param;
}
return S_OK;
}
return DISP_E_MEMBERNOTFOUND;
}
STDMETHODIMP TWebBrowserEventHandler::QueryInterface(REFIID riid, void** ppv)
{
if (riid == IID_IDispatch || riid == IID_IUnknown)
{
*ppv = static_cast<IDispatch*>(this);
return S_OK;
}
return E_NOINTERFACE;
}
В заголовочном файле формы (Unit1.h):
private: // Добавьте в private-секцию класса формы
TWebBrowserEventHandler* handler;
В обработчике FormCreate:
cpp
void __fastcall TForm1::FormCreate(TObject *Sender)
{
handler = new TWebBrowserEventHandler();
CppWebBrowser1->RegisterAsBrowser = true;
IWebBrowser2* wb = CppWebBrowser1->DefaultInterface;
IDispatchPtr docDispatch = wb->GetDocument();
if (docDispatch != NULL)
{
IDispatchEx* docEx;
if (docDispatch->QueryInterface(IID_IDispatchEx, (void**)&docEx) == S_OK)
{
VARIANT var;
VariantInit(&var);
var.vt = VT_DISPATCH;
var.pdispVal = handler;
docEx->SetPropertyByName(L"external", &var);
docEx->Release();
}
}
}
__fastcall TForm1::~TForm1()
{
delete handler;
}
Убедитесь, что в настройках проекта (Project → Options):
// В начале WinMain (в файле проекта)
CoInitialize(NULL);
// В конце WinMain
CoUninitialize();
Все файлы должны быть сохранены в кодировке Windows-1251 или ANSI.
Для работы с COM-интерфейсами может потребоваться:
Такой подход обеспечит корректную работу взаимодействия между JavaScript и C++ кодом в Borland C++ Builder 6.
Вы так же можете прочитать следующие статьи: