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

  • 概要

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

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

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

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

    • 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 OnDetathMethod()
              {
                  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", "OnDetathMethod" );
      #r = dllfuncw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTest.dll", "HmTest.HmTestClass", "CreateForm" );
      debuginfo "macro end\n";
      

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

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