Гобелен - кликните для возврата на главную
Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.
Так почему бы не начать использовать обход блокировки YouTube при том что техническая возможность используя расширение nikolaevevge для браузера Mozilla Firefox уже появилась, а объем полезной(и не очень) информации на видеохостинге YouTube, по мнению некоторых диванных экспертов, меньше не стал.
Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.
Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.
На очередном конкурсе танцев, школьница отлично выступила.
Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.
Начал разбираться с информацией которая находится в 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.
Вы так же можете прочитать следующие статьи: