view.hostCallback - obsolete?
От: alexacolor  
Дата: 25.08.13 10:09
Оценка:
Здравствуйте. Пишу простую обертку для sciter32.dll на Delphi и обнаружил, что метод view.hostCallback отсутствует. Пробовал Sciter,Sciter2,Sciter3.
Смотреть в сторону SciterWindowAttachEventHandler ?
sciter
Re: view.hostCallback - obsolete?
От: c-smile Канада http://terrainformatica.com
Дата: 25.08.13 16:08
Оценка:
Здравствуйте, alexacolor, Вы писали:

A>Здравствуйте. Пишу простую обертку для sciter32.dll на Delphi и обнаружил, что метод view.hostCallback отсутствует. Пробовал Sciter,Sciter2,Sciter3.

A>Смотреть в сторону SciterWindowAttachEventHandler ?

Да, view.hostCallback уже история (еще в S1)
И тоже "да", SciterWindowAttachEventHandler + handle_scripting_call() в нём это правильный путь.
Re[2]: view.hostCallback - obsolete?
От: alexacolor  
Дата: 25.08.13 16:39
Оценка:
Спасибо!
А примера нигде нет на эту тему?
Re[3]: view.hostCallback - obsolete?
От: c-smile Канада http://terrainformatica.com
Дата: 25.08.13 21:07
Оценка:
Здравствуйте, 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
    ....
 }
Re[4]: view.hostCallback - obsolete?
От: alexacolor  
Дата: 26.08.13 05:24
Оценка:
Спасибо, всё получилось. Просто с набегу не понятно, какой функционал работает, а какой уже нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.