« IronRuby PreAlpha 1を触ってみる。 | メイン

IronRuby PreAlpha 1でWebブラウザを作ってみたが…。

さっきの記事を書いた後に、もう少しIronRubyを触ってみたところ、なんかおかしい挙動がいろいろと。

当然ですが。
これ以降の内容は全部 pre alpha 1 の環境が前提になっていますので、ご注意くだされ。

とりあえず結構きついのがCLR上の列挙体が今のところ正しく取り扱えないので、WindowsFormのDockプロパティなどが設定できないってこと。
その辺が問題なければさくっと書けそうなところが厳しいですね。
あと、イベント記述方法に問題があるのか、同一クラスのオブジェクトが複数ある場合、先に宣言したイベントのみが有効になっているっぽいです。回避方法がないので、どうしようもない...

ともあれ、イロイロ試してみたブラウザプログラムのソースを以下に放置しておきます(^^;

require 'System.Windows.Forms'
require 'System.Drawing'

# CLRエイリアス
Form       = System::Windows::Forms::Form
Panel      = System::Windows::Forms::Panel
Label      = System::Windows::Forms::Label
TextBox    = System::Windows::Forms::TextBox
Button     = System::Windows::Forms::Button
MessageBox = System::Windows::Forms::MessageBox
MainMenu   = System::Windows::Forms::MainMenu
MenuItem   = System::Windows::Forms::MenuItem
Point      = System::Drawing::Point

# 土台となるフォーム
browserForm = Form.new()
[browserForm].each do |f|
   f.Text     = 'IronRubyでブラウザを動かすにょろん'
   f.Width    = 800
   f.Height   = 600
end

# ヘッダパネル
headerPanel = Panel.new()
[headerPanel].each do |c|
   # 列挙体は動かない orz
   # c.Dock   = System::Windows::Forms::DockStyle.Top
   c.Location = Point.new(0, 0)
   c.Height   = 24
   c.Width    = 780
end

# ボディパネル
bodyPanel = Panel.new()
[bodyPanel].each do |c|
   # 列挙体は動かない orz
   # c.Dock   = System::Windows::Forms::DockStyle.Fill
   c.Location = Point.new(0, 24)
   c.Height   = 560
   c.Width    = 780
end

# アドレス入力欄
addressLabel = Label.new()
[addressLabel].each do |c|
   c.Text     = 'アドレス'
   c.Location = Point.new(0, 0)
   c.Height   = 24
   c.Width    = 48
end

addressText = TextBox.new()
[addressText].each do |c|
   c.Text     = 'http://www.yahoo.co.jp/'
   c.Location = Point.new(48, 0)
   c.Width    = 544
end

# 移動ボタン
moveButton = Button.new()
[moveButton].each do |c|
   c.Text     = '移動'
   c.Location = Point.new(592, 0)
   c.Width    = 48
end

# ブラウザ
browserCtrl = System::Windows::Forms::WebBrowser.new()
[browserCtrl].each do |c|
   # 列挙体は動かない orz
   # c.Dock   = System::Windows::Forms::DockStyle.Fill
   c.Location = Point.new(0, 0)
   c.Height   = 456
   c.Width    = 640
end

# Event記述
moveButton.Click do|sender, args|
   browserCtrl.Navigate(addressText.Text)
end

# Event記述
browserCtrl.Navigated do|sender, args|
   addressText.Text = sender.Url.ToString
   browserForm.Text = sender.DocumentTitle
end

# 列挙体問題でDockとかつかえないから
# VB2時代の悪しき伝統を泣く泣く活用
browserForm.Resize do|sender, args|
   headerPanel.Width  = sender.Width
   bodyPanel.Width    = sender.Width
   bodyPanel.Height   = sender.Height - headerPanel.Height
   browserCtrl.Width  = sender.Width  - 24
   browserCtrl.Height = sender.Height - (64 + headerPanel.Height)
end

headerPanel.Resize do|sender, args|
   addressText.Width   = sender.Width - (addressLabel.Width + moveButton.Width)
   moveButton.Location = Point.new(sender.Width - moveButton.Width, 0)
end


# とりあえずメニューもやってみる
mainMenu = MainMenu.new()
menuFile = MenuItem.new()
menuFile.Name = 'menuFile'
menuFile.Text = 'ファイル(&F)'
menuQuit = MenuItem.new()
menuQuit.Name = 'menuQuit'
menuQuit.Text = '終了(&Q)'
menuFile.MenuItems.Add menuQuit

menuHelp = MenuItem.new()
menuHelp.Name = 'menuHelp'
menuHelp.Text = 'ヘルプ(&H)'
menuAbout = MenuItem.new()
menuAbout.Name = 'menuAbout'
menuAbout.Text = 'このプログラムについて(&A)'
menuHelp.MenuItems.Add menuAbout

menuAbout.Click do|sender, args|
   MessageBox.Show("IronRuby Sample Script\n(C)DonaDona(KITAO Masato)")
end
# なぜか動かない!!
menuQuit.Click do|sender, args|
   browserForm.Close
end

mainMenu.MenuItems.Add menuFile
mainMenu.MenuItems.Add menuHelp
browserForm.Menu = mainMenu

# コントロールを追加
cs = headerPanel.Controls
cs.Add addressLabel
cs.Add addressText
cs.Add moveButton

# コントロールを追加
bodyPanel.Controls.Add browserCtrl

# フォームにコントロールの追加
browserForm.Controls.Add headerPanel
browserForm.Controls.Add bodyPanel

browserForm.ShowDialog

トラックバック

このエントリーのトラックバックURL:
http://hsj.jp/blog/mt-tb.cgi/1889

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年07月25日 19:44に投稿されたエントリーのページです。

ひとつ前の投稿は「IronRuby PreAlpha 1を触ってみる。」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type