Здравствуйте. Пишу простую обертку для sciter32.dll на Delphi и обнаружил, что метод view.hostCallback отсутствует. Пробовал Sciter,Sciter2,Sciter3.
Смотреть в сторону SciterWindowAttachEventHandler ?
Здравствуйте, alexacolor, Вы писали:
A>Спасибо!
A>А примера нигде нет на эту тему?
sciter(.exe) project в SDK:
File sciter.h :
BEGIN_FUNCTION_MAP
FUNCTION_0("title", get_title);
FUNCTION_1("title", set_title);
FUNCTION_0("glass", get_glass);
FUNCTION_1("glass", set_glass);
FUNCTION_V("log", debug);
FUNCTION_1("open", open);
FUNCTION_2("open", open);
FUNCTION_0("launchDebugView", launch_debug);
END_FUNCTION_MAP
json::value get_title();
json::value set_title(json::value title);
json::value get_glass();
json::value set_glass(json::value on_off);
json::value open(json::value url, json::value param = json::value());
json::value launch_debug();
Где BEGIN_FUNCTION_MAP & co. опредляют event_handler::on_script_call функцию:
#define BEGIN_FUNCTION_MAP \
virtual bool on_script_call(HELEMENT he, LPCSTR name, UINT argc, json::value* argv, json::value& retval) \
{ \
aux::chars _name = aux::chars_of(name);
#define FUNCTION_V(name, method) \
if( const_chars(name) == _name ) \
{ retval = method(argc,argv); return true; }
#define FUNCTION_0(name, method) \
if( const_chars(name) == _name && argc == 0) \
{ retval = method(); return true; }
#define FUNCTION_1(name, method) \
if( const_chars(name) == _name && argc == 1) \
{ retval = method(argv[0]); return true; }
#define FUNCTION_2(name, method) \
if( const_chars(name) == _name && argc == 2) \
{ retval = method(argv[0],argv[1]); return true; }
#define FUNCTION_3(name, method) \
if( const_chars(name) == _name && argc == 3) \
{ retval = method(argv[0],argv[1],argv[2]); return true; }
#define FUNCTION_4(name, method) \
if( const_chars(name) == _name && argc == 4) \
{ retval = method(argv[0],argv[1],argv[2],argv[3]); return true; }
#define FUNCTION_5(name, method) \
if( const_chars(name) == _name && argc == 5) \
{ retval = method(argv[0],argv[1],argv[2],argv[3],argv[4]); return true; }
#define END_FUNCTION_MAP \
return false; }
в классе окна
class frame
: public aux::asset
, public sciter::host<frame> // sciter window notifications
, public sciter::event_handler // sciter DOM notifications
{
HWND _hwnd;
...
bool setup(const wchar_t* url, HWND parent);
}
Ну и сам вызов attach_dom_event_handler(hwnd, event_handler*)
bool frame::setup(const wchar_t* url, HWND parent)
{
_hwnd = CreateWindowEx(0,WINDOW_CLASS_NAME, L"sciter-frame",...);
SetWindowLongPtr(_hwnd, GWLP_USERDATA, LONG_PTR(this));
setup_callback(); // sciter window event handler, to receive SC_LOAD_DATA, SC_DATA_LOADED, etc. notification
attach_dom_event_handler(_hwnd,this); // DOM events handler assignment, to receive DOM events
....
}
Спасибо, всё получилось. Просто с набегу не понятно, какой функционал работает, а какой уже нет.