ドラッグ&ドラッグとフォーム概要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() .macからの呼び出し本来は、IronPython内で「hm.Macro.Var[...]で処理した方が楽ですが、 #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 ); |