Skip to content

Commit 8b41088

Browse files
committed
add some demos of sciter usage for beginer
1 parent b894646 commit 8b41088

File tree

17 files changed

+1349
-0
lines changed

17 files changed

+1349
-0
lines changed

examples/demoes/01/demo1.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package main
2+
3+
import (
4+
"log"
5+
6+
"github.com/sciter-sdk/go-sciter"
7+
"github.com/sciter-sdk/go-sciter/window"
8+
)
9+
10+
func main() {
11+
//create windows;创建window窗口
12+
//parm 1: style of window;参数一表示创建窗口的样式
13+
//SW_TITLEBAR :with titlebar;顶层窗口,有标题栏
14+
//SW_RESIZEABLE : resizeable; 可调整大小
15+
//SW_CONTROLS :has max, min button;有最小/最大按钮
16+
//SW_MAIN : main window, if it close, application will exit; 应用程序主窗口,关闭后其他所有窗口也会关闭
17+
//SW_ENABLE_DEBUG : debug;可以调试
18+
//parm 2: the rect of window;参数二表示创建窗口的矩形
19+
w, err := window.New(sciter.SW_TITLEBAR|
20+
sciter.SW_RESIZEABLE|
21+
sciter.SW_CONTROLS|
22+
sciter.SW_MAIN|
23+
sciter.SW_ENABLE_DEBUG,
24+
nil)
25+
if err != nil {
26+
log.Fatal(err)
27+
}
28+
//load file;加载文件
29+
w.LoadFile("demo1.html")
30+
//set title; 设置标题
31+
w.SetTitle("Hello, world")
32+
//show;显示窗口
33+
w.Show()
34+
//run, loop message;运行窗口,进入消息循环
35+
w.Run()
36+
}

examples/demoes/01/demo1.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<!DOCTYPE html>
2+
<html lang="zh-CN">
3+
<head>
4+
<meta charset="UTF-8">
5+
</head>
6+
<body>
7+
Hello,world
8+
</body>
9+
</html>

examples/demoes/02/demo2.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package main
2+
3+
import (
4+
"log"
5+
6+
"github.com/sciter-sdk/go-sciter"
7+
"github.com/sciter-sdk/go-sciter/window"
8+
)
9+
10+
func main() {
11+
//创建window窗口
12+
//参数一表示创建窗口的样式
13+
//SW_TITLEBAR 顶层窗口,有标题栏
14+
//SW_RESIZEABLE 可调整大小
15+
//SW_CONTROLS 有最小/最大按钮
16+
//SW_MAIN 应用程序主窗口,关闭后其他所有窗口也会关闭
17+
//SW_ENABLE_DEBUG 可以调试
18+
//参数二表示创建窗口的矩形
19+
w, err := window.New(sciter.SW_TITLEBAR|
20+
sciter.SW_RESIZEABLE|
21+
sciter.SW_CONTROLS|
22+
sciter.SW_MAIN|
23+
sciter.SW_ENABLE_DEBUG,
24+
//给窗口设置个大小
25+
&sciter.Rect{Left: 0, Top: 0, Right: 500, Bottom: 500})
26+
if err != nil {
27+
log.Fatal(err)
28+
}
29+
//加载文件
30+
w.LoadFile("demo2.html")
31+
//设置标题
32+
w.SetTitle("表单")
33+
//显示窗口
34+
w.Show()
35+
//运行窗口,进入消息循环
36+
w.Run()
37+
}

examples/demoes/02/demo2.html

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>表单</title>
6+
<style>
7+
table {
8+
width: 100%;
9+
border-collapse: collapse;
10+
}
11+
12+
table td {
13+
padding: 10px;
14+
border: 1px solid #ccc;
15+
}
16+
17+
table td:first-child {
18+
white-space:nowrap;
19+
}
20+
</style>
21+
</head>
22+
<body>
23+
<form action="">
24+
<table>
25+
<tr>
26+
<td>用户:</td>
27+
<td><input type="text"></td>
28+
</tr>
29+
<tr>
30+
<td>密码:</td>
31+
<td><input type="password"></td>
32+
</tr>
33+
<tr>
34+
<td>性别:</td>
35+
<td>
36+
<input type="radio" value="0">
37+
<input type="radio" value="1">
38+
</td>
39+
</tr>
40+
<tr>
41+
<td>爱好:</td>
42+
<td>
43+
<input type="checkbox" value="">看书
44+
<input type="checkbox" value="">打球
45+
<input type="checkbox" value="">旅游
46+
</td>
47+
</tr>
48+
<tr>
49+
<td>简介:</td>
50+
<td>
51+
<textarea name="" id="" cols="30" rows="10"></textarea>
52+
</td>
53+
</tr>
54+
<tr>
55+
<td></td>
56+
<td><input type="submit" value="提交"></td>
57+
</tr>
58+
</table>
59+
</form>
60+
</body>
61+
</html>

examples/demoes/03/demo3.go

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/sciter-sdk/go-sciter"
8+
"github.com/sciter-sdk/go-sciter/window"
9+
)
10+
11+
//一些基础操作
12+
func base(root *sciter.Element) {
13+
//通过ID选择元素
14+
ul, _ := root.SelectById("list")
15+
//获取元素的文本
16+
text, _ := ul.Text()
17+
fmt.Println("text:", text)
18+
//获取元素的html
19+
//参数为真,则返回元素外部html
20+
//参数为假,则返回元素内部html
21+
text, _ = ul.Html(false)
22+
fmt.Println("html:", text)
23+
//获取子元素个数
24+
n, _ := ul.ChildrenCount()
25+
fmt.Println(n)
26+
}
27+
28+
//动态的添加元素
29+
func addElement(root *sciter.Element) {
30+
//创建一个元素
31+
add, _ := sciter.CreateElement("li", "444")
32+
//设置元素的属性
33+
add.SetAttr("data", "add")
34+
35+
//通过标签和ID来选择元素,类似jquery
36+
ul, _ := root.SelectFirst("ul#list")
37+
//插入元素,下标从0开始
38+
err := ul.Insert(add, 3)
39+
if err != nil {
40+
log.Fatal("添加元素失败")
41+
}
42+
43+
add2, _ := sciter.CreateElement("li", "")
44+
err2 := ul.Insert(add2, 4)
45+
//注意这里,元素先insert后再去设置html才有效
46+
//设置添加元素的html
47+
add2.SetHtml("<a href='http://www.baidu.com'>555</a>", sciter.SIH_REPLACE_CONTENT)
48+
if err2 != nil {
49+
log.Fatal("添加元素失败")
50+
}
51+
}
52+
53+
//删除元素
54+
func delElement(root *sciter.Element) {
55+
ul, _ := root.SelectFirst("ul#list")
56+
//获取第一个子元素,下标从0开始
57+
li, _ := ul.NthChild(0)
58+
//删除元素
59+
li.Delete()
60+
61+
//我们也可以用css选择器直接选择要删除的元素
62+
//注意css里面的nth-child(n)下标从1开始
63+
li2, _ := root.SelectFirst("ul#list>li:nth-child(2)")
64+
//删除元素
65+
li2.Delete()
66+
}
67+
68+
//修改元素
69+
func updElement(root *sciter.Element) {
70+
li, _ := root.SelectFirst("ul#list>li:nth-child(1)")
71+
//给元素设置样式
72+
li.SetStyle("color", "#f00")
73+
//给元素设置html
74+
//参数一:html内容
75+
//参数二:html放在哪里,SIH_REPLACE_CONTENT表示替换旧内容
76+
li.SetHtml("<a href='http://www.baidu.com'>baidu.com</a>", sciter.SIH_REPLACE_CONTENT)
77+
//在最后面追加内容
78+
li.SetHtml("哈哈", sciter.SIH_APPEND_AFTER_LAST)
79+
//设置元素属性
80+
li.SetAttr("test", "test")
81+
li2, _ := root.SelectFirst("ul#list>li:nth-child(2)")
82+
//设置文本
83+
li2.SetText("我改我改")
84+
}
85+
86+
//查找元素
87+
func selElement(root *sciter.Element) {
88+
//通过css选择器选择元素,会返回*Element的slice
89+
root.Select("ul#list>li")
90+
//通过选择器返回第一个元素
91+
//也是调用的Select,不过只返回第一个元素
92+
root.SelectFirst("ul#list>li")
93+
//通过元素ID
94+
root.SelectById("list")
95+
//选择父元素
96+
//参数二:表示深度
97+
root.SelectParent("li", 1)
98+
//返回选择器匹配唯一子元素,如果没有或匹配多个,会引发Panic
99+
root.SelectUnique("ul#list>li:nth-child(1)")
100+
}
101+
102+
func main() {
103+
//创建一个新窗口
104+
//这里参数一和参数二都使用的默认值
105+
//DefaultWindowCreateFlag = SW_TITLEBAR | SW_RESIZEABLE | SW_CONTROLS | SW_MAIN | SW_ENABLE_DEBUG
106+
//DefaultRect = &Rect{0, 0, 300, 400}
107+
w, err := window.New(sciter.DefaultWindowCreateFlag, sciter.DefaultRect)
108+
if err != nil {
109+
log.Fatal(err)
110+
}
111+
//设置标题
112+
w.SetTitle("文本html")
113+
html := `
114+
<html>
115+
<body>
116+
<ul id="list" name="list">
117+
<li>111</li>
118+
<li>222</li>
119+
<li>333</li>
120+
</ul>
121+
</body>
122+
</html>`
123+
//加载html,从一个字符串变量中
124+
w.LoadHtml(html, "")
125+
//窗口获取根元素,这里应该是html
126+
root, _ := w.GetRootElement()
127+
128+
//这里把一些操作单独写成函数方便查看
129+
base(root)
130+
addElement(root)
131+
delElement(root)
132+
updElement(root)
133+
selElement(root)
134+
135+
//显示窗口
136+
w.Show()
137+
//运行窗口,进入消息循环
138+
w.Run()
139+
}

examples/demoes/04/demo4.go

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/sciter-sdk/go-sciter"
8+
"github.com/sciter-sdk/go-sciter/window"
9+
)
10+
11+
//设置元素的处理程序
12+
func setElementHandlers(root *sciter.Element) {
13+
btn1, _ := root.SelectById("btn1")
14+
//处理元素简单点击事件
15+
btn1.OnClick(func() {
16+
fmt.Println("btn1被点击了")
17+
})
18+
19+
//这里给元素定义的方法是在tiscript中进行调用的
20+
//并且作为元素的属性进行访问
21+
btn1.DefineMethod("test", func(args ...*sciter.Value) *sciter.Value {
22+
//我们把从传入的参数打印出来
23+
for _, arg := range args {
24+
//String()把参数转换成字符串
25+
fmt.Print(arg.String() + " ")
26+
}
27+
28+
//返回一个空值
29+
return sciter.NullValue()
30+
})
31+
btn2, _ := root.SelectById("btn2")
32+
//调用在tiscript中定义的方法
33+
data, _ := btn2.CallMethod("test2", sciter.NewValue("1"), sciter.NewValue("2"), sciter.NewValue("3"))
34+
//输出调用方法的返回值
35+
fmt.Println(data.String())
36+
}
37+
38+
//设置回调
39+
func setCallbackHandlers(w *window.Window) {
40+
//CallbackHandler是一个结构,里面定义了一些方法
41+
//你可以通过实现这些方法,自定义自已的回调
42+
cb := &sciter.CallbackHandler{
43+
//加载数据开始
44+
OnLoadData: func(p *sciter.ScnLoadData) int {
45+
//显示加载资源的uri
46+
fmt.Println("加载:", p.Uri())
47+
return sciter.LOAD_OK
48+
},
49+
//加载数据过程中
50+
OnDataLoaded: func(p *sciter.ScnDataLoaded) int {
51+
fmt.Println("加载中:", p.Uri())
52+
return sciter.LOAD_OK
53+
},
54+
}
55+
w.SetCallback(cb)
56+
}
57+
58+
//定义函数
59+
func setWinHandler(w *window.Window) {
60+
//定义函数,在tis脚本中需要通过view对象调用
61+
62+
//定义inc函数,返回参数加1
63+
w.DefineFunction("inc", func(args ...*sciter.Value) *sciter.Value {
64+
return sciter.NewValue(args[0].Int() + 1)
65+
})
66+
//定义dec函数,返回参数减1
67+
w.DefineFunction("dec", func(args ...*sciter.Value) *sciter.Value {
68+
return sciter.NewValue(args[0].Int() - 1)
69+
})
70+
}
71+
72+
//测试调用函数
73+
func testCallFunc(w *window.Window) {
74+
//调用tis脚本中定义的函数
75+
data, _ := w.Call("sum", sciter.NewValue(10), sciter.NewValue(20))
76+
fmt.Println(data.String())
77+
root, _ := w.GetRootElement()
78+
//我们也可以指定元素调用函数
79+
data, _ = root.CallFunction("sum", sciter.NewValue(50), sciter.NewValue(100))
80+
fmt.Println(data.String())
81+
}
82+
83+
func main() {
84+
//创建一个新窗口
85+
w, err := window.New(sciter.DefaultWindowCreateFlag, sciter.DefaultRect)
86+
if err != nil {
87+
log.Fatal(err)
88+
}
89+
90+
w.LoadFile("demo4.html")
91+
//设置标题
92+
w.SetTitle("事件处理")
93+
94+
//设置回调处理程序
95+
setCallbackHandlers(w)
96+
//获取根元素
97+
root, _ := w.GetRootElement()
98+
//设置元素处理程序
99+
setElementHandlers(root)
100+
//设置窗口处理程序
101+
setWinHandler(w)
102+
//测试调用函数
103+
testCallFunc(w)
104+
105+
//显示窗口
106+
w.Show()
107+
//运行窗口,进入消息循环
108+
w.Run()
109+
}

0 commit comments

Comments
 (0)