diff --git a/designer/gettslediterstart.tsf b/designer/gettslediterstart.tsf index f5a9055..d32ce2b 100644 --- a/designer/gettslediterstart.tsf +++ b/designer/gettslediterstart.tsf @@ -164,7 +164,7 @@ begin bkcl := k1.openKeyA("Directory\\Background\\shell\\tslediter\\command"); if bkcl then bkcl.SetValueStringA(nil,SysExecName()); bkcl := k1.openKeyA("Directory\\Background\\shell\\tslediter"); - bkcl.SetValueStringA(nil,"TSL Editer"); + bkcl.SetValueStringA(nil,"TSL Editor"); if bkcl then bkcl.SetValueStringA("Icon",SysExecName()); echo "register tslediter ok ~~"; end diff --git a/funcext/tvclib/utslvclcef.tsf b/funcext/tvclib/utslvclcef.tsf index 6848354..00c23b0 100644 --- a/funcext/tvclib/utslvclcef.tsf +++ b/funcext/tvclib/utslvclcef.tsf @@ -36,6 +36,29 @@ type cef_point_t = class(tslcstructureobj) property x index 0 read _getvalue_ write _setvalue_; property y index 1 read _getvalue_ write _setvalue_; end +type cef_mouse_event_t = class(tslcstructureobj) + private + static SSTRUCT; + class function getstruct() + begin + if not SSTRUCT then SSTRUCT := MemoryAlignmentCalculate( + array( + (0,"int",0), + (1,"int",0), + (2,"int",0) + )); + return SSTRUCT; + end + public + function create(ptr) + begin + inherited create(getstruct(),ptr); + end + property x index 0 read _getvalue_ write _setvalue_; + property y index 1 read _getvalue_ write _setvalue_; + property modifiers index 2 read _getvalue_ write _setvalue_; //Bit flags describing any pressed modifier keys. See +end + type cef_popup_features_t = class(tslcstructureobj) private static SSTRUCT; @@ -237,6 +260,7 @@ type TTSLProcessMsg =class(tslcstructureobj) property proc index "proc" read _getvalue_ write _setvalue_; end + type cef_string_t=class(tslcstructureobj) fdest; function setansi(s); @@ -413,6 +437,83 @@ type cef_string_list_t = class() private FPtr; end +type cef_string_map_t = class() + fdest; + function create(ptr); + begin + if (ptr>0 or ptr<0) then + begin + + end else + begin + fdest := true; + ptr := cef_string_map_alloc(); + end + fptr := ptr; + end + function destroy(); + begin + if FPtr and fdest then + begin + cef_string_map_free(FPtr); + FPtr := 0; + end + end + function size(); + begin + return cef_string_map_size(FPtr); + end + function find(key); + begin + if not ifstring(key) then return ; + s := new cef_string_t();s.str := key; + v := new cef_string_t(); + if cef_string_map_find(FPtr,s._getptr_(),v._getptr_())>=0 then return v.str; + end + function key(idx); + begin + if not(idx>=0) then return ; + s := new cef_string_t(); + if cef_string_map_key(FPtr,idx,s._getptr_())>=0 then return s.str; + end + function value(idx); + begin + if not(idx>=0) then return ; + s := new cef_string_t(); + if cef_string_map_value(FPtr,idx,s._getptr_())>=0 then return s.str; + end + function append(key,value); + begin + if not (ifstring(key) and ifstring(value)) then return ; + s := new cef_string_t();s.str := key; + v := new cef_string_t();v.str := value; + return cef_string_map_append(FPtr,s._getptr_(),v._getptr_()); + end + function clear(); + begin + cef_string_map_clear(FPtr); + end + function keyvalues(); + begin + r := array(); + for i:= 0 to size()-1 do + begin + r[key(i)] := value(i); + end + return r; + end + private + fptr; + private + function cef_string_map_alloc():pointer;cdecl;external "libcef.dll" name "cef_string_map_alloc"; + function cef_string_map_size(map:pointer):pointer;cdecl;external "libcef.dll" name "cef_string_map_size"; + function cef_string_map_find(map:pointer;key:pointer;value:pointer):pointer;cdecl;external "libcef.dll" name "cef_string_map_find"; + function cef_string_map_key(map:pointer;index:pointer;key:pointer):integer;cdecl;external "libcef.dll" name "cef_string_map_key"; + function cef_string_map_value(map:pointer;index:pointer;value:pointer):integer;cdecl;external "libcef.dll" name "cef_string_map_value"; + function cef_string_map_append(map:pointer;key:pointer;value:pointer):integer;cdecl;external "libcef.dll" name "cef_string_map_append"; + procedure cef_string_map_clear(map:pointer);cdecl;external "libcef.dll" name "cef_string_map_clear"; + procedure cef_string_map_free(map:pointer);cdecl;external "libcef.dll" name "cef_string_map_free"; +end type cef_main_args_t=class(tslcstructureobj) private @@ -606,15 +707,16 @@ type cef_contain_base = class(tslcstructureobj) FTSLCallbacks := array(); flg := (ptr>0 or ptr<0); inherited create(getstruct(),ptr); - //addref(_getptr_()); + addref(_getptr_()); aftercreate(not flg); savetoglobal(); end function destroy();override; begin id := _getptr_(); + release(id); inherited; - //release(id); + end property base read getbase; procedure addref(id:pointer);stdcall;virtual; @@ -3449,6 +3551,21 @@ type cef_client_t=class(cef_contain_base) if o then return o._getptr_(); end //property on_process_message_received index "on_process_message_received" read _getvalue_ write _setvalue_; + property on_process_message_received index "on_process_message_received" read getcallpropertybyindex write setcallpropertybyindex; + function on_process_message_received_i(sf:pointer;browser:pointer;frame:pointer;source_process:integer;message:pointer):pointer;stdcall; + begin + echo ">>>>>>>>>>>>>><<<<<<<<\r\n"; + c := getcallback(functionname()); + if c then + begin + return call(c,self(true), + cef_object_get(browser,class(cef_browser_t)), + cef_object_get(frame,class(cef_frame_t)), + source_process, + message + ); + end + end end type cef_string_visitor_t=class(cef_contain_base) private @@ -4333,6 +4450,191 @@ type cef_process_message_t=class(cef_contain_base) end end +type cef_domnode_t=class(cef_contain_base) + private + function structdescribe();override; + begin + return array( + ("base","user",getbasestruct()), + ("get_type","intptr",0), + ("is_text","intptr",0), + ("is_element","intptr",0), + ("is_editable","intptr",0), + ("is_form_control_element","intptr",0), + ("get_form_control_element_type","intptr",0), + ("is_same","intptr",0), + ("get_name","intptr",0), + ("get_value","intptr",0), + ("set_value","intptr",0), + ("get_as_markup","intptr",0), + ("get_document","intptr",0), + ("get_parent","intptr",0), + ("get_previous_sibling","intptr",0), + ("get_next_sibling","intptr",0), + ("has_children","intptr",0), + ("get_first_child","intptr",0), + ("get_last_child","intptr",0), + ("get_element_tag_name","intptr",0), + ("has_element_attributes","intptr",0), + ("has_element_attribute","intptr",0), + ("get_element_attribute","intptr",0), + ("get_element_attributes","intptr",0), + ("set_element_attribute","intptr",0), + ("get_element_inner_text","intptr",0), + ("get_element_bounds","intptr",0), + ); + end + public + function create(ptr) + begin + inherited; + end + function get_element_attribute(attrName) ; + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer;attrName:pointer):pointer;stdcall; external ptr; + s1 := new cef_string_t();s1.str := attrName; + r := ##f(_getptr_(),s1._getptr_()); + s := new cef_string_t(r); + return s.str; + end + function get_element_attributes(); + begin + ptr := _getvalue_(functionname()); + f:= procedure(s:pointer;attrMap:pointer);stdcall; external ptr; + m := new cef_string_map_t(); + ##f(_getptr_(),m._getptr_()); + return m.keyvalues(); + end + function set_element_attribute(attrName,value); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer;attrName:pointer;value:pointer):integer;stdcall; external ptr; + s1 := new cef_string_t();s1.str := attrname; + s2 := new cef_string_t();s2.str := value; + return ##f(_getptr_(),s1._getptr_(),s2._getptr_()); + + end + function get_element_inner_text(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + s := new cef_string_userfree_t(r); + return s.str; + end + function get_element_bounds(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + return new cef_rect_t(r); + end +end +type cef_domdocument_t=class(cef_contain_base) + private + function structdescribe();override; + begin + return array( + ("base","user",getbasestruct()), + ("get_type","intptr",0), + ("get_document","intptr",0), + ("get_body","intptr",0), + ("get_head","intptr",0), + ("get_title","intptr",0), + ("get_element_by_id","intptr",0), + ("get_focused_node","intptr",0), + ("has_selection","intptr",0), + ("get_selection_start_offset","intptr",0), + ("get_selection_end_offset","intptr",0), + ("get_selection_as_markup","intptr",0), + ("get_selection_as_text","intptr",0), + ("get_base_url","intptr",0), + ("get_complete_url","intptr",0), + ); + end + public + function create(ptr) + begin + inherited; + end + function get_type(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):integer;stdcall; external ptr; + return ##f(_getptr_()); + end + function get_document(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + if r then return new cef_domnode_t(r); + end + function get_body(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + if r then return new cef_domnode_t(r); + end + function get_head(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + if r then return new cef_domnode_t(r); + end + function get_title(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + if r then + begin + return (new cef_string_userfree_t(r)).str; + end + end + function get_element_by_id(id); + begin + if not ifstring(id) then return ; + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + s := new cef_string_t(id); + r := ##f(_getptr_(),s._getptr_()); + if r then return new cef_domnode_t(r); + end + function get_selection_as_markup(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + if r then + begin + return (new cef_string_userfree_t(r)).str; + end + end + function get_selection_as_text(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + if r then + begin + return (new cef_string_userfree_t(r)).str; + end + end + function get_base_url(); + begin + ptr := _getvalue_(functionname()); + f:= function(s:pointer):pointer;stdcall; external ptr; + r := ##f(_getptr_()); + if r then + begin + return (new cef_string_userfree_t(r)).str; + end + end +end type cef_frame_t=class(cef_contain_base) private function structdescribe();override; @@ -4791,12 +5093,28 @@ type cef_browser_host_t=class(cef_contain_base) //property was_resized index "was_resized" read _getvalue_ write _setvalue_; //property was_hidden index "was_hidden" read _getvalue_ write _setvalue_; //property notify_screen_info_changed index "notify_screen_info_changed" read _getvalue_ write _setvalue_; - //property invalidate index "invalidate" read _getvalue_ write _setvalue_; + /// Invalidate the view. The browser will call cef_render_handler_t::OnPaint + /// asynchronously. This function is only used when window rendering is + /// disabled. + /// + ////void(CEF_CALLBACK* invalidate)(struct _cef_browser_host_t* self,cef_paint_element_type_t type); + function invalidate(); + begin + ptr := _getvalue_(functionname()); + f := procedure(sf:pointer;tp:integer);stdcall; external ptr; + return ##f(_getptr_()); + end //property send_external_begin_frame index "send_external_begin_frame" read _getvalue_ write _setvalue_; //property send_key_event index "send_key_event" read _getvalue_ write _setvalue_; //property send_mouse_click_event index "send_mouse_click_event" read _getvalue_ write _setvalue_; //property send_mouse_move_event index "send_mouse_move_event" read _getvalue_ write _setvalue_; //property send_mouse_wheel_event index "send_mouse_wheel_event" read _getvalue_ write _setvalue_; + function send_mouse_wheel_event(event:cef_mouse_event_t;delatax;deltay); + begin + ptr := _getvalue_(functionname()); + f := procedure(sf:pointer;event:pointer;dx:integer;dy:integer);stdcall; external ptr; + return ##f(_getptr_(),event._getptr_(),dx,dy); + end //property send_touch_event index "send_touch_event" read _getvalue_ write _setvalue_; //property send_capture_lost_event index "send_capture_lost_event" read _getvalue_ write _setvalue_; //property notify_move_or_resize_started index "notify_move_or_resize_started" read _getvalue_ write _setvalue_; diff --git a/funcext/tvclib/utslvclpage.tsf b/funcext/tvclib/utslvclpage.tsf index be3e04c..e4b1430 100644 --- a/funcext/tvclib/utslvclpage.tsf +++ b/funcext/tvclib/utslvclpage.tsf @@ -641,10 +641,9 @@ type tcustomtabitem = class() // @explan(˵Ã÷)tab¿Ø¼þ±êÇ©¶ÔÏó %% **} private - FPageCtrl; FCaption; FVisible; - FPageSheet; + [weakref]FPageSheet; function SetVisible(v);//ÉèÖÿɼû begin nv := v?true:false; diff --git a/tsl语言本地编辑器.docx b/tsl语言本地编辑器.docx index d9e06a5..2f7b831 100644 Binary files a/tsl语言本地编辑器.docx and b/tsl语言本地编辑器.docx differ