元素。
selection
只读 - null | Selection , 若该元素支持选择的行为(如htmlarea、richtext)时返回Selection对象,否则返回null
firstCaretPos
只读 - null | bookmark bookmark, 返回元素内第一个插入位置(光标)的书签。
lastCaretPos
只读 - null | bookmark bookmark, 返回元素内最后一个插入位置(光标)的书签。
paintBackground
只写 - null | function(gfx), 设置背景层的绘制函数。该函数能获取到绘制该层的Graphics对象。如果函数返回true 时则默认的背景和边框绘制将不会再绘制。背景绘制函数是在本地绘制之前 调用。
paintContent
只写 - null | function(gfx), 设置内容层的绘制函数。该函数能获取到绘制该层的Graphics对象。如果函数返回true 时则默认的内容绘制将不会再绘制。内容绘制函数是在本地绘制之前 调用。
paintForeground
只写 - null | function(gfx), 设置前景层的绘制函数。该函数能获取到绘制该层的Graphics对象。如果函数返回true 时则默认的前景绘制将不会再绘制。前景绘制函数是在本地绘制之前 调用。
paintOutline
只写 - null | function(gfx), 设置轮廓层的绘制函数。该函数能获取到绘制该层的Graphics对象。如果函数返回true 时则默认的前景绘制将不会再绘制。轮廓绘制函数是在本地绘制之前 调用。
isPointInside
r/w - null | function(x,y), 一个hit测试函数,这个函数根据x,y坐标值判断该坐标点是否在该元素图形区域内,如果在则返回true ,这个元素可以是任意形状。
nodeIndex
只读 - Integer, 该节点在父节点容器中的索引位置。
nextNode
只读 - Element 或 Node , 该节点的下一个节点。若该节点是父容器中的最后一个则返回null 。
priorNode
只读 - Element 或 Node , 该节点的上一个节点。若该节点是父容器中的第一个则返回null 。
firstNode
只读 - Element 或 Node , 该节点的第一个子节点(元素/文本/注释)的引用。
lastNode
只读 - Element 或 Node , 该节点的最后一个子节点(元素/文本/注释)的引用。
isElement
只写 - 如果该节点是元素(Element)时返回true ,否则返回false 。
isText
只写 - 如果该节点是文本时返回true ,否则返回false 。
isComment
只写 - 如果该节点是注释时返回true ,否则返回false 。
for ... in
for(var
child in
element )
{ /* 循环体 */
} 或
for(var
(index,child) in
element )
{ /* 循环体 */
}
为element元素的每个子元素执行循环体中的代码。
示例, 对于html中的p 元素的for循环:Hello wonderfull world
循环将会执行一次,child 变量将是Element("em")。
this
(tagname[, text])
创建一个新的标签为tagname (字符串/标识符)的元素对象,它的内容为text。使用方法如下:
var el = new Element("option");
// 或者
var el = new Element(#option);
元素创建后处于 未连接 状态。为了连接到DOM中,可以使用父元素的insert 方法。
create
(object) :
Element
DOM元素的静态构造函数。这里的object 是一个用下面的微格式(microformat)定义的字符。
示例:下面的代码片段相当于创建一个元素,该元素包含标记:before Hi! after
:
var para = Element.create { p, "paragraph text" };
//或者文本是变量:
var para = Element.create { p, [paragraphText] };
clear
() :
undefined
清除一个元素的内容,移除它的所有子元素。
toString
() :
string
返回该元素表示的HTML字符串,该字符串是外HTML——包含头和尾标签、内容等同于html 的返回值。
clone
() :
Element
返回元素的一个新拷贝,该方法为深拷贝。 新元素处于 未连接 状态,可以使用insert()方法插入到DOM中。
select
(CSSselector :string
[, argument1 [, argument2, ... ]]) :
Element
返回满足CSS选择器(CSSselector , string)的第一个元素。CSSSelector可以包含格式化标识(如%d、%s),这些标识在最终的CSS选择器字符串中可以被argument1 ... argumentN 替代。该函数的使用规则和Stream.printf方法相同。
示例:如果文档包含
元素,则下面的语句:
var inp = self.select("input[type='text']");
将会设置inp
为这个元素的引用。
$
(
CSSselector
) :
Element
返回满足CSS选择器的第一个元素。
注意:该选择器写的时候不需要用""括住。
示例: 如果文档包含
元素,则下面的语句:
var inp = self.$( input[type='text'] );
将会设置inp
为这个元素的引用。
而且下面的代码片段:
var n = 3;
var li3 = self.$( ul > li:nth-child({n}) );
将会找到ul列表元素中第三个列表项。
select
(func , CSSselector : string
[, argument1 [, argument2, ... ]]) returns:
integer
调用func (函数引用)方法来遍历满足CSSselector 选择器的每个元素。func 函数接受一个参数,该参数为匹配元素的引用。 func 函数可以返回true 来停止遍历。
示例:下面的代码片段将会打印所有input元素的"name"属性: function printel(el) { stdout.println( el.attributes["name" ] ); } document.select(printel, "input");
selectAll
(CSSselector : string
[, argument1 [, argument2, ... ]]) returns:
Array
返回满足CSS选择器(CSSselector , string)的所有元素的数组。CSSSelector可以包含格式化标识(如%d、%s),这些标识在最终的CSS选择器字符串中可以被argument1 ... argumentN 替代。该函数的使用规则和Stream.printf方法相同。
$$
(
CSSselector
) returns:
Array
返回满足CSS选择器的所有元素的数组。
注意:该选择器写的时候不需要用""括住。
selectParent
(CSSselector : string
[, argument1 [, argument2, ... ]]) returns:
Element
返回在子/父链上满足CSS选择器的(CSSselector , string)的第一个元素。CSSSelector可以包含格式化标识(如%d、%s),这些标识在最终的CSS选择器字符串中可以被argument1 ... argumentN 替代。该函数的使用规则和Stream.printf方法相同。
注意:该方法也会检查本元素(this )是否满足CSS条件。
$p
(
CSSselector
) returns:
Element
返回在子/父链上满足CSS选择器的的第一个元素。
注意1:该选择器写的时候不需要用""括住。
注意2:该方法也会检查本元素(this )是否满足CSS条件。
selectParent
(func , CSSselector : string
[, argument1 [, argument2, ... ]]) returns:
integer
调用func (函数引用)来遍历每个满足CSSselector 的元素。func 函数接受一个参数,该参数为匹配元素的引用。 func 函数可以返回true 来停止遍历。
示例:下面的代码片段可以打印出所有父div的id属性:
function printel(el) { stdout.println( el.attributes["id" ] ); }
some.selectParent(printel, "div");
注意:该方法也会检查本元素(this )是否满足CSS条件。
$$p
(
CSSselector
) returns:
Array of Element s
返回在子/父链上满足CSS选择器的的所有元素数组。
注意1:该选择器写的时候不需要用""括住。
注意2:该方法也会检查本元素(this )是否满足CSS条件。
match
( CSSselector : string
[, argument1 [, argument2, ... ]]) returns:
true | false
检查该DOM元素是否满足给定的CSSselector 选择器。
$is
(
CSSselector
) returns:
true | false
检查该DOM元素是否满足给定的CSSselector 选择器。
注意:该选择器写的时候不需要用""括住。
belongsTo
(
parent : Element [,
useUITree : true |
false [,
includingThis : true |
false ]]
) :
true | false
如果在该元素的父链上存在parent 元素则返回true 。
如果useUITree 参数提供了且为true,则该函数使用UI关系而不是DOM树上的父/子链关系。例如,弹出元素可以被声明在它的宿主元素之外,但是如果宿主元素创建该弹出元素后使用该函数将返回true。
如果includingThis 参数提供了且为true,则若parent 为该元素本身是返回true : el.belongsTo(el,false,true) -> true。includingThis 默认为false 。
find
(x, y) returns:
Element .
返回相对于该元素在x、y坐标位置的子元素的引用。如果该位置没有元素,则返回该元素本身。
update
([deep]) returns: undefined
在修改后重新计算该元素(deep为true时)和刷新它的可视区域。如果由于某些操作会导致该元素尺寸有变化时,请设置deep=true 。若果仅仅是装饰属性(不会改变尺寸,如color属性)发生变化,请省略deep参数(或设置它为false )。
update
(stateUpdateFunction) returns: undefined
该方法用于"过渡更新(transactioned update)"。stateUpdateFunction 函数被调用时包含this 变量(指向该元素对象),且预期该函数会改变元素的一些状态、内容、或者它的子元素的状态。
"过渡更新(transactioned update)"机制用在元素期待它的"内容"更新有过渡效果,这些效果在CSS中使用transition:blend()、scroll-***()、slide-***()等定义的。
Element.update(stateUpdateFunction)
执行时做以下步骤:
制作该元素的初始状态快照;
调用提供的stateUpdateFunction
函数来应用所有的该元素的修改至新状态;
制作最终状态的该元素快照;
使用这两张快照开始过渡动画(如果在CSS中为该元素定义的话)。
如果没有在CSS为该元素定义过渡效果,则stateUpdateFunction
会被调用,且视图会立即将元素更新为最新状态。
refresh
( [
x ,
y ,
width ,
height ]
) returns: true|false
刷新该元素在屏幕上占据的区域。如果x 、y 、width 、height (元素内部的区域坐标)被指定,则只会刷新该部分区域。这个方法用在当你使用Graphics对象渲染了元素表面区域时。
animate
( nextStep : function [,
whenEnded : function] [,
duration : duration | integer]
) : undefined
在元素上开始一段动画。nextStep 为动画的步骤函数(修改尺寸、透明度等)。这个函数调用时包含this 变量(指向该元素对象),且它应该返回:
true - 继续动画,以系统定义的FPS;
integer - 毫秒数, 下一步动画执行的延时, 如果为0
则将停止动画;
duration - 下一步动画执行的延时, 如果duration为0则将停止动画;
false - 停止动画;
如果whenEnded 函数被提供,则它会在动画结束时被调用。
duration 为动画持续的总时间(毫秒)。如果提供了该参数则nextStep 函数的声明应该为:
function nextStep(progress: float) {}
其中,progress为0.0至1.0的浮点数——动画的进度。nextStep总是以接收到progress == 1.0作为最后一步。
一个整数——下一个步骤等待的毫秒数。如果返回0或非整数则动画终止。
否则step回调函数期待为无参数函数:
function nextStep() {}
box
( part [,
edge [,
relativeTo ]]
) returns: integer, 设备像素
返回该元素边缘的坐标。参数:
part -#left , #top , #right , #bottom , #width , #height 中定义的常量标识符之一。定义返回盒(矩形)的哪一部分。#part还可以接受以下常量:
如果part 是#rect ,则该函数返回4个值——左、上、右、下。使用示例:var (x1,y1,x2,y2) = this.box(#rect, #inner, #view)
;
如果part 是#rectw ,则该函数返回4个值——左、上、宽、高。使用示例:var (x,y,w,h) = this.box(#rectw, #inner, #view)
;
如果part 是#dimension ,则该函数返回两个值——宽、高。使用示例:var (w,h) = this.box(#dimension, #inner)
;
如果part 是#position ,则该函数返回两个值——左、上。使用示例:var (x,y) = this.box(#position, #inner, #view)
;
edge , 元素的边缘常量标识之一:
#margin - 外边距边缘;
#border - 边框边缘;
#padding - 内边距边缘;
#inner , 默认值 - 内部盒边缘;
#content - 内容盒边缘。内容盒这里是指元素的内容轮廓,且它不是元素内部盒。比如,等元素设置了overflow 属性时,内容盒可以大于内部盒。
#client - 客户区域。指#inner内部盒减去(可选的)滚动条区域。
#icon -元素图标覆盖的区域。图标这里指元素设置了foreground-repeat: no-repeat;的前景图片。如果该元素没有这样的图片,则函数返回的#width 、#height 为0。
relativeTo , 下面的值之一:
#screen - 返回相对于屏幕原点的坐标;
#root - 返回相对于根元素(视图)原点的坐标;
#parent - 返回相对于它的父元素原点的坐标。注意:是相对于父元素滚动位置。
#content - 返回相对于它的父元素的内容区的坐标。注意:不依赖于父元素的滚动位置。
#container - 返回相对于布局父元素的坐标。布局父元素可以是和DOM父元素不相同的。如position:absolute的元素的布局父元素就可能和DOM父元素不相同。
#self , 默认值 -所有坐标相对于该元素的内部盒原点。
#view - 返回相对于Sciter窗口(view对象)原点的坐标。
或者 如果relativeTo 等于以下值之一: 该函数将返回相应部分累积宽度,例:
var (mx1,my1,mx2,my2) = this.box(#rect, #margin, #inner)
; 这里的每个mx*值将是外边距、边框、内边距在左、上、右、下方向上的总和。或者说,这个调用会返回元素内部(内容)盒的外边距的距离。而且这个调用:var (mx1,my1,mx2,my2) = this.box(#rect, #margin, #border)
; 将只会CSS属性中margin-left、margin-top、margin-right、margin-bottom的计算值。
#margin - 外边距边缘;
#border - 边框边缘;
#padding - 内边距边缘;
#inner - 内部盒边缘;
若想获取更多信息,请看CSS 的ox model 规范: http://www.w3.org/TR/CSS2/box.html
intrinsicWidthMin
( ) : integer, 设备像素
返回元素的最小内在(min-intrinsic)宽度。 最小内在宽度是显示元素没有横向滚动条时的最小宽度。
intrinsicWidthMax
( ) : integer, 设备像素
返回元素的最大内在(max-intrinsic)宽度。最大内在宽度是指显示元素无需换行的情况下的最小宽度。例如,
元素的最大内在宽度是它的文本只有一行时的宽度。
intrinsicHeight
(
forWidth : integer ) : integer, 设备像素
返回元素在给定forWidth 宽度情况下的最小内在(min-intrinsic)高度。最小内在高度是指显示元素没有垂直滚动条时的高度。
toPixels
( length : length | string | symbol
[,
#width |
#height ]
) : integer, 设备像素
返回length转换为设备像素后的值。该转换是基于当前元素样式的上下文,所以el.toPixels( em(1.4) )
将会当前元素中字体尺寸的1.4em对应的像素值。
如果length是一个字符串或标识,则它会被当做一个CSS长度字符,所以length的值可以是el.toPixels(#xx-small)
或el.toPixels(#system-scrollbar-width)
。
第二个symbol参数用在百分比长度的转换时:var h50p = el.toPixels( pr(50.0), #height );
- 将会和下面的CSS声明计算出相同的值: height:50%
.
scroll
(part) returns: integer, 设备像素
返回元素的各种滚动相关的位置。参数:
part - 以下常量标识之一:
#left - 视图相对于内容原点视图左边位置;
#top - 视图相对于内容原点视图上边位置;
#right - 视图右边缘相对于内容盒右边缘的偏移;
#bottom - 视图下边缘相对于内容盒下边缘的偏移;
#width - 滚动区域的宽度;
#height - 滚动区域的高度;
#rect - 返回left,top,right,bottom四个整数值。
scrollTo
(
x :int,
y :int [,
smooth :bool [,
unrestricted : bool] ] ) : void
设置元素到x、y的滚动位置。该元素应该有overflow: hidden-scroll、scroll或者auto(即可以滚动它的内容区)。如果unrestricted 被设置为true,则滚动位置将被允许操作内容边界。
scrollToView
( [
toTop :bool,
smooth : bool = true ] )
滚动元素到视图——确保元素是可见的。如果toTop 为true ,则强制元素滚动到它的滚动容器的顶部。该方法做深滚动——它将试图使元素在它的所有滚动容器中可见。如果smooth 为false,则将不会使用动画滚动。
注意: 该方法只在建立了盒模型(display: block | inline-block | table-cell 等)的元素上。比如,表格中的不是一个盒元素。所以要滚到表格中的特定行时,你需要选择该行的第一个单元格元素来调用该方法。
mapLocalToView
(xLocal :int, yLocal :int ) : (int,int)
映射元素的xLocal/yLocal点到xView/yView (window)坐标,它会随着CSS的变化而改变。
mapViewToLocal
(xView :int, yView :int ) : (int,int)
映射视图的xView/yViewl点到xLocal/yLocal (element)坐标,它会随着CSS的变化而改变。
insert
( element |
html |
object |
array [,
index = Integer.MAX]
) returns: true | false.
element 为将被插入到该元素中index 位置的子DOM元素。如果index大于该元素当前的子元素数量,则新元素将会被添加到最后。Index 为可选参数,如果省略则元素会被添加到最后。如果element 已经是其他元素的子元素,则它将会立即取消与之前元素的连接。
如果第一个参数是字符串(html 文本),则将试图将它插入到给定位置。
如果第一个参数是一个对象,则它会被当做创建新DOM元素的模板。参考该对象的微格式定义
如果第一个参数是一个数组,则它将包含DOM节点的引用(元素 和/或 文本 节点)。
append
( element |
html |
object |
array ) returns: true | false.
等价于insert ( ... , Integer.MAX )
;
prepend
( element |
html |
object |
array ) returns: true | false.
等价于insert ( ... , 0 )
;
content
( element |
array [,
element 2 [,
element 3, ... ]]
) returns: true | false.
替换元素的内容。该函数是el.clear(); el.append(element1); el.append(element2); ...的短格式。
该方法可以用在设置中的单元格。它会妥善处理col/rowspans。
对于其他所有元素,elementN 可以是DOM元素、字符串、对象(使用微格式定义的元素模板)或者元素/节点数组。
$content
( .. inline html ..
) : Element
Stringizer方法,用inline html替代元素的内容。参数是Stringizer方法,即HTML可以这样提供:
var el = ... , num = ...;
el.$content(This is item number { num } );
该方法返回该元素本身。
$append
( .. html ..
) : Element
Stringizer方法,将html添加到元素的所有子元素最后。
该方法返回第一个添加的元素。
$prepend
( .. html ..
) : Element
Stringizer方法,插入html到元素的所有子元素第一个。
该方法返回第一个添加的元素。
$after
( .. html ..
) : Element
Stringizer方法,添加html到该元素的后面。
该方法返回第一个添加的元素。
$before
( .. html .. ) : Element
Stringizer方法,添加html到该元素的前面。
该方法返回最后一个添加的元素(即该元素的新this.prior )。
$replace
( .. html .. ) : Element
Stringizer方法,将该元素从DOM中移除并且将html替换到当前位置。
该方法返回第一个添加的元素。
nodes
( ) : Array
该方法创建一个数组并将子元素列表添加到该数组中。其中,文本和注释节点是Node对象,DOM元素是Element对象实例。
detach
( ) : Element
从它的父元素的子元素容器中移除该元素,所以当该方法调用后,该元素的parent 将会变成null 。如果update为true,则会为它的父元素调用update()。返回该元素。该方法不会销毁它的状态和附加到该元素上的行为,直到GC不在收集该元素(即没有指向它的引用)。
remove
( ) : Element
从它的父元素的子元素容器中移除该元素,所以当该方法调用后,该元素的parent 将会变成null 。如果update为true,则会为它的父元素调用update()。返回该元素。所有运行时状态和行为将会被该方法销毁。本地行为会接收到BEHAVIOR_DETACHED事件。
load
( url : string[,
headers : object]
) returns:
true/false
加载url 指定的文档的内容作为该元素的内容。对于设置了behavior:frame 的元素会加载url指向的html、样式和执行脚本或包含流。指定behavior:frame的元素在加载完成后会发送DOCUMENT_COMPLETE事件。而对于其他元素则只会加载文档的Body部分,且不会加载样式和脚本。如果url 指向一个外部资源(如"http://..."),则该方法是异步的,否则该方法将会使用同步方式加载。
如果headers 对象(键/值 映射表)被指定,且url是http/https,则HTTP GET请求将会将headers作为请求头。
load
( stream : Stream
) returns:
true/false
从内存流中加载文档的内容作为该元素的内容。对于设置了behavior:frame 的元素会加载stream流指向的html、样式和执行脚本。指定behavior:frame的元素在加载完成后会发送DOCUMENT_COMPLETE事件。而对于其他元素则只会加载文档的Body部分,且不会加载样式和脚本。
load
( html : string,
url :string
) returns:
true/false
从html 字符串中加载文档的内容作为该元素的内容。对于设置了behavior:frame 的元素会加载html参数中的html、样式和执行脚本。指定behavior:frame的元素在加载完成后会发送DOCUMENT_COMPLETE事件。而对于其他元素则只会加载文档的Body部分,且不会加载样式和脚本。
loadImage
( url : string [,
callback : function [, useCache: true|
false ] ]
) returns:
Image | null
从url中加载图像。如果callback 被省略,则引擎将会试图同步加载图像。否则(callback 是一个函数)引擎会异步处理请求且在图像加载后调用callback函数。
callback函数的声明是function callback(image),image 参数是一个Image类或null(当出错时)。
如果useCache 不为false,则该方法将尝试从图像缓存中获取图像,并且下载成功的图像也会放到缓存中。useCache默认值为false 。
callback函数的声明是function callback(image, status),image 参数是一个Image类或null(当出错时), status 为http状态(200、404等)。
bindImage
( url : string ,
img : Image
) returns:
true |
false
将img 对象绑定到url。作为结果,该img可以被用在CSS中(如作为背景)。URL可以是任意的字符串,如"in-memory:dyn-image1"。
bindImage
( url : string
) returns:
Image | null
返回先前绑定到该URL上的图像,如果没有图像则返回null。
request
(
callback : function | integer,
#get | #post | #post-data | #put-data | #post-json
| #put-json | #delete ,
url : string [,
params : object [,
headers : object] ]
) : Object | Stream | Bytes | Error
发送同步或异步HTTP数据GET/POST请求道服务端/页面(url),使用JSON-RPC调用。
#get 、#post、#post-data、#json 为标识符——发送的http请求类型:
#get - 发送纯HTTP GET请求, URL编码的参数(如果存在)被附加到表单的请求的url 中;
#post - 发送HTTP POST请求,参数作被序列化为Content-Type: application/x-www-form-urlencoded;charset=utf-8
;
#post-data - 发送HTTP POST请求,参数作被序列化为Content-Type: multipart/form-data; boundary= ...
;
#put-data - 发送HTTP PUT请求,参数作被序列化为Content-Type: multipart/form-data; boundary= ...
;
#post-json - 发送HTTP POST请求,参数作被序列化为JSON:Content-Type: application/json;charset=utf-8
;
#put-json - 发送HTTP PUT请求,参数作被序列化为JSON:Content-Type: application/json;charset=utf-8
;
#delete - 发送HTTP DELETE请求。
url 是一个字符串 - 处理HTTP请求的服务端页面(位置)的URL。
params 是一个对象, 它的属性是HTTP请求的服务参数。
headers 是一个对象 - 一个被单独附加到请求中的键/值对请求头。
returns: 对于异步请求返回true|false ;对于同步请求返回(status:integer,data:any)——请求的结果,data 值见下面,status为HTTP状态代码(如200 - 请求成功, 404 - 资源在服务端未找到)。
如果参数
callback 是一个整数,则该参数被当做超时值(毫秒数),且该函数执行
同步 请求。如果callback是一个函数,则服务端的响应将会调用
callback 函数来处理。
callback 函数的声明如下:
function dataArrivedCallback( data: any, status: integer );
data 值为以下之一:
Error 对象的实例, 在数据响应解析错误时;
stream 对象, 如果data为服务端返回文本类型(text/plain、text/html、text/xml等)。
对象、数组实例。如果响应有text/javascript、text/ecmascript、text/tiscript、 application/json类型的内容,且这些内容成功解析到data对象。
Bytes 对象, 如果服务端返回的类型是二进制类型(image / *等)。在这种情况下,Bytes.type会包含一个字符串——服务端报告的该数据的mime-type。
status为一个整数—— HTTP状态码(如200 - 请求成功, 404 - 资源在服务端未找到),如果该代码大于12000,则它是WinInet的错误代码。见http://support.microsoft.com/kb/193625。
服务端响应的data示例(type: text/javascript):
({ id : 1234, message : "Hello from XYS server!" }
)
- 在这种情况下,服务端返回的对象有两个属性:id和message。in this case server returns object having two properties: id and message. ({ 和 })的解释请看这里。
getState
( [
stateFlags :int]
) :int
返回元素的状态。stateFlags 参数是一个位集合——STATE_***常量的"或"操作集。 如果stateFlags 被提供,则函数返回整数 标识集——元素的状态标识和stateFlags 的"与"操作。如果stateFlags 未指定,则函数返回该元素当前在全状态标识集合。
setState
( stateFlags :int
) :void
设置该元素的状态标识并且更新文档在屏幕上的相应位置(处理样式和刷新)。
clearState
( stateFlags :int
) :void
清除元素的状态标识,且更新文档在屏幕上的相应位置。
capture
( onOff : true | false | #strict
) :void
element.capture(true ) - 设置"宽松"的鼠标捕获到该元素,鼠标消息被传递到该元素和它的子元素;
element.capture(#strict ) - 设置"严格"的鼠标捕获到该元素,鼠标消息仅被传递到该元素;
element.capture(false ) - 从该元素移除鼠标捕获。
popup
( el : Element[,
placement : int]
) :void
将el元素作为弹出窗口显示,位置相对于该元素。Placement 是下面两组数字的混合:
相对于this 元素的点( 又名 弹出锚点 )
1
- 弹出元素在该元素(锚点)的左下角;
2
- 弹出元素在该元素(锚点)的下面居中的位置;
3
- 弹出元素在该元素(锚点)的右下角;
4
- 弹出元素在该元素(锚点)的中间居左的位置;
5
- 弹出元素在该元素(锚点)的中间居中的位置;
6
- 弹出元素在该元素(锚点)的中间居右的位置;
7
- 弹出元素在该元素(锚点)的左上角;
8
- 弹出元素在该元素(锚点)的上面居中的位置;
9
- 弹出元素在该元素(锚点)的右上角;
popup 弹出元素放置在锚点上的点:
1 << 16
- popup元素的bottom-left在锚点上;
2 << 16
- popup元素的bottom-center在锚点上;
3 << 16
- popup元素的bottom-right在锚点上;
4 << 16
- popup元素的center-left在锚点上;
5 << 16
- popup元素的middle-center在锚点上;
6 << 16
- popup元素的middle-right在锚点上;
7 << 16
- popup元素的top-left在锚点上;
8 << 16
- popup元素的top-center在锚点上;
9 << 16
- popup元素的top-right在锚点上;
( 见小键盘上的数字 )。
placement 参数是可省略的。弹出位置也可以在CSS中通过popup-position
属性来定义。
popup
( el : Element,
x :int,
y :int ) :void
将el元素作为弹出窗口在x、y(相对于视图的坐标)坐标位置显示。Placement 是7。
( 见小键盘上的数字 )。
closePopup
() :void
如果el或者它的父元素是弹出窗口,则关闭弹出窗口。
timer
(
milliseconds : integer,
callback : function [,
avoidSameOriginCheck : bool ]
)
如果milliseconds 大于0,则该方法会为DOM元素创建一个有milliseconds 延时的计时器。
在milliseconds 毫秒延迟后,引擎会调用callback 函数并且有一个执行该dom元素的this 变量。如果你需要计时器继续执行,则callback 函数返回true ,否则返回false 。
调用timer()方法,且milliseconds = 0 时,则会停止计时器。
如果元素正在运行的计时器已经包含相同的callback函数(同源),则该计时器将会在增加新的计时器之前移除旧的计时器。设置avoidSameOriginCheck 参数未true 则会抑制同源匹配。
swap
(other : Element
) : null
呼唤两个元素的DOM位置——该方法的拥有者和other 元素。返回调用该方法的元素。
sendEvent
( eventCode :int
[
,
reason
: int
[,
owner : Element | null [,
data :value ]]]
) : true | false | value
在该元素的父/子链上冒泡传递(发送)事件。事件被该方法生成,且被链上的元素的onControlEvent 方法处理。
eventCode 是内建行为的逻辑事件代码 (见Event)。或者任意的大于0x1000的整数(自定义控件事件范围)。
reason 这里是任意一个整数值(该值对于发送者和接受者是知道的)。
owner 是一个可选的指向某项DOM元素。例如,在MENU_ITEM_CLICK事件中,它指向一个元素——弹出菜单的拥有者或null。
data 是任何一个JSON值——将会同BEHAVIOR_EVENT_PARAMS.data字段传递(见sdk/api/sciter-x-behavior.h文件)。
sendEvent 函数会遍历父子链,如果消息被消耗则返回true——即在父子链上的某个元素的
onControlEvent ()处理了该事件且返回true。如果父子链上某些元素处理了该事件且设置了
data 字段,则sendEvent()方法的data参数值会被更新。
sendEvent
( event :string
[,
data :value ]
) : true | false | value
在该元素的父/子链上冒泡传递(发送)事件。事件被该方法生成,且被链上的元素的onControlEvent 方法处理。
event 是一个事件名称(可能包含名称空间),见下面的Element.subscribe/unsubscribe()方法。
data 是任何一个JSON值——将会同BEHAVIOR_EVENT_PARAMS.data字段传递(见sdk/api/sciter-x-behavior.h文件)。
sendEvent 函数会遍历父子链,如果消息被消耗则返回true——即在父子链上的某个元素的
onControlEvent ()处理了该事件且返回true。如果父子链上某些元素处理了该事件且设置了
data 字段,则sendEvent()方法的data参数值会被更新。
postEvent
( event :string
[,
data :value ]
) : true
postEvent 方法将事件放到内部的发送队列中以便延迟调用sendEvent (name,data)发送消息。该方法是立即返回的。
postEvent
( eventCode :int
[
,
reason
: int
[,
owner : Element | null [,
data :value ]]]
) : undefined
postEvent 方法将事件放到内部的发送队列中以便延迟调用sendEvent 发送消息。该方法是立即返回的。
sendKeyEvent
( eventDef : object
) : true | false | undefined
sendKeyEvent 方法模拟按键事件。eventDef可能有以下字段:
{
type: Event.KEY_DOWN 或 Event.KEY_UP 或 Event.KEY_CHAR; // 按键事件的类型
keyCode: int; // 按键 或 字符代码 如'O'
altKey: true 或 false; // 可选, 'ALT' 键按下标志
shiftKey: true 或 false; // 可选, 'SHIFT' 键按下标志
ctrlKey: true 或 false; // 可选, 'CTRL' 键按下标志
shortcutKey: true 或 false; // 可选, 'CTRL/win' 或 'COMMAND/mac' 键按下标志
commandKey: true 或 false; // 可选, 'WIN/win' 或 'COMMAND/mac' 键按下标志
}
在捕获/冒泡过程中,该元素或作为target参数。若事件被处理了,则返回true。
sendMouseEvent
( eventDef : object
) : true | false | undefined
sendMouseEvent 模拟鼠标事件。eventDef可能有以下字段:
{
type: Event.MOUSE_ENTER或MOUSE_LEAVE或MOUSE_MOVE或MOUSE_UP或MOUSE_DOWN或MOUSE_DCLICK或MOUSE_WHEEL或MOUSE_TICK或MOUSE_IDLE, // 鼠标事件类型
altKey: true 或 false; // 可选, 'ALT' 键按下标志
shiftKey: true 或 false; // 可选, 'SHIFT' 键按下标志
ctrlKey: true 或 false; // 可选, 'CTRL' 键按下标志
shortcutKey: true 或 false; // 可选, 'CTRL/win' 或 'COMMAND/mac' 键按下标志
commandKey: true 或 false; // 可选, 'WIN/win' 或 'COMMAND/mac' 键按下标志
mainButton: true 或 false, // 可选, 鼠标左键按下标志
propButton: true 或 false, // 可选, 鼠标右键按下标志
x: int, // 鼠标x坐标,相对于视图
y: int, // 鼠标y坐标,相对于视图
}
在捕获/冒泡过程中,该元素或作为target参数。若事件被处理了,则返回true。
post
( callback : function [,
only_if_not_there :boolean]
) : undefined
该方法运行延迟执行callback 函数。当调用callback函数时,this 环境变量指向post的调用者。
only_if_not_there 可选参数如果被指定,且为true 时,运行只延迟发送事件一次。多次post相同的callback函数时,它将会post队列中相同的入口。
url
( [
relativeUrl : string ]
) : string
该方法使用文档的url作为基url,和 relativeUrl 组合成绝对url。如果没有relativeUrl ,则只返回当前DOM元素所属的文档的url。
sort
( comparator : function
[,
fromIndex : integer [,
numOfElements :integer]]
В ) : void
使用comparator 函数来排序元素的子元素。comparator 函数的声明必须是:
function cmp(el1: Element, el2: Element) : int
如果返回负数则认为el1小于el2,如果返回0则认为他们相等,如果返回正数则认为el1大于el2。
fromIndex 和numOfElements 用于定义排序元素的范围。
move
( [
x : int,
y : int [,
w : int,
h : int] [,
relto ] [,
mode ][,
referencePoint : int]
) : void
该方法将该元素变成一个"调皮鬼"——它将独立于其他DOM元素进行移动:
声明该元素position:popup 且移动它到position(x ,y )。如果元素移动到了视图外面则引擎会为它创建一个弹出窗口。第三个参数描述了x和y的角色。如果提供了w 、h 参数则将会改变元素的尺寸。mode 参数:
#auto - 如果元素移动到视图外面将会创建窗口。如果元素在视图内则它会被渲染为popup:fixed。
#attached-window - 强制引擎为该元素创建一个弹出窗口。该窗口和它的宿主窗口(视图)是同步移动的。
#detached-window - 强制引擎为该元素创建弹出窗口,该元素的窗口位置独立于它的宿主窗口。
#detached-topmost-window - 与#detached-window 相同,不过是创建在最顶窗口层上。
relto 指示x,y坐标的类型,可以是: #view , #root , #screen 或#self 。默认为#view .
referencePoint 是一个1到9之间的数字 - 定义x,y坐标代表的位置。7代表左上角,5代表元素的中间, 请参考键盘上的数字键盘。注意:如果定义了referencePoint ,则x/y定义的是相对于元素边框盒 的位置,否则x/y是相对于内容盒的位置。
参考示例:sdk/samples/ideas/moveable-windows/ and sdk/samples/ideas/rect-tracker/ 。
调用move()
函数没有参数时将还原元素的默认位置。
见: Element.style.dimension()
方法。
textWidth
( text : string
) : int
以该元素的当前字体计算text文本的宽度。如果文本使用"\n"分隔多行则该方法将返回最宽的字符串的宽度。
textHeight
( text : string
) : int
以该元素的当前字体和行高计算text文本的高度。如果文本使用"\n"分隔多行则该方法将返回所有行字符串高度之和。
subscribe
(
handler : function,
eventGroup : int [,
eventType : int]
) :
将handler 函数绑定到该元素DOM对象特定的事件上。
handler 函数的声明应该为: function(evt ) {...}, 其中evt为描述当前事件详细信息的事件(Event)对象。
eventGroup 参数这里是以下常量之一:
Event.MOUSE
- 鼠标事件组( 如Event.MOUSE_DOWN、Event.MOUSE_UP等 );
Event.KEY
- 键盘事件组( 如Event.KEY_DOWN、Event.KEY_UP等 );
Event.BEHAVIOR_EVENT
- 人工合成事件组 ( 如控件事件Event.BUTTON_CLICK、 Event.HYPERLINK_CLICK、Event.BUTTON_STATE_CHANGED等 );
Event.FOCUS
- 焦点事件组;
Event.SCROLL
- 滚动事件组;
Event.SIZE
- 尺寸改变事件;
eventType 参数这里是为特定事件组定义的以下常量之一。 eventType 参数是可选的——如果它没有被提供则handler会接收到eventGroup 的所有事件。
subscribe()方法依序附加多个和独立的事件处理函数到一个元素上。
注意:subscribe()不是下面定义的事件处理器的onMouse (evt)、onKey (evt)等方法的替代。这是两种不同的事件处理方式。onXXXX ()方法用于为元素类的事件处理器类(Behaviors)中定义事件处理。而subscribe()/unsubscribe()方法用于将事件处理器附加到特定的元素上。
该方法返回调用它的元素,则运行链式调用subscribe()。
subscribe
(
event : string [,
selector : string] ,
handler : function ) :
将handler 函数绑定到该元素或它的子元素DOM对象特定的事件上。event 参数这里是一个字符串,它可以接受符号事件名称。
事件名可以含有名称空间。例如:"click.mywidget"
为一些mywidget 组件定义了单击事件。名称空间在你需要一次unsubscribe多个事件处理器时会比较有用。例如el.unsubscribe(".mywidget")
会移除所有包含mywidget 名称空间的事件处理器。
selector 是一个可选参数——子元素的CSS选择器。当需要给一些特定子元素订阅事件处理器时可以使用这个参数。
handler 参数可以是任意的 function(evt:Event) {...}
- 当事件发生时被调用的回调函数。this 变量被设置到evt.target
字段上 - 事件发生的最初元素。
要在元素的EVENT_SINKING阶段订阅事件,则需要事件名前添加~
标识符。例如下面的示例:container.subscribe("~keydown", function() {...});
该处理器将会在它的子元素之前接收到keydown事件。
注意:这个方法模仿jQuery的.on()
方法且具有相同的语意。
on
上面的subscribe (event : string [, selector : string] , handler : function)方法的别名。
unsubscribe
(
handler : function ) or
(
eventGroup : int [,
eventType : int]) :
unsubscribe ()方法从元素上移除事件处理器。
unsubscribe
(
event : string [,
selector : string]) :
该方法移除元素上匹配的事件处理器。这些事件处理器时使用上面的subscribe("name",...)方法定义的。 示例: el.unsubscribe("click")
; 将会移除所有的"click"名称的事件处理器,即使它们包含名称空间(如"click.mywidget")。
注意:这个方法模拟jQuery的.off()
方法。
off
上面的unsubscribe 方法的别名。
commonParent
(
other : Element) : Element
返回this 与other DOM元素的共同父元素。
row
(
rowNo : integer) : array of Elements
该函数返回该元素给定行的元素列表(数组)。
column
(
colNo : integer) : array of Elements
该函数返回该元素给定列的元素列表(数组)。
rowY
(
rowNo : integer) : (y: integer, height: integer)
该函数返回给定行的位置和行高。
columnX
(
colNo : integer) : (x: integer, width: integer)
该函数返回指定列的位置和列宽。
transact
(
action :function [,
name :string] ) :
true |
false
该方法使可以进行事务操作——一组可以undone/redone的操作集合。action 函数的声明为function action(transaction) { ... }
transaction是一个Transaction实例——用于修改DOM状态的原语。当用户在编辑器上选择撤销/重做后,任何修改可以通过这些方法来撤销/重做。
execCommand
(
command :string [,
attributes :map] ) :
true |
false
execCommand方法用于执行可撤销的编辑命令。command 字符串标识要执行的命令。
编辑命令对所有可编辑元素( 、
"edit:cut"
- 剪切选择内容(selection) - 复制选择内容(selection)到剪切板并移除它;
"edit:copy"
- 复制选择内容到剪切板;
"edit:paste"
- 粘贴剪切板中的内容;
"edit:selectall"
- 选择元素的所有内容;
"edit:undo"
- 测试最后一次编辑操作;
"edit:redo"
- 重做最后一次撤销的编辑操作;
"edit:delete-next"
- 如果有选择内容,则删除选择的内容,否则删除下一个字符;
"edit:delete-prev"
- 如果有选择内容,则删除选择的内容,否则删除前一个字符;
"edit:delete-word-next"
- 如果有选择内容,则删除选择的内容,否则删除下一个单词;
"edit:delete-word-prev"
- 如果有选择内容,则删除选择的内容,否则删除上一个单词;
富文本(richtext)元素(如)支持的编辑命令:
"edit:insert-break"
- 本质上这个相当于"ENTER"(VK_RETURN)命令, 准确地说,DOM的修改取决于上下文;
"edit:insert-soft-break"
- "SHIFT+ENTER"命令, 插入一个
分隔符,但是准确地说,DOM的修改取决于上下文;
"format:apply-span:{tag-list}"
- 将选择内容包装到一个span类型的元素中, 如果选择内容中包含{tag-list}中的某元素时,则这些标签将会被移除。
{tag-list}
时一个以管道符(|
)分隔的标签名称列表,比如:execCommand("format:apply-span:b|strong")
- 将会将选择内容包装到...
中,同时从选择内容中移除 其他所有的
和
元素。
以外一个map参数可以保护一个DOM属性列表,该属性列表会条件到包装元素上, 比如:execCommand("format:apply-span:font",{color:"#F00"})
- 将会将选择内容包装到...
元素中。
"format:toggle-span:{tag-list}"
- 如果选择内容中包含{tag-list}中的某元素,则移除所有这些元素,否则做和"format:apply-span:..."
一样的动作。
"format:toggle-list:{list-tag}"
- 将选择内容转换到一个列表中。如果选择内容已经是指定的列表类型,则列表中的项将会被转换为简单段落;
"format:toggle-pre"
- 转换选择内容包装到
块中,或从
中移出来。
"format:indent"
- 将选择内容包装到
或sub-list中。
"format:unindent"
- 将选择内容从
或sub-list中移出到上一级。
"format:morph-block:{to-tag}"
- 修改被选择的块元素的标签。比如,通过这种方式可以将当前的
元素修改为元素。
queryCommand
(
command :string [,
attributes :map] ) :
integer
queryCommand方法反馈指定命令的状态以及是否允许使用。这个方法的参数与execCommand()相同。返回值是一个整数 - 以下标志的混合值:
0x01
- 命令处于"on"或"selected"状态。例如,当选择文本包含
或
元素时,queryCommand("format:apply-span:b|strong")
将会返回0x01值。
0x02
- 命令处于"disabled"状态,或者当前上下文不允许该命令。
insertNodeBefore
( node: Node)
将node插入到DOM树中该元素之前。
insertNodeAfter
( node: Node)
将node插入到DOM树中该元素之后。
appendNode
( node: Node)
将node:插入到该元素的子节点的最后,是其成为该元素的最后一个子节点。
prependNode
( node: Node)
将node:插入到该元素的子节点的最前,是其成为该元素的第一个子节点。
元素的事件
捕获/冒泡 事件:
onMouse(event) : true|false
onKey(event) : true|false
onFocus(event) : true|false
onControlEvent(event) :true|false
合成(逻辑)事件 :
onGesture(event): true|false
onCommand(event): true|false
命令, 指的是类似
无冒泡 事件
onScroll(event) : true|false
Behavior特有事件
根元素(Root)特有事件
Event.MOUSE_ENTER
鼠标/指针 进入到该元素
Event.MOUSE_LEAVE
鼠标/指针 离开该元素
Event.MOUSE_MOVE
鼠标/指针 在该元素上移动
Event.MOUSE_DOWN
鼠标按钮之一在该元素上按下。通过event.mainButton 和event. propButton来识别是哪个按钮按下。
Event.MOUSE_UP
鼠标按钮之一在该元素上按起。通过event.mainButton 和event. propButton来识别是哪个按钮按起。 如果只检查MOUSE CLICK事件,则请使用下面的条件: event.type == Event.MOUSE_UP && this.getState(Element.STATE_PRESSED)
Event.MOUSE_CLICK
鼠标在该元素上单击。
Event.MOUSE_DCLICK
鼠标在该元素上双击。
Event.MOUSE_WHEEL
鼠标滚轮在该元素上转动。event.wheelDelta 为鼠标滚轮转动量。
Event.MOUSE_TICK
重复事件,当鼠标某个按钮按下时被触发。
Event.MOUSE_IDLE
脉冲事件,当鼠标短时间没有移动时会触发。如果该事件没有处理,则引擎会使用它来弹出该元素的气泡提示。
Event.KEY_DOWN
键盘按键被按下。event.keyCode 为该按键的虚拟键代码。
Event.KEY_UP
键盘按键按起。event.keyCode 为该按键的虚拟键代码。
Event.KEY_CHAR
某个按键字符被按下。event.keyCode 是该字符的UNICODE代码。
Event.GOT_FOCUS
元素获取输入焦点事件。
Event.LOST_FOCUS
元素失去输入焦点事件。
Event.BUTTON_CLICK
按钮点击事件,被button, checkbox, radio 这些行为支持。
Event.BUTTON_PRESS
鼠标/按键 在按钮上按下事件。被button, checkbox, radio 这些行为支持。
Event.BUTTON_STATE_CHANGED
按钮的状态(value值)改变事件。被checkbox, radio 这些行为支持。
Event.EDIT_VALUE_CHANGING
输入框的值将被改变事件。被edit, number, decimal, date, masked 这些行为支持。element.value 反应旧的值。
Event.EDIT_VALUE_CHANGED
输入框的值已被改变事件。被edit, number, decimal, date, masked 这些行为支持。element.value 反应新的值。
Event.SELECT_SELECTION_CHANGED
元素中元素选择器的选择内容被改变事件。被select, dropdown-select, calendar 这些行为支持。
Event.SELECT_STATE_CHANGED
元素中元素选择器的某项的状态改变事件。当select 中的某些被折叠/展开时被触发。event.target 是状态被改变的项。当日历改变月份时,behavior: calendar 会发送该消息,通过处理该消息你可以更新日历中的DOM。
Event.HYPERLINK_CLICK
点击超链接事件。event.target 为那个超链接元素。
Event.ACTIVATE_CHILD
请求容器激活它的子元素事件。当为元素定义了快捷键且被动触发时,accesskey 处理器会发送该消息。例如,Tabs空间中的tab。见extenders.js / type Tabs。
Event.POPUP_REQUEST
Secret stuff.
Event.POPUP_READY
Event.POPUP_DISMISSED
Event.MENU_ITEM_ACTIVE
当菜单项高亮时被触发。
Event.MENU_ITEM_CLICK
当单击菜单项时。event.target 是单击项。event.owner 是弹出菜单的拥有元素。
Event.range 0x1000 .. 0x7FFF
自定义控件事件。在这个范围内的任何代码都可以使用element.sendEvent(code,...) 来发送消息。 例如,如果定义了一个行为类,它看上去像一个按钮,则你可以使用element.postEvent(Event.BUTTON_CLICK,...) 来通知其他元素发生了按钮单击事件。
手势,DOM事件,在触摸屏器件上支持该事件。
见 事件(Event)对象定义中的手势(触摸屏)事件代码 。
Event.COMMAND_EXEC
执行命令: event.command:string 为被执行的命令, event.data - 参数。
Event.COMMAND_QUERY
查询命令执行的状态或是否被允许。
Event.SCROLL_HOME
滚动请求,特别是 or 。
在这种情况下,SCROLL_POS使用
event.scrollPos 字段来获取请求的滚动位置。
Event.SCROLL_END
Event.SCROLL_STEP_PLUS
Event.SCROLL_STEP_MINUS
Event.SCROLL_PAGE_PLUS
Event.SCROLL_PAGE_MINUS
Event.SCROLL_POS
attached() : void
behavior类的方法。如果在类型定义中定义了该事件,则它会在该DOM元素附加该行为时被调用。this 变量执行该行为附加的元素。 attached ()等价于一个构造函数。
onTimer()
计时器脉冲事件。使用element.timer(milliseconds) 来启动计时器。若返回false 则终止计时器。
onSize()
元素尺寸改变事件。若想获取元素尺寸,请使用this.box() 函数。
self.ready()
文档加载的最后一步生成该事件。
self.closing(reason)
文档将被关闭时触发。事件处理器可以通过返回false 来阻止文档的卸载。reason参数可以为以下标识符:- #by-chrome - 用户点击窗口上的close按钮;- #by-code - 调用view.close();- #by-load - 文档加载新文档时导致旧文档被卸载。
Element.create和Element.insert方法中的 对象模板微格式
对象模板是用于生成新元素的对象文本。它应当遵循以下规则:
{
div, //强制,第一个属性,它没有值——DOM元素的标签名,如div 、p 、option 、select 等。
attr1name : "attr1value" , //可选, 创建DOM元素的属性attr1name
attrNname : "attrNvalue" , //可选, 创建DOM元素的属性attrNname
"some text" , //可选字符串,DOM元素的文本(当该元素是文本容器,如p 、 text 、span 等时)。
[ object-1, "text" , ... object-N ] //可选数组模板——定义元素的子元素和文本
}
"文本"和[ 子元素数组 ]是互斥的,只能定义其中一个。
示例, 请看下面的脚本:
sb.insert
{
div, class:"dyn",
[
{p, "文本1" },
{p, ["文本2 前", {button, "Hi!"}, " 后"] }
]
};
等价于:
sb.insert(
""
"文本1"
"文本2 Hi! 后"
""
);
你可能感兴趣的:(sciter)
golang windows mysql_golang开发windows界面
白石菊姐姐
golang windows mysql
在awesome-go节点下有不少开发界面的库,大部分是基于web,gtk,qt跨平台的,也有基于scitergo绑定的go-sciter,基于原生包装的跨平台的库ui,只支持Windows桌面端的walk个人倾向于后2个,适合个人的技术栈,试用了下ui这个库,demo比较少就4个,运行起来有点卡,而且生成的可执行文件很大.最重要的是不支持设置控件坐标(没找到),而且开放的接口比较少.下面对比下u
Htmlayout手册及调试工具
63d3ca0ea4a3
目前htmlayout官方网站已下架htmlayout相关文档htmlayout官方手册目录结构如下:编写前前后后花费时长1个月,参考来源如下:aardio官方论坛htmlayout板块置顶教程、精华帖(主要)htmlayout官方文档Sciter帮助文档遨游MX3引擎文档论坛用户@itdiy编写的参考手册htmlayout官方群文件w3cschool文档地址:Htmlayout手册调试工具:Ht
其他笔记 - Electron代替品探索过程
canmoumou
其他 electron chrome
目录前言替代品一览C#(.Net)C++DartGoJavaJSPythonsciter测试前言Electron是基于Node.js和Chromium的,可以把前端代码打包成桌面应用的工具,使得JavaScript,HTML和CSS跨平台部署。但是由于各种原因,不够精巧,体积太大,资源独占,发布不便,源码保护做的不好等等,所以不适用于某些场合。最近要做嵌入式上位机开发,于是挨个测试一下。替代品一览
Python3结合Sciter编写桌面程序
python
本文写于2017.8.21,不保证之后版本的兼容性第一节基础介绍及最简单测试先上流程图在线流程图废话?最近在学Python3,啃书啃不下去,咱是那种用到啥学啥的类型,刚好想做一个扒图的程序,权当练习。选用Sciter的理由...因为咱是前端,先不说sciter有多好,至少目前是满足的。需求:界面多站点预览图片下载原图科学上网对一个扒图操作而言,单纯的Py就够了,网上栗子多得是,就不在废话但对用惯W
Python3结合Sciter编写桌面程序第二节
python
第二节将任务添加到队列!上一个栗子只是简单实现了下网页与后台的通信defclickMe(self):#你可以在这里处理任何你想要的操作self.call_function('clickCallBack','你已经点到我了!')但由于是同一个进程,如果你做了很耗时的操作,比如下载一张图片之类的IO操作......你会发现,窗口卡住了,一般表现为窗口泛白,出现未响应的提示......但这并不是程序真的
sciter.js的下载、demo和helloworld
三巧
javascript 前端 html sciter
1、下载官方SDKSciter.JSSDK官方地址、Sciter.JSSDKonGitLab下载后解压2、运行demo打开根目录的run-calculator-sciter.bat脚本3、新建项目文档:Sciter的HTML组件创建文件夹hisc将文件.\sciter-js-sdk-main\bin\windows\x32\scapp.exe复制到hisc文件夹下载hello图标,png格式即可,
安装包UI美化之路-通过nsNiuniuSkin来做Electron程序的打包、发布与升级
大蓝头
NSIS 安装包 ui nsis nsNiuniuSkin 安装包 electron
nsNiuniuSkin从发布之初,因其简单、简洁、高效,受到了非常多公司的青睐,现在已经越来越多的公司采用我们的这套解决方案来制作安装包了!从一个安装包UI插件,逐步演化成一套集美观、安全、简洁、自动化为一体的完整的解决方案,实属不易,感谢所有朋友的信任!前言网上有不少关于Electron安装包美化的文章,有使用sciter的,有使用QT的,也有基于我们早期版本进行深度或简单集成的;整体看下来,
Sciter View Object
Gold_Z
title:SciterViewObjecttags:sciter视图对象表示运行当前脚本的窗口。view–当前视图对象(运行脚本的视图对象)可以通过全局view变量访问。WINDOW_MINIMIZED最小化WINDOW_MAXIMIZED最大化WINDOW_HIDDEN隐藏WINDOW_SHOWN显示WINDOW_FULL_SCREEN全屏:view.state属性值属性root:r–Elem
Sciter 结合 PReact 实现组件公共逻辑抽离
усил
桌面应用sciter javascript 前端 preact sciter 高阶组件
Sciter结合PReact实现组件公共逻辑抽离下面例子是获取鼠标移动位置,将这部分逻辑进行抽离一、使用高阶组件抽离公共逻辑import{Component}from'./preact.js';exportconstHOCFactory=(Component)=>{classHOC
【sciter】组件封装总结
усил
桌面应用sciter javascript 前端 html
sciter组件封装总结1、如何确保样式不发生覆盖由于组件封装使用的是原生能力(html,css,js)。因此在使用类名时添加一个前缀码(shuttle)。classAppextendsElement{render(){returen}
前端不用Electron也能写Win应用 动手实现一个SwitchHosts程序
LnEoi
前端
说到前端写Windows应用程序,首先想到的一定是Electron,这次我们换一个小众点的工具aardio。aardio是一个很轻量的工具,有着自己的语法,只面向windows应用开发,刚好其中也有支持前端应用打包功能。选型aardio中涉及到HTML+CSS+JS的功能。有ChromeApp、Electron,同时还有Sciter.js、HTMLayout两个UI引擎。一下子就有四种选项,这里按
Sciter2 之一:封装Sciter2到CWnd的子类中
伍心
Sciter2
封装Sciter2到CWnd子类关键词:sciter2、MFC、CWnd以前一直用MFC做界面,虽有朋友推荐多种界面设计,但也就看看,从没真正去了解。最近帮朋友做导航界面,明确要求用HTMLayout,网上搜索了下,看了下介绍,感觉sciter2比HTMLayout做的界面还炫丽,朋友同意后,今天就开始接触。目的是继承CWnd,生成sciterWnd,然后将sciter2封装在里面,通过换html
go语言使用go-sciter创建桌面应用(六) Element元素操作和Event事件响应
weixin_33795743
详细的文档请看下面两个链接:https://sciter.com/docs/content/sciter/Element.htmhttps://sciter.com/docs/content/sciter/Event.htmdemo8.html代码如下:tiscript脚本学习#mouse{border:1pxsolid#ccc;width:500px;height:500px;}11112222
Sciter使用心得
weixin_30375427
1.div双击事件$(div).onMouse=function(evt){switch(evt.type){caseEvent.MOUSE_DCLICK://双击处理工作break;}returnfalse;};2.访问div自定义属性访问div自定义属性$(div).@["type"]=“type1”;3.移除自定义属性访问div自定义属性$(div).attributes.remove("t
sciter-前端发送数据给后端
打小我就狂
sciter MFC 第一次工作 webview
$(#scan_Now).onClick=function(){/*varmyArray=newArray();myArray[0]=$(#aaTestID_1).checked;myArray[1]=$(#aaTestID_2).checked;myArray[2]=$(#aaTestID_3).checked;myArray[3]=$(#aaTestID_4).checked;myArray[
sciter-界面大小限制自适应笔记--案列位置;
打小我就狂
MFC sciter 第一次工作 webview
functionself.ready(){var(sx,sy,sw,sh)=view.screenBox(#workarea,#rectw);var(w,h)=self.$(body).box(#dimension);//gettingdeclareddimensionw=350;h=400;stdout.println("width:"+w+"heigh:"+h);view.move(sx+(s
Sciter----交互学习
打小我就狂
sciter
classMysciter:publicsciter::window{public:Mysciter():window(SW_TITLEBAR|SW_RESIZEABLE|SW_CONTROLS|SW_MAIN|SW_ENABLE_DEBUG){m_pMakePE=NULL;}BEGIN_FUNCTION_MAP//这里操作传输控件消息FUNCTION_0("home_scan",Home_sca
sciter 打开文件获取路径操作
打小我就狂
sciter
Testinput[type=path]{display:inline-block;prototype:PathInput;font:system;flow:horizontal;border:1dipsolidthreedshadow;background:window;height:1.8em;}input[type=path]>caption{display:block;flow:text;
sciter 自定义对话框
打小我就狂
sciter
css位置:/*************对话框操作**********************/body.dialog-shown{filter:blur(25dip);foreground-color:rgba(0,0,0,0.1);transition:foreground-color(linear,400ms);}div.dialog-frame>caption{padding:05dip;
Sciter 简单实用说明--初建项目
打小我就狂
教程 sciter MFC
1.下载SciterSDK,解压官网下载地址:https://sciter.com/download/2.打开vs2015以上,点击新建项目Win32(MFC也可以操作都差不多,这里用win32)Win32项目,项目名称MySciter项目创建后打开项目设置sciter头文件就是sciterSDK包里面的include文件夹6.把项目中的MySciter内容用下面的内容替换#include"std
sciter中文帮助文档跟sciter按钮的交互过程
打小我就狂
MFC 第一次工作 sciter
sciter中文帮助文档:https://download.csdn.net/download/qq_42095701/11285695按钮交互过程:1.HTML中看到的声明:view是一个全局函数有他才能两边交互C++里面的声明与交互关键词(.H):C++里面的代码实现(CPP)://这里是进度条的页面structthread_params{sciter::valuetaskId;sciter:
MFC创建sciter项目-----笔记
打小我就狂
MFC 第一次工作
环境:VS2019;创建一个MFC基于对话框;类是Dlg;两个类不需要。只要MFC的界面框架:项目右键属性----》配置属性-----------》常规-----------------》输出目录改成bin目录(后期需要丢库。自己知道的也可以不改)看图吧:懒得打:把sciter头文件加载进附加库目录;修改DPI把sciter里面的sciter-win-main.cpp丢到工程目录下并加载进项目VS
sciter 自定义弹窗带阻塞功能
打小我就狂
sciter
主界面tis操作:注意:程序运行的不能使用这个弹窗要重新生成弹窗。他会阻塞程序运行从而程序崩溃。封装函数:functionMsgBoxOneButton(TipsText){varinitialData={name:TipsText};varr=OK(initialData);stdout.println("返回的东西r="+r);returnr;}functionMsgBoxTwoButton(
sciter 与其他页面交互
打小我就狂
sciter
view.parameters.onRegSuccess();调用函数指针。$(#KeyREG).onClick=function()主页{functionRegSuccessCallBack(){$(#TrialTime).style["display"]="none";$(#shop_key).style["display"]="none";}view.window{url:self.url(
sciter打包html发布版本
打小我就狂
sciter 第一次工作
自带打包器要先生成一个。bat文件。里面就是上图的内容。打包好后是下图的代码然后生成Release版本发布了。
sciter事件(Event)对象
打小我就狂
sciter
事件(Event)对象代表用户交互事件。事件和相对应的事件处理器定义在事件中。常量事件组代码(用于Element.subscribe()方法)鼠标事件代码键盘事件代码滚动事件代码手势(触摸屏)事件代码焦点事件代码逻辑事件代码(来自于内建行为)事件标志位拖动模式虚拟按键代码-KEY_DOWN和KEY_UP事件中keyCode的值属性MOUSE鼠标事件组KEY键盘事件组FOCUS焦点事件组BEHAVI
sciter元素(Element)对象
打小我就狂
sciter
元素(Element)对象代表DOM元素。拥有子对象(sub-objects):属性(attributes)和样式(styles)。元素(Element)类派生自节点(Node)类。常量STATE_LINKSTATE_HOVERSTATE_ACTIVESTATE_FOCUSSTATE_VISITEDSTATE_CURRENTSTATE_CHECKEDSTATE_DISABLEDSTATE_READ
学习sciter
HHHHHerbert
SCITER sciter
sciter入门介绍什么的就免了.直接进入正题平台:Windows10IDE:Visualstudio2017首先从官网下载最新的SDK,https://sciter.com/download/创建流程.https://sciter.com/forums/topic/simple-question-about-sciter/总结一下关键点.(注意:官网教程里的SDK目录和项目目录是同级目录,所以使
[Sciter系列] MFC下的Sciter–3.Sciter脚本与底层交互
笨笨D幸福
界面库 C/C++
[Sciter系列]MFC下的Sciter–3.Sciter脚本与底层交互,脚本调用底层自定义的方法函数。本系列文章的目的就是一步步构建出一个功能可用,接口基本完善的基于MFC框架的SciterFrame程序,以此作为以后程序的基础。其中,文章中按照如下逻辑编排(解决如下问题):1、使用什么环境2、完成什么功能3、如何完成1、工程环境:VS2010+Sciter-SDK+Win7建议:HTML页面
Sciter(HTMLayout)中元素的 增 删 改 查
笨笨D幸福
C/C++ 界面库
先看看效果:注:SDK使用的是Sciter3BetaSDK,代码可以通用。HTML代码:testhello你的手啊!----Win32程序中的头文件:#include"stdafx.h"#include"W32Test.h"#include"include/sciter-x.h"#include"include/sciter-x-dom.hpp"#pragmacomment(lib,"sciter
JAVA中的Enum
周凡杨
java enum 枚举
Enum是计算机编程语言中的一种数据类型---枚举类型。 在实际问题中,有些变量的取值被限定在一个有限的范围内。 例如,一个星期内只有七天 我们通常这样实现上面的定义:
public String monday;
public String tuesday;
public String wensday;
public String thursday
赶集网mysql开发36条军规
Bill_chen
mysql 业务架构设计 mysql调优 mysql性能优化
(一)核心军规 (1)不在数据库做运算 cpu计算务必移至业务层; (2)控制单表数据量 int型不超过1000w,含char则不超过500w; 合理分表; 限制单库表数量在300以内; (3)控制列数量 字段少而精,字段数建议在20以内
Shell test命令
daizj
shell 字符串 test 数字 文件比较
Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真
实例演示:
num1=100
num2=100if test $[num1]
XFire框架实现WebService(二)
周凡杨
java webservice
有了XFire框架实现WebService(一),就可以继续开发WebService的简单应用。
Webservice的服务端(WEB工程):
两个java bean类:
Course.java
package cn.com.bean;
public class Course {
private
重绘之画图板
朱辉辉33
画图板
上次博客讲的五子棋重绘比较简单,因为只要在重写系统重绘方法paint()时加入棋盘和棋子的绘制。这次我想说说画图板的重绘。
画图板重绘难在需要重绘的类型很多,比如说里面有矩形,园,直线之类的,所以我们要想办法将里面的图形加入一个队列中,这样在重绘时就
Java的IO流
西蜀石兰
java
刚学Java的IO流时,被各种inputStream流弄的很迷糊,看老罗视频时说想象成插在文件上的一根管道,当初听时觉得自己很明白,可到自己用时,有不知道怎么代码了。。。
每当遇到这种问题时,我习惯性的从头开始理逻辑,会问自己一些很简单的问题,把这些简单的问题想明白了,再看代码时才不会迷糊。
IO流作用是什么?
答:实现对文件的读写,这里的文件是广义的;
Java如何实现程序到文件
No matching PlatformTransactionManager bean found for qualifier 'add' - neither
林鹤霄
java.lang.IllegalStateException: No matching PlatformTransactionManager bean found for qualifier 'add' - neither qualifier match nor bean name match!
网上找了好多的资料没能解决,后来发现:项目中使用的是xml配置的方式配置事务,但是
Row size too large (> 8126). Changing some columns to TEXT or BLOB
aigo
column
原文:http://stackoverflow.com/questions/15585602/change-limit-for-mysql-row-size-too-large
异常信息:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAM
JS 格式化时间
alxw4616
JavaScript
/**
* 格式化时间 2013/6/13 by 半仙 alxw4616@msn.com
* 需要 pad 函数
* 接收可用的时间值.
* 返回替换时间占位符后的字符串
*
* 时间占位符:年 Y 月 M 日 D 小时 h 分 m 秒 s 重复次数表示占位数
* 如 YYYY 4占4位 YY 占2位<p></p>
* MM DD hh mm
队列中数据的移除问题
百合不是茶
队列移除
队列的移除一般都是使用的remov();都可以移除的,但是在昨天做线程移除的时候出现了点问题,没有将遍历出来的全部移除, 代码如下;
//
package com.Thread0715.com;
import java.util.ArrayList;
public class Threa
Runnable接口使用实例
bijian1013
java thread Runnable java多线程
Runnable接口
a. 该接口只有一个方法:public void run();
b. 实现该接口的类必须覆盖该run方法
c. 实现了Runnable接口的类并不具有任何天
oracle里的extend详解
bijian1013
oracle 数据库 extend
扩展已知的数组空间,例:
DECLARE
TYPE CourseList IS TABLE OF VARCHAR2(10);
courses CourseList;
BEGIN
-- 初始化数组元素,大小为3
courses := CourseList('Biol 4412 ', 'Psyc 3112 ', 'Anth 3001 ');
--
【httpclient】httpclient发送表单POST请求
bit1129
httpclient
浏览器Form Post请求
浏览器可以通过提交表单的方式向服务器发起POST请求,这种形式的POST请求不同于一般的POST请求
1. 一般的POST请求,将请求数据放置于请求体中,服务器端以二进制流的方式读取数据,HttpServletRequest.getInputStream()。这种方式的请求可以处理任意数据形式的POST请求,比如请求数据是字符串或者是二进制数据
2. Form
【Hive十三】Hive读写Avro格式的数据
bit1129
hive
1. 原始数据
hive> select * from word;
OK
1 MSN
10 QQ
100 Gtalk
1000 Skype
2. 创建avro格式的数据表
hive> CREATE TABLE avro_table(age INT, name STRING)STORE
nginx+lua+redis自动识别封解禁频繁访问IP
ronin47
在站点遇到攻击且无明显攻击特征,造成站点访问慢,nginx不断返回502等错误时,可利用nginx+lua+redis实现在指定的时间段 内,若单IP的请求量达到指定的数量后对该IP进行封禁,nginx返回403禁止访问。利用redis的expire命令设置封禁IP的过期时间达到在 指定的封禁时间后实行自动解封的目的。
一、安装环境:
CentOS x64 release 6.4(Fin
java-二叉树的遍历-先序、中序、后序(递归和非递归)、层次遍历
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
public class BinTreeTraverse {
//private int[] array={ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private int[] array={ 10,6,
Spring源码学习-XML 配置方式的IoC容器启动过程分析
bylijinnan
java spring IOC
以FileSystemXmlApplicationContext为例,把Spring IoC容器的初始化流程走一遍:
ApplicationContext context = new FileSystemXmlApplicationContext
("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml&q
[科研与项目]民营企业请慎重参与军事科技工程
comsci
企业
军事科研工程和项目 并非要用最先进,最时髦的技术,而是要做到“万无一失”
而民营科技企业在搞科技创新工程的时候,往往考虑的是技术的先进性,而对先进技术带来的风险考虑得不够,在今天提倡军民融合发展的大环境下,这种“万无一失”和“时髦性”的矛盾会日益凸显。。。。。。所以请大家在参与任何重大的军事和政府项目之前,对
spring 定时器-两种方式
cuityang
spring quartz 定时器
方式一:
间隔一定时间 运行
<bean id="updateSessionIdTask" class="com.yang.iprms.common.UpdateSessionTask" autowire="byName" />
<bean id="updateSessionIdSchedule
简述一下关于BroadView站点的相关设计
damoqiongqiu
view
终于弄上线了,累趴,戳这里http://www.broadview.com.cn
简述一下相关的技术点
前端:jQuery+BootStrap3.2+HandleBars,全站Ajax(貌似对SEO的影响很大啊!怎么破?),用Grunt对全部JS做了压缩处理,对部分JS和CSS做了合并(模块间存在很多依赖,全部合并比较繁琐,待完善)。
后端:U
运维 PHP问题汇总
dcj3sjt126com
windows2003
1、Dede(织梦)发表文章时,内容自动添加关键字显示空白页
解决方法:
后台>系统>系统基本参数>核心设置>关键字替换(是/否),这里选择“是”。
后台>系统>系统基本参数>其他选项>自动提取关键字,这里选择“是”。
2、解决PHP168超级管理员上传图片提示你的空间不足
网站是用PHP168做的,反映使用管理员在后台无法
mac 下 安装php扩展 - mcrypt
dcj3sjt126com
PHP
MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin依赖这个PHP扩展,具体如下:
下载并解压libmcrypt-2.5.8.tar.gz。
在终端执行如下命令: tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure --disable-posix-threads --
MongoDB更新文档 [四]
eksliang
mongodb Mongodb更新文档
MongoDB更新文档
转载请出自出处:http://eksliang.iteye.com/blog/2174104
MongoDB对文档的CURD,前面的博客简单介绍了,但是对文档更新篇幅比较大,所以这里单独拿出来。
语法结构如下:
db.collection.update( criteria, objNew, upsert, multi)
参数含义 参数  
Linux下的解压,移除,复制,查看tomcat命令
y806839048
tomcat
重复myeclipse生成webservice有问题删除以前的,干净
1、先切换到:cd usr/local/tomcat5/logs
2、tail -f catalina.out
3、这样运行时就可以实时查看运行日志了
Ctrl+c 是退出tail命令。
有问题不明的先注掉
cp /opt/tomcat-6.0.44/webapps/g
Spring之使用事务缘由(3-XML实现)
ihuning
spring
用事务通知声明式地管理事务
事务管理是一种横切关注点。为了在 Spring 2.x 中启用声明式事务管理,可以通过 tx Schema 中定义的 <tx:advice> 元素声明事务通知,为此必须事先将这个 Schema 定义添加到 <beans> 根元素中去。声明了事务通知后,就需要将它与切入点关联起来。由于事务通知是在 <aop:
GCD使用经验与技巧浅谈
啸笑天
GC
前言
GCD(Grand Central Dispatch)可以说是Mac、iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧。
dispatch_once_t必须是全局或static变量
这一条算是“老生常谈”了,但我认为还是有必要强调一次,毕竟非全局或非static的dispatch_once_t变量在使用时会导致非常不好排查的bug,正确的如下: 1
linux(Ubuntu)下常用命令备忘录1
macroli
linux 工作 ubuntu
在使用下面的命令是可以通过--help来获取更多的信息1,查询当前目录文件列表:ls
ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息:
ls / 显示/.下的所有文件和目录
ls -l 给出文件或者文件夹的详细信息
ls -a 显示所有文件,包括隐藏文
nodejs同步操作mysql
qiaolevip
学习永无止境 每天进步一点点 mysql nodejs
// db-util.js
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host: 'localhost',
user: 'root',
password: '',
database: 'test',
port: 3306
});
一起学Hive系列文章
superlxw1234
hive Hive入门
[一起学Hive]系列文章 目录贴,入门Hive,持续更新中。
[一起学Hive]之一—Hive概述,Hive是什么
[一起学Hive]之二—Hive函数大全-完整版
[一起学Hive]之三—Hive中的数据库(Database)和表(Table)
[一起学Hive]之四-Hive的安装配置
[一起学Hive]之五-Hive的视图和分区
[一起学Hive
Spring开发利器:Spring Tool Suite 3.7.0 发布
wiselyman
spring
Spring Tool Suite(简称STS)是基于Eclipse,专门针对Spring开发者提供大量的便捷功能的优秀开发工具。
在3.7.0版本主要做了如下的更新:
将eclipse版本更新至Eclipse Mars 4.5 GA
Spring Boot(JavaEE开发的颠覆者集大成者,推荐大家学习)的配置语言YAML编辑器的支持(包含自动提示,