Apolloでメモ帳を作成します。
Apolloチュートリアルを参考にしました。
標準の複数行テキストコントロールPhi::Memoよりも高機能なPhi拡張ライブラリPhi::Editorを使用します。
alignプロパティにPhi::AL_CLIENTを設定すると、コントロールは親のクライアント領域いっぱいにコントロールのサイズが変更されます。
editor = Phi::Editor.new(self, :editor1, '') editor.align = Phi::AL_CLIENT editor.lines.clear editor.modified = false
editorの内容をクリアします。
#メニュー[ファイル]-[新規] menu_new.on_click = proc do editor.lines.clear @filename = '' end
ファイルを開くダイアログはPhi::OpenDialogを使用します。
#メニュー[ファイル]-[開く]
menu_open.on_click = proc do
dlg = Phi::OpenDialog.new
dlg.filter = 'テキスト文書(*.txt)|*.txt|Rubyスクリプト(*.rb)|*.rb|すべてのファイル(*.*)|*|'
if dlg.execute
editor.lines.load(dlg.file_name)
@filename = dlg.file_name
end
end
#メニュー[ファイル]-[保存]
menu_save.on_click = proc do
if @filename != ''
editor1.lines.save(@filename)
else
saveas() #名前を付けて保存
end
end
#メニュー[ファイル]-[名前を付けて保存]
menu_saveas.on_click = proc do
saveas() #名前を付けて保存
end
#名前を付けて保存
def saveas
dlg = Phi::SaveDialog.new
dlg.filter = 'テキスト文書(*.txt)|*.txt|Rubyスクリプト(*.rb)|*.rb|すべてのファイル(*.*)|*|'
if dlg.execute
editor1.lines.save(dlg.file_name)
@filename = dlg.file_name
end
end
#!ruby -Ks
require 'phi'
require 'dialogs' #Phi.message_dlg
require 'editor' #Phi::Editor
class MemoForm < Phi::Form
def initialize(*arg)
super
@filename = '' #表示中ののファイル名
#メニュー
Phi.new_menu(self, :menu1, [
menu_file = Phi.new_item('ファイル(&F)', '', :mi_file).add(
menu_new = Phi.new_item('新規(&N)', 'CTRL+N', :mi_new),
menu_open = Phi.new_item('開く(&O)', 'CTRL+O', :mi_open),
menu_save = Phi.new_item('保存(&S)', 'CTRL+S', :mi_save),
menu_saveas = Phi.new_item('名前を付けて保存(&A)', '', :mi_save),
Phi.new_line,
menu_exit = Phi.new_item('終了(&X)', '', :mi_exit)
),
menu_help = Phi.new_item('ヘルプ(&H)', '', :mi_help).add(
menu_about = Phi.new_item('memoについて', '', :mi_about)
)
])
#複数行テキストコントロール
editor = Phi::Editor.new(self, :editor1, '')
editor.align = Phi::AL_CLIENT
editor.lines.clear
editor.margin.left = 0
#メニュー[ファイル]-[新規]
menu_new.on_click = proc do
editor.lines.clear
@filename = ''
end
#メニュー[ファイル]-[開く]
menu_open.on_click = proc do
dlg = Phi::OpenDialog.new
dlg.filter = 'テキスト文書(*.txt)|*.txt|Rubyスクリプト(*.rb)|*.rb|すべてのファイル(*.*)|*|'
if dlg.execute
editor.lines.load(dlg.file_name)
@filename = dlg.file_name
end
end
#メニュー[ファイル]-[保存]
menu_save.on_click = proc do
if @filename != ''
editor1.lines.save(@filename)
else
saveas() #名前を付けて保存
end
end
#メニュー[ファイル]-[名前を付けて保存]
menu_saveas.on_click = proc do
saveas() #名前を付けて保存
end
#メニュー[ファイル]-[閉じる]
menu_exit.on_click = proc do
self.close
end
#メニュー[ヘルプ]-[memoについて]
menu_about.on_click = proc do
Phi.message_dlg('簡単なテキストエディタ')
end
end
#名前を付けて保存
def saveas
dlg = Phi::SaveDialog.new
dlg.filter = 'テキスト文書(*.txt)|*.txt|Rubyスクリプト(*.rb)|*.rb|すべてのファイル(*.*)|*|'
if dlg.execute
editor1.lines.save(dlg.file_name)
@filename = dlg.file_name
end
end
end
form = MemoForm.new(:form1, 'memo')
form.show
Phi.mainloop
更新履歴