TIPS > vrubyで日付,時刻選択コントロール

ここでは、visualurubyで日付、時刻選択のコントロールを表示する方法をメモします。

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (datetimepickuper.jpg)


下記のサンプルコードを実行すると、上のようなウィンドウが表示されます。
日付横の▼ボタンを押すとカレンダーが表示されます。

- サンプルコード
require 'vr/vruby'
require 'vr/vractivex'
require 'vr/vrlayout'
require 'vr/vrdialog'
require 'date'
 
#
# === 日付選択コントロール
#
class DatePickerAXControl < VRActiveXControl
   ACTIVEXCINFO=["MSComCtl2.DTPicker","DDTPickerEvents"]
 
   def date=(src_date)
     self.ole_interface.Year = src_date.year
     self.ole_interface.Month = src_date.month
     self.ole_interface.Day = src_date.day
   end
 
   def date
     return Date.new(self.ole_interface.Year, 
                     self.ole_interface.Month,
                     self.ole_interface.Day)
   end
 end
 
 #
 # === 時間選択コントロール
 #
 class TimePickerAXControl < VRActiveXControl
   ACTIVEXCINFO=["MSComCtl2.DTPicker","DDTPickerEvents"]
 
   def vrinit
     super
     self.ole_interface.Format = 2
     self.time = Time.now
   end
 
   def time=(src_time)
     self.ole_interface.Hour = src_time.hour
     self.ole_interface.Minute = src_time.min
     self.ole_interface.Second = src_time.sec
   end
 
   def time
     rtime = Time.local(Time.now.year, 
                        Time.now.month, 
                        Time.now.day,
                        self.ole_interface.Hour,
                        self.ole_interface.Minute,
                        self.ole_interface.Second)
   end
end
 
class DateTimeSelectDialog < VRModalDialog
 
  def _datetime_select_form_init
    self.caption = 'DateTime Select'
    self.move(226,181,272,102)
    addControl(DatePickerAXControl,'datec',"",8,8,120,20,1342177408 | WStyle::WS_TABSTOP)
    addControl(TimePickerAXControl,'timec',"",136,8,120,20,1342177408 | WStyle::WS_TABSTOP)
    addControl(VRButton,'btn_ok',"Ok",8,40,80,24,1342177280 | WStyle::WS_TABSTOP)
    addControl(VRButton,'btn_cancel',"Cancel",176,40,80,24,1342177280 | WStyle::WS_TABSTOP)
 
    options.each { |key, value|
      case key
      when :datetime
        @datec.date = value
        @timec.time = value
      end
    }
  end 
 
  def construct
    _datetime_select_form_init
  end 
 
  def btn_ok_clicked
    date = @datec.date
    time = @timec.time
    datetime = DateTime.new(date.year, 
                            date.month, 
                            date.day,
                            time.hour,
                            time.min,
                            time.sec)
    self.close(datetime)
  end
 
  def btn_cancel_clicked
    self.close(false)
  end
end 
 
if __FILE__ == $0
  options = Hash.new
  options[:datetime] = DateTime.new(1999, 1, 1, 1, 1, 1)
  p VRLocalScreen.modalform(nil, WStyle::WS_OVERLAPPEDWINDOW, DateTimeSelectDialog, nil, options)
  VRLocalScreen.messageloop
end
 
最終更新:2010年09月03日 11:32
添付ファイル