IronPythonの例の1つとなります。www.ironpython.infoにある例題と同じです。
フォームに適当にドラッグ&ドロップし、最後に秀丸にリストを返すといった例にしてみましょう。
以下のファイルをdraganddrop.pyとして保存します。
# coding : cp932 import clr clr.AddReference('System.Windows.Forms') clr.AddReference('System.Drawing') from System.Drawing import Point, Size from System.Windows.Forms import Application, DragDropEffects, DataFormats, Form, ListBox class DragAndDropForm(Form): def __init__(self): self._listBox1 = ListBox() self._listBox1.AllowDrop = True self._listBox1.FormattingEnabled = True self._listBox1.ItemHeight = 12 self._listBox1.Location = Point(12, 19) self._listBox1.Size = Size(413, 208) self._listBox1.TabIndex = 0 self._listBox1.DragEnter += self._drag_enter self._listBox1.DragDrop += self._drag_drop self.AllowDrop = True self.ClientSize = Size(440, 250) self.Controls.Add(self._listBox1) self.Text = 'Drag and Drop Form' def _drag_enter(self, sender, e): if e.Data.GetDataPresent(DataFormats.FileDrop): e.Effect = DragDropEffects.All else: e.Effect = DragDropEffects.None def _drag_drop(self, sender, e): data = e.Data.GetData(DataFormats.FileDrop, False) for s in data: print self._listBox1.Items.Add(s) listcnt = 0 listref = [] dNd = DragAndDropForm() try: dNd.ShowDialog() hm.debuginfo(dNd._listBox1.Items.Count) for i in dNd._listBox1.Items: listref.append(i) hm.debuginfo(i) listcnt = dNd._listBox1.Items.Count except: dNd.Close() finally: dNd.Close()
本来は、IronPython内で「hm.Macro.Var[...]で処理した方が楽ですが、
ここでは秀丸マクロからIronPythonの値を取得する形で記述してみましょう。
「リストの個数」を得て、Get***ItemOfListで取得していく、というモノです。
#PY = loaddll( hidemarudir + "\\hmPy.dll"); #_ = dllfuncw( #PY, "DoFile", currentmacrodirectory + "\\draganddrop.py"); #listcnt = dllfuncw( #PY, "GetNumVar", "listcnt" ); ##i=0; while(##i < #listcnt) { $$item = dllfuncstrw( #PY, "GetStrItemOfList", "listref", ##i ); message($$item); ##i = ##i + 1; } freedll( #PY );