zoukankan      html  css  js  c++  java
  • go语言使用go-sciter创建桌面应用(七) view对象常用方法,文件选择,窗口弹出,请求

    view对象的详细文档请看:

    https://sciter.com/docs/content/sciter/View.htm

    demo9.html代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>view对象学习</title>
        <style>
            .br {
                 100%;
                border: 1px solid #ccc;
                margin: 10px auto;
            }
        </style>
    </head>
    <body>
    
    <div class="br">
        <button id="selFile">选择文件</button>
        <span id="filePath"></span>
        <br>
        <button id="selFolder">选择目录</button>
        <span id="folderPath"></span>
        <br>
        <button id="moveFile">移动</button>
        <span id="moveRet"></span>
    </div>
    <div class="br">
        <button id="msgbox1">消息框</button>
        <br>
        <button id="msgbox2">信息框</button>
        <br>
        <button id="msgbox3">问题框</button>
        <br>
        <button id="msgbox4">警告框</button>
        <br>
        <button id="msgbox5">错误框</button>
    </div>
    
    <div class="br">
        <button id="dlg1">对话框</button>
    </div>
    
    <div class="br">
        <button id="win1">窗口</button>
        <br>
    </div>
    
    <div class="br">
        <button id="state1">全屏</button>
        <button id="state2">默认</button>
        <button id="state3">关闭</button>
    </div>
    
    <div class="br">
        <button id="req">请求</button>
        结果:
        <iframe id="reqRet"></iframe>
    </div>
    
    <script type="text/tiscript">
        self.ready = function() {
            var file = "";
            var folder = "";
    
            //选择文件
            $(#selFile).on("click", function() {
                //文件筛选项
                const filter = "Image Files (*.jpg,*.jpeg,*.gif,*.png)|*.jpg;*.jpeg;*.gif;*.png|All Files (*.*)|*.*";
                //默认后缀
                const defaultExt = "jpg";
                //初始化路径,就是文件选择窗打开时所在路径
                const initialPath = System.path(#USER_DOCUMENTS);
                //标题
                const caption = "选择图片";
                file = view.selectFile(#open, filter, defaultExt, initialPath, caption );
                $(#filePath).text = file;
                return true;
            });
            //选择文件夹
            $(#selFolder).on("click", function() {
                folder = view.selectFolder("选择你的文件夹");
                $(#folderPath).text = folder;
            });
            //移动文件
            $(#moveFile).on("click", function() {
                if(file && folder) {
                    //调用go中定义的函数进行移动文件处理
                    var ret = view.moveFile(file, folder);
                    $(#moveRet).text = ret;
                }
            });
    
            //消息框
            $(#msgbox1).on("click", function() {
                view.msgbox(#alert, "我是消息框");
            });
            //信息框
            $(#msgbox2).on("click", function() {
                view.msgbox(#information, "我是信息框", "信息框");
            });
            //问题框
            $(#msgbox3).on("click", function() {
                view.msgbox(#question,
                            "请选择是或否",
                            "问题框",
                            //按钮组
                            [{id:#yes,text:"是"},{id:#no,text:"否"}],
                            //onLoad,窗口加载时调用
                            function(root) {
    
                            },
                            //onClose,窗口关闭时调用
                            function(root, id) {
                                //id表示你选择按钮的ID
                                if(id == "yes") {
                                    view.msgbox(#alert, "你选择的yes");
                                } else {
                                    view.msgbox(#alert, "你选择的no");
                                }
                            });
            });
            //警告框
            $(#msgbox4).on("click", function() {
                view.msgbox(#warning, "我是警告框");
            });
            //错误框
            $(#msgbox5).on("click", function() {
                view.msgbox(#error, "我是错误框");
            });
    
            //新对话框
            $(#dlg1).on("click", function() {
                var dlg = view.dialog({
                    //加载到对话框中的URL,可加载本地文件
                    url: self.url("simple.html"),
                    //对话框的x,y坐标
                    x: 50,
                    y: 50,
                    //窗口的宽度,高度
                     200,
                    height: 200,
                    //是否是客户区,如果为真,那么x,y,width,height作为客户区坐标,而不是窗口
                    client: false,
                    //对话框参数
                    parameters: {"test":"test"},
                    //对话框标题
                    caption: "新对话框",
                    //相对于屏幕窗口对齐
                    alignment: 3,
                });
            });
    
            //新窗口
            $(#win1).on("click", function() {
                var win = view.window({
                    //窗口类型
                    //View.FRAME_WINDOW 框架窗口
                    //View.TOOL_WINDOW 工具窗口
                    //View.POPUP_WINDOW 弹出窗口
                    type: View.TOOL_WINDOW,
                    //加载到窗口中的URL,可加载本地文件
                    url: self.url("simple.html"),
                    //窗口的x,y坐标
                    x: 200,
                    y: 200,
                    //窗口的宽度,高度
                     400,
                    height: 400,
                    //是否是客户区,如果为真,那么x,y,width,height作为客户区坐标,而不是窗口
                    client: false,
                    //窗口状态
                    //View.WINDOW_SHOWN 显示
                    //View.WINDOW_HIDDEN 隐藏
                    //View.WINDOW_MINIMIZED 最小化
                    //View.WINDOW_MAXIMIZED 最大化
                    //View.WINDOW_FULL_SCREEN 全屏
                    state: View.WINDOW_SHOWN,
                    //窗口参数
                    parameters: {"test":"test"},
                    //窗口标题
                    caption: "新窗口",
                    //相对于屏幕窗口对齐
                    alignment: 3,
                });
                //访问窗口中设置的参数
                stdout.println(win.parameters["test"]);
            });
    
            //修改当前窗口的状态
            $(#state1).on("click", function() {
                //全屏
                view.state = View.WINDOW_FULL_SCREEN;
            });
            $(#state2).on("click", function() {
                //默认
                view.state = View.WINDOW_SHOWN;
            });
            $(#state3).on("click", function() {
                //关闭
                view.close();
            });
    
            //view的事件响应
            //视图窗口大小发生改变时
            view.on("sizing", function(sizingParams) {
                view.dump("大小改变", sizingParams.x, sizingParams.y, sizingParams.width, sizingParams.height);
            });
            //视图窗口移动时
            view.on("moving", function(movingParams) {
                view.dump("移动改变", movingParams.x, movingParams.y, movingParams.width, movingParams.height);
            });
            //视图窗口状态改变时
            view.on("statechange", function() {
                view.dump(view.state);
            });
    
            //请求方法类似jquery中的ajax
            $(#req).on("click", function() {
                view.request({
                    //请求类型(#get, #post, #put, #delete)
                    type: #get,
                    //请求url
                    url: "http://www.163.com",
                    //协议(#basic, #multipart, #json)
                    protocol: #basic,
                    params: {
                        "test": "test"
                    },
                    //成功回调函数
                    success: function(data,status) {
                        $(#reqRet).html = data;
                    },
                    //失败回调函数
                    error: function(err,status) {
    
                    }
                });
            });
        };
    </script>
    </body>
    </html>
    

    demo9.go代码如下:

    package main;
    
    import (
    	"github.com/sciter-sdk/go-sciter/window"
    	"github.com/sciter-sdk/go-sciter"
    	"log"
    	"os"
    	"strings"
    	"path/filepath"
    	"io/ioutil"
    	"fmt"
    )
    
    func defFunc(w *window.Window) {
    	//注册dump函数方便在tis脚本中打印数据
    	w.DefineFunction("dump", func(args ...*sciter.Value) *sciter.Value {
    		for _, v := range args {
    			fmt.Print(v.String() + " ");
    		}
    		fmt.Println();
    		return sciter.NullValue();
    	});
    	//处理文件移动
    	w.DefineFunction("moveFile", func(args ...*sciter.Value) *sciter.Value {
    		file := args[0].String();
    		folder := args[1].String();
    
    		//去掉路径左边的file://
    		file = strings.TrimLeft(file, "file://");
    		//获取文件名
    		fileName := filepath.Base(file);
    		//读取文件数据
    		data, err := ioutil.ReadFile(file);
    		if err != nil {
    			return sciter.NewValue(err.Error());
    		}
    		//写入文件数据
    		err = ioutil.WriteFile(filepath.Join(folder, fileName), data, os.ModePerm);
    		if err == nil {
    			//删除原文件
    			os.Remove(file);
    			return sciter.NewValue("移动成功");
    		} else {
    			return sciter.NewValue("移动失败");
    		}
    	});
    }
    
    func main() {
    	w, err := window.New(sciter.DefaultWindowCreateFlag, sciter.DefaultRect);
    	if err != nil {
    		log.Fatal(err);
    	}
    	//注意这个地方,sciter较新的版默认的情况下禁用了非安全脚本功能
    	//需要设置下配置,开启此功能,不然tiscript中打开文件或目录将无法使用。
    	w.SetOption(sciter.SCITER_SET_SCRIPT_RUNTIME_FEATURES,
    				sciter.ALLOW_FILE_IO |
    				sciter.ALLOW_SOCKET_IO |
    				sciter.ALLOW_SYSINFO);
    	w.LoadFile("demo9.html");
    	w.SetTitle("view对象学习");
    	defFunc(w);
    	w.Show();
    	w.Run();
    }

    显示结果如下:

    关于选择文件,选择目录,无法使用的说明。

    由于sciter的更新,默认情况下已禁用非安全脚本功能。

  • 相关阅读:
    基于 VirtualApp 结合 whale hook框架实现hook第三方应用
    C/C++标准有哪些?
    【tips】编译epic异常解决
    Android 虚拟多开系列二——技术原理
    Android 虚拟多开系列一——技术调研
    Ubuntu 16.04 Apache2 更改访问html根路径方案(可解决403)
    android 原生 MediaPlayer 和 MediaCodec 的区别和联系(三)
    Android 原生 MediaPlayer 和 MediaCodec 的区别和联系(二)
    Android MediaPlayer 和 MediaCodec 的区别和联系(一)
    Mongodb实战使用指南
  • 原文地址:https://www.cnblogs.com/jkko123/p/7076606.html
Copyright © 2011-2022 走看看