1. 程式人生 > >go語言使用go-sciter創建桌面應用(七) view對象常用方法,文件選擇,窗口彈出,請求

go語言使用go-sciter創建桌面應用(七) view對象常用方法,文件選擇,窗口彈出,請求

問題 adf img function jquery stdout view type 改變

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 {
            width: 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,
                //窗口的寬度,高度
                width: 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,
                //窗口的寬度,高度
                width: 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);
	}
	w.LoadFile("demo9.html");
	w.SetTitle("view對象學習");
	defFunc(w);
	w.Show();
	w.Run();
}

顯示結果如下:

技術分享

技術分享

技術分享

go語言使用go-sciter創建桌面應用(七) view對象常用方法,文件選擇,窗口彈出,請求