FXRubyでメモ帳を作成します。
最初にメニューバーを作成します。
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