要望:外部からのマクロ起動(帳票入力)No.00810
ENCODINGSHIFTJIS さん 99/10/26 17:34
 
// 失敗作:
// HTML の Form 入力を起動して 秀丸マクロを発生/起動する。
//
// ========================== - 1 -  .html 発生+起動
$basename=basename;
openfile "z.html";if(!result){menu "can't open";endmacro;}
   while("z.html"!=basename){nexthidemaru;}selectall;delete;
insert "<HTML><HEAD><TITLE>わかりやすい置換</TITLE></HEAD><BODY>\n";
insert "<P><FORM ACTION='JavaScript:makeHmac()' name='Zform'>\n";
// ACTION で外部から秀丸のマクロを起動できないか?or equivalent
insert "XX中の ";
insert "<input type=text size=11 name='aa'><BR>\n";
insert "○○直後の ";
insert "<input type=text size=11 name='bb'><BR>\n";
insert "☆☆が無ければ補充 ";
insert "<input type=text size=11 name='cc'><BR>\n";
insert "<input type=submit VALUE='実行'>\n";
insert "</P></FORM>\n";
insert "<SCRIPT LANGUAGE='JavaScript'>\n";
insert "var txst,fobj,Fw=2;\n";
insert "//\n";
insert "function makeHmac(){\n";
insert "with(document.Zform){\n";
insert "// 入力値検査\n";
insert "if(aa.value==''){alert('! XX');return;}\n";
insert "if(bb.value==''){alert('! ○○');return;}\n";
insert "if(cc.value==''){alert('! ☆☆');return;}\n";
insert "// z.mac 出力  引用符の使い分けは神経使う\n";
insert "fobj=new ActiveXObject('Scripting.FileSystemObject');\n";
                               // ↓頭に秀丸マクロdirを付けること。
insert "txst=fobj.OpenTextFile('x.mac',Fw,true);";//デスクトップになる
// 値渡しのやり方はこれでよいか?(ソース経由)
insert "txst.WriteLine('$aa=\"'+aa.value+'\";')\n";
insert "txst.WriteLine('$bb=\"'+bb.value+'\";')\n";
insert "txst.WriteLine('$cc=\"'+cc.value+'\";')\n";
insert "txst.WriteLine('searchdown \"<\"+$aa+\">\";');\n";
insert "    txst.Write('searchdown \"</\"+$aa+\">|<\"+');\n";
insert "txst.WriteLine('$bb+\">\",regular;');\n";
insert "txst.WriteLine(\"right;if('/'==code)endmacro;\");\n";
insert "txst.WriteLine('right length($bb)+1;');\n";
insert "txst.WriteLine(\"while(0xD==code||0x9==code||' '==code)\")\n";
insert "txst.WriteLine('right;#x=x;#y=y;');\n";
insert "txst.WriteLine('right length($cc)+2;');\n";
insert "txst.WriteLine('$w=gettext(#x,#y,x,y);');\n";
insert "txst.WriteLine('if(\"<\"+$cc+\">\"==$w)endmacro;');\n";
insert "txst.WriteLine('left length($cc)+2;');\n";
insert "txst.WriteLine('insert \"<\"+$cc+\">\";');\n";
insert "txst.WriteLine('endmacro;');\n";
insert "//\n";
insert "txst.Close();\n";
insert "} }</SCRIPT></BODY></HTML>\n";
//  ------------- .html 発生は特にマクロでする必要は無い。
save;#h=hidemaruhandle(0);
while($basename!=basename){prevhidemaru;}
closehidemaru #h;
//
//run "STARTbat.bat z.html";// 切れ味はイマイチ JScript は IE で
//
// JScript なので file I/O で x.mac 作成。
// ClipBoard 経由の形も可能。
// html 画面の方から秀丸へマクロ起動信号を送れるといいのだが
// マクロ起動のところだけActiveXObjectになっていると助かるのだが。
// 外部からのマクロ起動は /xマクロ名 ファイル名でopen時しかできない。
// 前半のSTARTも不要にできる。(秀丸と帳票画面を同時に開いたまま)
// ========================== - 2 -  作成 .mac 起動
//execmacro "x.mac"; // 帳票入力後、手でやらなきゃ ===========
//
// Form 入力のメニューやダイアログを自分で作る手もあるが、
// これからはHTML(XML)の帳票入力機能でしょう。今はHTML/JavaScript
// の混在で汚くなっている(大昔のBASICアプリのよう)けれど。
// (帳票機能の定型を整理する検討も進んでいるし将来性あり)
// 画像はめ込みの入力画面は秀丸で作る気にならないし。
// そんな機能は秀丸らしくない。
// でも帳票入力は使いたい!。これより便利に、ジレンマ
//
// 秀丸はcgiサーバーじゃないのでデータはfile/ClipBoard経由など
//   z.html x.mac は一時の作業用。
//
// 秀丸マクロ側主導(サーバー等)のかたちしかできないか?
//

[ ]
RE:00810 要望:外部からのマクロ起動(帳No.00871
ENCODINGSHIFTJIS さん 99/12/01 17:33
 
// イメージ作:
// HTML の Form 入力を起動して 秀丸マクロを起動する。

Fpaste.mac  ---------------------------------------
// 帳票入力を前画面に入れます。
selectall;cut;
#H=hidemaruhandle(0);prevhidemaru;closehidemaruforced #H;
paste;

GoHidemaru.htm -----------------------------------
<HTML><HEAD><TITLE>自己申告</TITLE>
<SCRIPT LANGUAGE=JavaScript>
function GOatiti(form){
alert(form.itm2.value);
alert(form.itm1.value);
// clipboard は使えない
     fobj=new ActiveXObject("Scripting.FileSystemObject");
txtf=fobj.OpenTextFile("h.$$$",2,true);//新規書き込み
txtf.WriteLine("項目1:"+form.itm1.value);
txtf.WriteLine("項目2:"+form.itm2.value);
                                mydate=new Date();
txtf.WriteLine("秀丸に無い値:"+mydate);// つもり
txtf.Close();
//
Wsh=new ActiveXObject("WScript.Shell");
Wsh.Run('"d:\\Program Files\\Hidemaru\\Hidemaru.exe" /xFpaste.mac h.$$$',
1,false);// サンプルなので見せます
// この前で Fpaste.mac の書き込みもできるけど、そこまでしなくとも。
// 直接イベント通信とかできないと切れ味悪し。
 }
</SCRIPT></HEAD><BODY>
<H2>動物占い</H2>
<!-- http サーバーが無くとも FORM は使える -->
<FORM>
<INPUT SIZE=22 VALUE="初期値1" TYPE=text NAME=itm1>
<INPUT SIZE=33 VALUE="初期値2" TYPE=text NAME=itm2>
<INPUT         VALUE="秀丸でGO" TYPE=button onClick="GOatiti(this.form)">
</FORM>
</BODY></HTML>

試験用の秀丸画面と GoHidemaru.htm をIE で開いておき
[秀丸でGO]ボタンを押す。



[ ]