Здравствуйте, ptica, Вы писали:
P>Не прокидываються в behavior_media вызова:
P>P> //===========================
P> video.show = true;
P> video.test();
P> //===========================
P>
P>sciter ver 1.0.4.24
P>Хотя video.postEvent( 300000 ); вызывается на ура.
P>Возможно что то до конца не прочувствовал в библиотеке =). Помогите
Метод behavior'а:
virtual bool handle_scripting_call (HELEMENT he, SCRIPTING_METHOD_PARAMS& params ) {}
Где:
struct SCRIPTING_METHOD_PARAMS
{
LPCSTR name; //< method name
SCITER_VALUE* argv; //< vector of arguments
UINT argc; //< argument count
SCITER_VALUE result; //< return value
};
это в скрипте метод
result = element.xcall(#sym, argv0, argv1, ... )
Т.е. надо так:
video.xcall(#test);
video.xcall(#show,true);
var s = video.xcall(#show);
Для того чтобы с этим делом работать так:
video.show = true;
video.test();
то нужно обернуть это дело в Behavior
type Video : Behavior
{
property show(v)
{
get return this.xcall(#show);
set return this.xcall(#show, v);
}
function test()
{
return this.xcall(#test);
}
}
соотв. в CSS прописать :
#Video
{
width:100%%;
height:100%%;
behavior: media_video;
prototype: Video;
}
Здравствуйте, Коллеги.
sciter ver 1.0.4.24
Не приходит вызов из скрипта (handle_scripting_call ) =(.
Хотя уверенности что все правильно и до конца реализовано тоже нет...
Код:
using namespace sciter;
using namespace sciter::dom;
struct behavior_media : public event_handler
{
behavior_media() : event_handler()
{
debug_output_console dc;
dc.printf("behavior_media create\n");
}
virtual bool handle_event (HELEMENT he, BEHAVIOR_EVENT_PARAMS& params )
{
debug_output_console dc;
dc.printf("behavior_media handle_event\n");
return false;
}
virtual bool handle_key (HELEMENT he, KEY_PARAMS& params )
{
debug_output_console dc;
dc.printf("behavior_media handle_key\n");
return false;
}
virtual bool handle_mouse (HELEMENT he, KEY_PARAMS& params )
{
debug_output_console dc;
dc.printf("behavior_media handle_mouse\n");
return false;
}
virtual bool handle_method_call (HELEMENT he, METHOD_PARAMS& params )
{
debug_output_console dc;
dc.printf("behavior_media handle_method_call\n");
return false;
}
virtual bool handle_scripting_call (HELEMENT he, SCRIPTING_METHOD_PARAMS& params )
{
debug_output_console dc;
dc.printf("behavior_media handle_scripting_call\n");
return false;
}
virtual bool handle_draw (HELEMENT he, DRAW_PARAMS& params )
{
debug_output_console dc;
dc.printf("behavior_media handle_draw\n");
return false;
}
virtual void attached ( HELEMENT he )
{
debug_output_console dc;
dc.printf("behavior_media attached\n");
}
virtual void detached (HELEMENT he )
{
debug_output_console dc;
dc.printf("behavior_media detached\n");
delete this;
}
virtual void handle_size(HELEMENT he)
{
debug_output_console dc;
dc.printf("behavior_media handle_size\n");
}
};
struct behavior_media_factory : public behavior_factory
{
behavior_media_factory() : behavior_factory("media_video" )
{
}
virtual event_handler* create (HELEMENT he )
{
return new behavior_media();
}
};
behavior_media_factory media_instance;
Сам html:
<html>
<head>
<style>
#Video
{
overflow: auto;
width:100%%;
height:100%%;
prototype:Grid;
background-color:#000 #e9e8f3 #e9e8f3 #fff;
behavior: media_video;
}
#Status
{
prototype: Status;
background-color:#FFF #e9e8f3 #e9e8f3 #FFF;
}
</style>
<script src="sciter:lib/root-extender.tis" type="text/tiscript"/>
<script type="text/tiscript">
var video = self.select("#Video");
var status = self.select("#Status");
function self.onMouse(event)
{
switch(event.type)
{
case Event.MOUSE_UP:
if(!status) { stderr << "status is not found"; return true; }
status.text = "[1]";
status.update(false);
if(!video) { stderr << "video is not found"; return true; }
//===========================
video.show = true;
video.test();
//===========================
//video.postEvent( 300000 );
status.text = "[2]";
status.update(false);
return true;
}
return false;
}
</script>
</head>
<body>
<widget id = "Video">Video</widget>
<div id="Status">status</div>
</html>
Не прокидываються в behavior_media вызова:
//===========================
video.show = true;
video.test();
//===========================
sciter ver 1.0.4.24
Хотя video.postEvent( 300000 ); вызывается на ура.
Возможно что то до конца не прочувствовал в библиотеке =). Помогите
Здравствуйте, c-smile, Вы писали:
...
Самое оно =).
Как-то не заметил что такое в sciter-bn.dll (sciter\facades) используется.
Большое спасибо за шикарную библиотек!
И в догонку еще вопросик касательно расширения функционала и вынесения в отдельную dll
поясни те 2 функции, что в sciter-x-module.cpp находятся:
EXTERN_C BOOL WINAPI SciterInitModule( SciterDomApi* pdomapi, VOID* p1, VOID* p2 )
{
sciter::dom::element::api(pdomapi);
return TRUE;
}
EXTERN_C BOOL WINAPI SciterBehaviorFactory( LPCSTR, HELEMENT, SciterDomApi::LPELEMENT_EVENT_PROC*, LPVOID* )
{
return FALSE;
}
Если можно в контексте:
struct behavior_media_factory
struct behavior_media. =)
Здравствуйте, ptica, Вы писали:
P>И в догонку еще вопросик касательно расширения функционала и вынесения в отдельную dll
P>поясни те 2 функции, что в sciter-x-module.cpp находятся:
P>P>EXTERN_C BOOL WINAPI SciterInitModule( SciterDomApi* pdomapi, VOID* p1, VOID* p2 )
P>EXTERN_C BOOL WINAPI SciterBehaviorFactory( LPCSTR, HELEMENT, SciterDomApi::LPELEMENT_EVENT_PROC*, LPVOID* )
P>
P>struct behavior_media_factory
P>struct behavior_media. =)
sciter-x-module.cpp это опциональная вещь вообще-то.
Если надо сделать загрузку behaviros из DLL то можно это сделать на уровне своей собственной обработки
HLN/SCN_ATTACH_BEHAVIOR.
Сделать свой naming convention, скажем так:
#myid
{
behavior: plugin\/media\/ogg-viewer;
}
В SCN_ATTACH_BEHAVIOR анализируем имя и если оно начинается с "plugin/" то
скажем идем в некий фолдер /plugin/ и смотрим там media.dll.
Далее уже дело техники : LoadLibrary, потом позвать нечто well known типа SciterInitModule или InitPlugin
c передачей в длл SciterDomApi. Ну и напоследок позвать фабрику за для event handler по имени "ogg-viewer"
Вот для этого из этой длл и должно наружу быть видным нечто типа
EXTERN_C BOOL WINAPI SciterBehaviorFactory( LPCSTR, HELEMENT, SciterDomApi::LPELEMENT_EVENT_PROC*, LPVOID* )