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
更新履歴