最終更新日 2024-09-25

「hmPy・IronPython」の例題⑧ クラスを使ったFormやGUIのコンポーネント

概要

IronPythonの例題のひとつとなります。

フォームの操作

C#で利用するのと、全く同一です。
非常に典型的な作りであり、一番見慣れている形と言えるでしょう。

#PY = loaddll( hidemarudir + @"\hmPy.dll" );
 
#_ = dllfuncw(#PY, "DoString", R"IRONPYTHON(
import clr
clr.AddReferenceByPartialName('System.Windows.Forms')
clr.AddReferenceByPartialName('System.Drawing')

import System
import System.Windows.Forms
import System.Drawing

from System.Drawing import *
from System.Windows.Forms import *
from System.Drawing import Point
from System.Windows.Forms import Form, Button, Application

# 現在のファイル名をフォームのタイトルに使うため
curfilename = hm.Macro.Var["filename"]
variable1 = 300

class MyForm(Form):
    def __init__(self):
        self.Text = curfilename
        self.Width = 450
        self.b1 = Button()
        self.b1.Width = 240
        self.b1.Height = 30
        self.b1.Left = 20
        self.b1.Top = 30
        self.b1.Text = '秀丸マクロボタン(半角アイウエオ)'
        self.b1.Click += self.b1_Click
        self.Controls.Add(self.b1)
    def b1_Click(self, sender, earg):
        self.cd = ColorDialog()
        self.cd.Color = Color.Blue
        self.cd.AllowFullOpen = True
        self.cdret = self.cd.ShowDialog()
        sender.Text = curfilename
        if self.cdret == DialogResult.OK:
             self.BackColor = self.cd.Color

f = MyForm()
Application.Run(f)
hm.Macro.Var["$recieve_f"] = f.ToString() # フォームを文字列化したものを返す。
f.Show()

)IRONPYTHON"
);
 
// IronPython内部のクラスインスタンスをそのまま文字列化したようなものが表示される。
message($recieve_f);
 
freedll(#PY);