最終更新日 2024-09-25

「hmPy・IronPython」のその他の例題 WPFの利用

概要

カレンダーの使用例となります。

カレンダーの使用

以下のようなファイルをcalender.pyとして作成してみましょう。
文字コードはcp932(sjis)です。

# coding : cp932

import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import (Form, MonthCalendar, Label,
                                  Button, Application)
from System.Drawing import Point


class calendarform(Form):
    def __init__(self):
        self.Height= 300
        self.Width = 260

        self.Text = 'カレンダーのデモ'

        self.cal = MonthCalendar()
        self.cal.MaxSelectionCount = 1
        self.cal.DateChanged += self.dateselect
        self.Controls.Add(self.cal)

        self.label = Label()
        self.label.Width = 200
        self.label.Height = 20
        self.label.Location = Point(5, 200)
        self.setdatehash()
        self.Controls.Add(self.label)

        self.button = Button()
        self.button.Text = 'OK'
        self.button.Width = 50
        self.button.Location = Point(self.ClientSize.Width/2-self.button.Width/2, 225)
        self.button.Click+=self.button_click
        self.Controls.Add(self.button)

    def dateselect(self, sender, args):
        self.setdatehash()

    def setdatehash(self):
        selectcalender = self.cal.SelectionRange.Start
        self.label.Text = ('選択されている日付:' + selectcalender.ToString('o')[:10]) # 手抜き
        selectcalender = self.cal.SelectionRange.Start
        # ユーザーが選択する度にマクロに渡す用途のハッシュに入れておく
        hm.Macro.Var['$year']  = selectcalender.Year
        hm.Macro.Var['$month'] = selectcalender.Month
        hm.Macro.Var['$day']   = selectcalender.Day

    def button_click(self, sender, args):
        self.Close()

try:
    form = calendarform()
    Application.Run(form)
finally:
    form.Close()

呼び出しマクロ

#PY = loaddll( hidemarudir + "\\hmPy.dll" );

#_ = dllfuncw( #PY, "DoFile", currentmacrodirectory + "\\calender.py" );

message( $year + "/" + $month + "/" + $day );

freedll( #PY );