|
機能確認の報告です。
表題の件、問題なく機能しているようです。
いくつか試しましたが、以下のように、
言語を内側にそのまま記述でき、かつ、
変数とのやりとりとの距離が記述的に近いので、
「秀丸マクロは言語を問わない、ファイル内に複数の言語を入れ混ぜても問題なし、
変数共有も容易、かつ、見やすい」
といった状態にまでなったと思います。
確認したソースのうちの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"(...)"の内部にコメント「//」があっても、マクロ側ではなく、
文字列としてちゃんと解釈されているので(マクロパーサーとして、評価順を間違っ
たりしていない)、
主だったバグはないのではないかと思います。
とりあえず、ご報告まで
|
|