Top / Programming / Ruby / Ruby GUIライブラリ / FXRuby / FXRubyでメモ帳作成(3)メニューバーを表示する(1)

FXRubyでメモ帳作成(3)

FXRubyでメモ帳を作成します。

メニューバーを表示する(1)

メニューバーを表示する(1)

最初にメニューバーを作成します。

menubar = FXMenubar.new(self, LAYOUT_FILL_X)

メニューバーに[ファイル]メニューを登録します。

filemenu = FXMenuPane.new(self)
FXMenuTitle.new(menubar, "ファイル(&F)", nil, filemenu)

[ファイル]メニューに[新規][開く][上書き保存][名前を付けて保存]を登録します。 FXMenuCommandの第一引数には親コンポーネントを指定します。第二引数にはキャプションを指定します。 connectメソッドでSEL_COMMANDメッセージを処理するブロックを割り当てます。

FXMenuCommand.new(filemenu, "新規(&N)\tCtl-N").connect(SEL_COMMAND) {
  puts "新規"
}
FXMenuCommand.new(filemenu, "開く(&O)\tCtl-O").connect(SEL_COMMAND) {
  puts "開く"
}
FXMenuCommand.new(filemenu, "上書き保存(&S)\tCtl-S").connect(SEL_COMMAND) {
  puts "上書き保存"
}
FXMenuCommand.new(filemenu, "名前を付けて保存(&A)").connect(SEL_COMMAND) {
  puts "名前を付けて保存"
}

[区切り線]を登録します。

FXMenuSeparator.new(filemenu)

[終了]メニューを登録します。

FXMenuCommand.new(filemenu, "終了(&X)\tCtl-X", nil, getApp(), FXApp::ID_QUIT)

次に、[編集]メニューを登録します。

editmenu = FXMenuPane.new(self)
FXMenuTitle.new(menubar, "編集(&E)", nil, editmenu)
FXMenuCommand.new(editmenu, "元に戻す(&U)\tCtl-Z").connect(SEL_COMMAND) {
  puts "元に戻す"
}
FXMenuSeparator.new(editmenu)
FXMenuCommand.new(editmenu, "やり直し(&R)\tCtl-Y").connect(SEL_COMMAND) {
  puts "やり直し"
}
FXMenuCommand.new(editmenu, "切り取り(&T)\tCtl-X").connect(SEL_COMMAND) {
  puts "切り取り"
}
FXMenuCommand.new(editmenu, "コピー(&C)\tCtl-C").connect(SEL_COMMAND) {
  puts "コピー"
}
FXMenuCommand.new(editmenu, "貼り付け(&P)\tCtl-V").connect(SEL_COMMAND) {
  puts "貼り付け"
}
FXMenuCommand.new(editmenu, "削除(&L)").connect(SEL_COMMAND) {
  puts "削除"
}
FXMenuCommand.new(editmenu, "すべて選択(&A)\tCtl-A").connect(SEL_COMMAND) {
  puts "全て選択"
}

[ヘルプ]メニューを登録します。 FXMenuTitleの第五引数にLAYOUT_RIGHTを指定します。これによって[ヘルプ]メニューは右寄せで表示されます。

helpmenu = FXMenuPane.new(self)
FXMenuCommand.new(helpmenu, "Memoについて(&A)").connect(SEL_COMMAND) {
  FXMessageBox.information(self, MBOX_OK, "memoについて",
    "簡単なテキストエディター")
  }
}
FXMenuTitle.new(menubar, "&Help", nil, helpmenu, LAYOUT_RIGHT)

ここまでのソースコードです。

#!ruby -Ks

require 'fox'
include Fox

class MemoWindow < FXMainWindow
  def initialize(app)
    super(app, "memo", nil, nil, DECOR_ALL, 0, 0, 400, 300)

    menubar = FXMenubar.new(self)

    filemenu = FXMenuPane.new(self)
    FXMenuTitle.new(menubar, "ファイル(&F)", nil, filemenu)
    FXMenuCommand.new(filemenu, "新規(&N)\tCtl-N").connect(SEL_COMMAND) {
      puts "新規"
    }
    FXMenuCommand.new(filemenu, "開く(&O)\tCtl-O").connect(SEL_COMMAND) {
      puts "開く"
    }
    FXMenuCommand.new(filemenu, "上書き保存(&S)\tCtl-S").connect(SEL_COMMAND) {
      puts "上書き保存"
    }
    FXMenuCommand.new(filemenu, "名前を付けて保存(&A)").connect(SEL_COMMAND) {
      puts "名前を付けて保存"
    }
    FXMenuSeparator.new(filemenu)
    FXMenuCommand.new(filemenu, "終了(&X)\tCtl-X", nil, getApp(), FXApp::ID_QUIT)

    editmenu = FXMenuPane.new(self)
    FXMenuTitle.new(menubar, "編集(&E)", nil, editmenu)
    FXMenuCommand.new(editmenu, "元に戻す(&U)\tCtl-Z").connect(SEL_COMMAND) {
      puts "元に戻す"
    }
    FXMenuSeparator.new(editmenu)
    FXMenuCommand.new(editmenu, "やり直し(&R)\tCtl-Y").connect(SEL_COMMAND) {
      puts "やり直し"
    }
    FXMenuCommand.new(editmenu, "切り取り(&T)\tCtl-X").connect(SEL_COMMAND) {
      puts "切り取り"
    }
    FXMenuCommand.new(editmenu, "コピー(&C)\tCtl-C").connect(SEL_COMMAND) {
      puts "コピー"
     }
    FXMenuCommand.new(editmenu, "貼り付け(&P)\tCtl-V").connect(SEL_COMMAND) {
      puts "貼り付け"
    }
    FXMenuCommand.new(editmenu, "削除(&L)").connect(SEL_COMMAND) {
      puts "削除"
    }
    FXMenuCommand.new(editmenu, "すべて選択(&A)\tCtl-A").connect(SEL_COMMAND) {
      puts "全て選択"
    }

    helpmenu = FXMenuPane.new(self)
    FXMenuCommand.new(helpmenu, "Memoについて(&A)").connect(SEL_COMMAND) {
      FXMessageBox.information(self, MBOX_OK, "memoについて",
        "簡単なテキストエディター")
    }
    FXMenuTitle.new(menubar, "&Help", nil, helpmenu, LAYOUT_RIGHT)
  end

  # Create and show the main window
  def create
    super
    show(PLACEMENT_SCREEN)
  end
end

application = FXApp.new("memo", "yamamoto@gesource.jp")
MemoWindow.new(application)
application.create
application.run

memo

更新履歴