入門編の基本となるクラス

概要

この章からはいよいよ「hm.NET」を参照として追加した際の使い方が紹介されてゆきます。

まずは、これからの章において、毎回同じソースを記述するのは無駄が多いことですので、
今後の基本となるソースを構築してしまいましょう。

マクロの開始・終了と、プログラムの常駐(前章と全く同じC#プログラムです)

「using Hidemaru」とするために、「hm.NET.dll」を参照に加えておきましょう。

PICTURE

  • C#側のソース。HmTest.dllとしてコンパイル

    まずは、これまで通り、秀丸マクロとの直接のインターフェイスとなる部分です。

    Program.cs
    using System;
    using System.Windows.Forms;
    
    namespace HmTest
    {
        public class HmTestClass
        {
            private static Form form;
            public static IntPtr CreateForm()
            {
                if (form == null || !form.Visible)
                {
                    form = new HmTestForm();
                }
    
                form.Show();
                return (IntPtr)1;
            }
    
            private static void DestroyForm()
            {
                if (form != null)
                {
                    form.Close();
                    form = null;
                }
            }
    
            public static IntPtr OnDetachMethod()
            {
                DestroyForm();
    
                return (IntPtr)0;
            }
    
        }
    }
    
    

    次はフォームのベースとなるクラスです。

    TestForm.cs
     using System;
    using System.Windows.Forms;
    
    namespace HmTest
    {
        partial class HmTestForm : Form
        {
            Timer timer;
    
            public HmTestForm()
            {
                this.FormClosing += form_FormClosing;
    
                CreateTimer();
                MethodCreate();
            }
    
            private void CreateTimer()
            {
                timer = new Timer()
                {
                    Interval = 1000
                };
    
                timer.Tick += TimerTick;
                timer.Enabled = true;
                timer.Start();
            }
    
            private void DeleteTimer()
            {
                if (timer != null)
                {
                    timer.Stop();
                    timer = null;
                }
            }
    
            private void TimerTick(object sender, EventArgs e)
            {
                MethodTick();
            }
    
    
            private void form_FormClosing(object sender, FormClosingEventArgs e)
            {
                Stop();
            }
    
            private void Stop()
            {
                try
                {
                    DeleteTimer();
                    MethodDestroy();
                }
                catch (Exception e)
                {
                    System.Diagnostics.Trace.WriteLine(e.Message);
                }
            }
        }
    
    }
    

    あなたが今後の章で編集することとなるのは、次のMyTestForm.csとなります。

    MyTestForm.cs
    using System;
    using System.Windows.Forms;
    using Hidemaru;
    
    namespace HmTest
    {
        partial class HmTestForm
        {
            protected void MethodCreate()
            {
                System.Diagnostics.Trace.WriteLine("フォーム生成時");
            }
    
            protected void MethodTick()
            {
                System.Diagnostics.Trace.WriteLine("チック時");
            }
            protected void MethodDestroy()
            {
                System.Diagnostics.Trace.WriteLine("フォームクローズ時");
            }
        }
    
    }
    
    
  • 秀丸マクロ側のソース

    HmNETTest.macなどと適当に名前を付ける
    debuginfo 1;
    debuginfo "macro start\n";
    #HMNET = loaddll( hidemarudir + @"\hm.NET.dll" );
     
    #r = dllfuncw( #HMNET, "SetDetachMethod", currentmacrodirectory + @"\HmTest.dll", "HmTest.HmTestClass", "OnDetachMethod" );
    #r = dllfuncw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTest.dll", "HmTest.HmTestClass", "CreateForm" );
    debuginfo "macro end\n";
    

    一度マクロを実行し、「デバッグモニター」にどのように順次表示されるか確認しましょう。

    今後の章では「MyTestForm.cs」と「HmNETTest.mac」のソース分のみ掲載されます。
    他の部分のソースは同一だと考えてください。