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
