|
DDEもデータ渡しに使えます、パス展開に注意。
// ddedict.mac
// § 田楽サーバー(常駐)やExcelを一時記憶として使う。
//
// 引数・返値渡しやグローバル変数の代用として。
//
// 編集画面転換ができない制約(DDEが切れる)はreg/iniよりも
// 使いにくいがI/Oしないことの早さは期待できるか?
// keepalive;再接続で対応できるか?再接続のトピック名はどう渡す?
//
// 田楽サーバー:ダイアログコントロールの項目/テキストを使う。
// 指定は番号なので配列扱い。項目名が利くtreeは使えるか?
// savedialog;loaddialog;でファイル保存可能
// 識別や状態属性として使える項目が多い、読み取り中心で
//
// InfoBus:データ交換・コンテナを実現するサーバーがほしい。
// これからのソフトは便利機能満載から、plug-in拡張可能にしてほしい。
//
// Excel:セルを読み書きする。
//
//
//goto Exceltest: // Excel だけの時
// dgsvINIT.mac =============================
goto skip1;
//
deadDGsv:
message "田楽サーバとの DDE 通信の初期化に失敗しました。";
#hwnddg = findwindowclass("DengakuServerClass");
if( #hwnddg ) ##s = sendmessage(#hwnddg,0x0112,0xF060,0);
endmacro;
//
skip1:
// DDE 初期化の実行, 失敗したら常駐確認、起動してもう一回
ddeinitiate "DengakuServer","AllService";if(!result){
if(findwindowclass("DengakuServerClass"))goto deadDGsv;
else{ run hidemarudir + "\\dgserver.exe";if(!result){
message "田楽サーバの起動に失敗しました。";endmacro; }
ddeinitiate "DengakuServer","AllService";if(!result)goto deadDGsv;
} }
// ====== 接続は確立できたから、=====================
//
// ここでは list を使用
ddepoke "newdialog", "99,記憶可能のテスト";
ddepoke "newcontrol", "list,list1";
ddepoke "item", "リストボックス";
ddepoke "item", "リスト1";
ddepoke "item", "リスト2";
ddepoke "item", "リスト3";
ddeexecute "savedialog '" + hidemarudir + "\\dat\\testdict.dat' 'Configurati
on Dialog for HogeMacro Ver.1.00'";// .dat見てみよう
ddeexecute "loaddialog '" + hidemarudir + "\\dat\\testdict.dat' 'Configurati
on Dialog for HogeMacro Ver.1.00'";
if( result == false ) endmacro;
// テストですからソースはダラダラ
menu "読み取り";
#i=0;while(#i<4){#i=1+#i;
menu dderequest("getitem,list1,"+str(#i)); }// 読み取り
menu "変更";
ddeexecute "changeitem,list1,変更リスト,1";// 変更
#i=0;while(#i<4){#i=1+#i;
menu dderequest("getitem,list1,"+str(#i)); }// 読み取り
menu "削除";
ddeexecute "deleteitem,list1,3";// 削除
#i=0;while(#i<3){#i=1+#i;
menu dderequest("getitem,list1,"+str(#i)); }// 読み取り
menu "追加";
ddeexecute "setitem,list1,追加テキスト,1";// 追加1
ddeexecute "setitem,list1,追加2,1";// 追加2
#i=0;while(#i<5){#i=1+#i;
menu dderequest("getitem,list1,"+str(#i)); }// 読み取り
//
// Excelの場合 ----------------------------------------
Exceltest:
//
ddeinitiate "Excel","System";
if(!result){
run "c:\\Program Files\\Microsoft Office\\Office\\excel.exe";
if(result)ddeinitiate "Excel","System";
else menu "Excel起動できません"; }
// 開いたExcelファイルのトピック名を取得
$topicname=dderequest("Selection");
menu $topicname;// Excel の細かな動きは?
$sheetname=leftstr($topicname,strstr($topicname,"!"));
menu $sheetname;
ddeterminate; // サーバとの通信を一度終了 Excel実行は継続
//
menu $sheetname;
ddeinitiate "Excel",$sheetname;// より小さいオブジェクトに接続
if(!result)menu "sheetに接続できません";
// http://www.library.co.jp:80/access/log1/100.html
// の方法をまねてみた。
// 面倒、 . でつなげるだけにしてほしい。
// セルに書き込む
ddepoke "R1C1","秀丸からのデータ";
ddepoke "R1C2","0123456789";
menu "書き込んだ?";
// 読み取り
menu dderequest("R1C1");
menu dderequest("R1C2");
menu dderequest("R2C3");
ddeterminate; // サーバとの通信を一度終了 Excel実行は継続
endmacro;
>
>∃
|
|