最終更新日 2024-09-25

「hmV8」の例 ミニブラウザ

概要

.NETにおいては、「http://」URLをプロセスとして実行すると、
Webに通常関連付けられているブラウザが起動しますが、
対象のWebページが「Webアプリ的なも」や「社内のhtmlページ的なもの」など定型・定型アプリであるとわかっているならば、
フル機能を持つWebブラウザではなく、Webコンポーネントを利用するのもアリでしょう。

以下のものを「miniweb.mac」として保存してみましょう。

$url = "http://www.google.com";

#JS = loaddll( hidemarudir + @"\hmV8.dll" );

#_ = dllfuncw(#JS, "DoString", R"JS(

let LibForms = host.lib("System.Windows.Forms");
let LibDrawing = host.lib("System.Drawing");

class MyWebForm {
    constructor() {
        this.form = new LibForms.System.Windows.Forms.Form();
        this.form.Width = 800;
        this.form.Height = 600;

        let url = hm.Macro.Var["$url"];
        this.wb = new LibForms.System.Windows.Forms.WebBrowser();
        this.wb.Navigate(url);
        this.wb.Navigated.connect( (sender, e) => this.WbNavigated(sender, e) );

        this.tb = new LibForms.System.Windows.Forms.TextBox();
        this.tb.Text = url;
        this.tb.KeyPress.connect( (sender, e) => this.TbKeyPress(sender, e) );

        // レイアウト
        this.tb.Dock = LibForms.System.Windows.Forms.DockStyle.Top;
        this.wb.Dock = LibForms.System.Windows.Forms.DockStyle.Fill;

        // フォームに配置
        this.form.Controls.Add(this.wb);
        this.form.Controls.Add(this.tb);
    }

    TbKeyPress(sender, e) {
        hm.debuginfo(e.KeyChar);
        hm.debuginfo(LibForms.System.Windows.Forms.Keys.Enter.KeyCode);
        if (e.KeyChar == "\r".charCodeAt(0) ) { // リターンキー
            this.wb.Navigate(this.tb.Text);
        }
    }

    WbNavigated(sender, e) {
        this.tb.Text = e.Url.ToString();
    }


    ShowDialog() {
        this.form.ShowDialog();
    }

}

let form = new MyWebForm();
form.ShowDialog();

)JS"
);

// 解放
freedll(#JS);