「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);