それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

IronPythonでブラウザっぽいモノ

ソースコードを探していたらこんなモノが出てきた。もしかたら以前もBlogに上げておいたかもしれないが、忘れたので、書いておく。ブラウザアプリを作るサンプルになればと思ったり。

スクリプトでWin32OLE触るのは楽しい。今回はNetFramework。

こちらもコンパイル不要でどんどん書きながらTry-and-Errorを出来るから素晴らしいと思う。


確か、これはIronPythonのサンプルコードを探してきたときのコピペだと思うんだ。
転載元を探したんですけど、2年も前のことなので分からなかった。

IronPythonでブラウザっぽいモノ

# -*- coding: shift-jis -*-
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import *
from System.Drawing import *
from ctypes import *
ko = WDLL(r"kernel32.dll")
print ko.GetTickCount()
print ko.GetTickCount()

usr = WDLL(r"user32.dll")
print usr.MessageBoxA(0, "Hello", "Hello world", 0)

class App(Form):
        ''' Webブラウザ フォーム '''
        # 初期化用のメソッド
        def __init__(self):
                ''' 初期化用のメソッド '''
                # テーブルレイアウトの作成(列=3、行=3))
                self.tbl = TableLayoutPanel()
                self.tbl.ColumnCount = 3
                self.tbl.RowCount = 3
                # カラムスタイル (20%、80%、残り)
                self.tbl.ColumnStyles.Add(ColumnStyle(SizeType.Absolute, 40.0))
                self.tbl.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 80.0))
                self.tbl.ColumnStyles.Add(ColumnStyle())
                #行スタイル (絶対値30px、100%、残り))
                self.tbl.RowStyles.Add(RowStyle(SizeType.Absolute, 30.0))
                self.tbl.RowStyles.Add(RowStyle(SizeType.Percent, 100.0))
                self.tbl.RowStyles.Add(RowStyle())
                self.tbl.Dock = DockStyle.Fill
                # ラベルコントロール
                self.lbl1 = Label(Text="URL:")
                self.lbl1.TextAlign = ContentAlignment.MiddleCenter
                self.lbl1.Dock = DockStyle.Fill
                # テキストボックス
                self.text1 = TextBox()
                self.text1.Dock = DockStyle.Fill
                # ボタン コントロール
                self.btn1 = Button(Text=u"読込")
                self.btn1.Dock = DockStyle.Fill
                # リストボックス(履歴用)
                self.lb1 = ListBox()
                self.lb1.Dock = DockStyle.Fill
                # ウェブ ブラウザ コントロール
                self.web = WebBrowser()
                self.web.Dock = DockStyle.Fill
                # コントロールをテーブルレイアウトに配置
                self.tbl.Controls.Add(self.lbl1, 0, 0)  # ラベル
                self.tbl.Controls.Add(self.text1, 1, 0) # テキストボックス
                self.tbl.Controls.Add(self.btn1, 2, 0)  # ボタン
                self.tbl.Controls.Add(self.web, 0, 1)   # Webブラウザ
                self.tbl.Controls.Add(self.lb1, 0, 2)   # リストボックス
                # カラム スタイルの設定(Webブラウザとリストボックスは1列のみ)
                self.tbl.SetColumnSpan(self.web, 3)
                self.tbl.SetColumnSpan(self.lb1, 3)
                # コントロールをフォームに追加
                self.Controls.Add(self.tbl)

                # イベントハンドラの設定
                self.btn1.Click += self.btn_Click
                self.web.DocumentCompleted += self.web_Completed
                self.lb1.DoubleClick += self.lb_DoubleClick
                self.text1.KeyDown += self.Key_Down
                #フォームのサイズ設定
                self.Text=u"IPYブラウザ"
                self.StartPosition = FormStartPosition.CenterScreen
                # 履歴に表示する定数
                self.message = " ...Completed!"

        def btn_Click(self, sender, e):
                ''' ボタンクリック イベント '''
        	self.web.Navigate(self.text1.Text)

        def web_Completed(self, sender, e):
                ''' ドキュメントの読み込み完了 '''
        	self.lb1.Items.Add(e.Url.ToString() + self.message)

        def lb_DoubleClick(self, sender, e):
                ''' 履歴からのダブルクリック '''
        	if self.lb1.Items.Count == 0:
	        	return
	        selected = self.lb1.Items[self.lb1.SelectedIndex]
	        self.text1.Text = selected.Substring(0, selected.Length - self.message.Length)
	        self.btn_Click( sender, e)

        def Key_Down(self, sender, e):
                ''' URLでのEnterキー '''
        	if e.KeyCode == Keys.Return:
	        	self.btn_Click( sender, e)

# モジュールの開始条件
if __name__ == "__main__":
        app = App()
        Application.Run(app)