| 
			|  | 機能確認の報告です。
 
 表題の件、問題なく機能しているようです。
 
 
 いくつか試しましたが、以下のように、
 言語を内側にそのまま記述でき、かつ、
 変数とのやりとりとの距離が記述的に近いので、
 「秀丸マクロは言語を問わない、ファイル内に複数の言語を入れ混ぜても問題なし、
 変数共有も容易、かつ、見やすい」
 といった状態にまでなったと思います。
 
 確認したソースのうちの1つ
 
 #PY = loaddll( hidemarudir + "\\hmpy.dll" );
 
 if (! #PY) {
 message(".dllが無い");
 }
 
 #_ = dllfunc( #PY, "DoString", R"IRONPYTHON(
 # coding: cp932
 
 import sys
 import clr
 clr.AddReference("System.Drawing")
 clr.AddReference('System.Windows.Forms')
 clr.AddReference('Microsoft.Ink')
 from System.Drawing import Font, Color
 from System.Windows.Forms import (Form, Timer, DockStyle, Panel, TextBox, Bu
 tton,
 SplitContainer, Orientation)
 from Microsoft.Ink import *
 
 f = Form()
 f.Text = '手書き入力'
 
 btnClr = Button()
 btnClr.Text = 'クリア'
 
 btnCng = Button()
 btnCng.Text = "消しゴムに変更する"
 
 pnl = Panel()
 pnl.BackColor = Color.Khaki
 overlay = InkOverlay(pnl)
 overlay.Enabled = True
 
 tb = TextBox()
 tb.Font = Font('MS 明朝', 20)
 tb.Multiline = True
 
 sc = SplitContainer()
 sc.SplitterWidth = 10
 sc.Orientation = Orientation.Horizontal
 
 # Layout
 f.Width = 600
 f.Height = 400
 sc.Dock = DockStyle.Fill
 btnClr.Dock = DockStyle.Top
 btnCng.Dock = DockStyle.Top
 tb.Dock = DockStyle.Fill
 pnl.Dock = DockStyle.Fill
 f.Controls.Add(sc)
 sc.Panel1.Controls.Add(btnClr)
 sc.Panel1.Controls.Add(btnCng)
 sc.Panel1.Controls.Add(pnl)
 sc.Panel2.Controls.Add(tb)
 
 def OnStrokesDeleted(sender, args):
 tb.Text = overlay.Ink.Strokes.ToString()
 overlay.StrokesDeleted += OnStrokesDeleted
 
 def OnBtnClr_Click(sender, args):
 overlay.Ink.DeleteStrokes()
 pnl.Refresh()
 tb.Text = ''
 btnClr.Click += OnBtnClr_Click
 
 def OnBtnCng_Click(sender, args):
 
 if overlay.EditingMode == InkOverlayEditingMode.Ink:
 overlay.Enabled = False;
 overlay.EditingMode = InkOverlayEditingMode.Delete;
 
 # 削除を指定します。
 overlay.EraserMode = InkOverlayEraserMode.StrokeErase;
 
 # オーバーレイを再び有効にします。
 overlay.Enabled = True;
 btnCng.Text = 'ペンに変更する'
 else:
 overlay.Enabled = False;
 overlay.EditingMode = InkOverlayEditingMode.Ink;
 
 # オーバーレイを再び有効にします。
 overlay.Enabled = True;
 btnCng.Text = '消しゴムに変更する'
 
 btnCng.Click += OnBtnCng_Click
 
 gLastText = ""
 def TimerDraw(t, args):
 global gLastText
 tb.Text = overlay.Ink.Strokes.ToString()
 gLastText = tb.Text # 秀丸に渡すためのテキスト変数
 hm.debuginfo("update")
 if t:
 t.Stop()
 t = None # 破棄
 
 # Event handling
 def OnStroke(sender, args):
 t = Timer();
 t.Tick += TimerDraw;
 t.Interval = 100; # ミリ秒単位で指定
 t.Start();
 overlay.Stroke += OnStroke
 
 def FormClosed(sender, args):
 hm.debuginfo("close")
 f.FormClosed += FormClosed
 )IRONPYTHON");
 
 // 同じシンボルが問題ないか
 
 #_ = dllfunc( #PY, "DoString", R"IRONPYTHON(
 f.ShowDialog()
 )IRONPYTHON");
 
 
 freedll(#PY);
 
 
 R"(...)"の内部にコメント「//」があっても、マクロ側ではなく、
 文字列としてちゃんと解釈されているので(マクロパーサーとして、評価順を間違っ
 たりしていない)、
 主だったバグはないのではないかと思います。
 
 とりあえず、ご報告まで
 
 
 | 
 |