custom_dlg.rb
001 require 'phi'
002
003 class MyDialog < Phi::Form
004
005 def initialize(com_name, capt)
006 super(com_name, capt)
007 self.border_style = Phi::BS_DIALOG
008 self.width = 300
009 self.height = 100
010 self.position = Phi::PO_SCREEN_CENTER
011
012 margin = 10
013
014 ok = Phi::Button.new(self, :ok1, 'OK')
015 cancel = Phi::Button.new(self, :cancel1, 'キャンセル')
016 edit = Phi::Edit.new(self, :edit1, '')
017
018 ok.modal_result = Phi::MR_OK
019 cancel.modal_result = Phi::MR_CANCEL
020
021 edit.top = margin
022 edit.left = margin
023 edit.width = self.width - margin * 2 - 5
024
025 ok.top = edit.top + edit.height + margin
026 cancel.top = ok.top
027
028 cancel.left = self.width - cancel.width - margin - 5
029 ok.left = cancel.left - ok.width - margin
030
031 self.on_show = proc do
032 edit.set_focus
033 end
034 end
035
036 end
037
038 form = Phi::Form.new(:form1, 'formです')
039 button = Phi::Button.new(form, :button1, 'hoge')
040 form.height = 95
041 label = Phi::Label.new(form, :label1, '')
042 button.align = Phi::AL_TOP
043 label.align = Phi::AL_CLIENT
044 label.color = Phi::CL_WHITE
045
046 button.on_click = proc do
047 dlg = MyDialog.new(:dlg1, '何か入力してください。')
048 result = dlg.show_modal
049 case result
050 when Phi::MR_OK
051 if dlg.edit1.text != ''
052 label.caption = dlg.edit1.text
053 end
054 when Phi::MR_CANCEL
055 label.caption = 'キャンセルが押されました。'
056 end
057 end
058 form.show
059 Phi.mainloop
このスクリプトを実行すると、このような ウィンドウがあらわれます。