さっきの記事を書いた後に、もう少し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