home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 January (DVD)
/
VPR980100.ISO
/
OLS
/
WIN32
/
KAKIMAC
/
KAKIMACP.LZH
/
HMWLP.mac
< prev
next >
Wrap
Text File
|
1997-05-14
|
14KB
|
436 lines
// HMWLP.MAC Ver.3
// 秀丸からWinLPrtをDDEで制御するマクロ - Version 3
// (WinLPrt Ver.5.27 以降が必須!)
// Programmed by h_tosh & 水銀水 1996/10/15
// Arranged by 水銀水 1997/01/19
// ReWrited by 水銀水 1997/05/15
call setCond; //状態設定
call DDEcom; // DDE通信
call setStyleData; //書式情報取得
call getPrevpage; //プレビューモードにし、表示頁を算出
call dispPrev; //プレビュー表示
call afterPrev; //プレビュー後の動作
ending://終了
ddeterminate;
title 0;
#hwndCALC=findhidemaru($tmp);
if(#hwndCALC>0){
closehidemaruforced #hwndCALC;
}
endmacro;
endByFalse://不正による終了
message $$1;
goto ending;
DDEcom:// DDE通信
// WINLPRT.EXEのフルパスを取得 by h_tosh (水銀水には、こんなマネはできません(^^;)
openreg "LOCALMACHINE", "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\WINLPRT.EXE";
$WinLPrtPass = getregstr( "" );
closereg;
// DDE通信情報
$app="WINLPRT";
$topic="PRTSERVER";
// DDE接続<<==(h_toshさんのWinLPrtヘルプを参考にさせて頂きましたm(_ _)m)
ddeinitiate $app, $topic;
if (!result) {// WinLPrtが動作していないので起動する
title "WinLPrt起動中...";
if(!#runAndPreview){
if(#stayMode){
title "●WinLPrt(常駐モード)起動中...";
run $WinLPrtPass+" /r ";
}else{
title "●WinLPrt(通常通り)起動中...";
run $WinLPrtPass+" /m ";
}
}else{
if(#stayMode){
title "●WinLPrt(常駐モード)起動中...";
run $WinLPrtPass+" /r ";
}else{
title "●WinLPrt(ステルスモード)起動中...";
run $WinLPrtPass+" /h ";
}
}
if(!result)call endByFalse
"報告…WinLPrtの起動に失敗しました。\n"+
"内容…WinLPrtが見当たりません。\n"+
"対策…WinLPrtが正しく導入されているか確認してください\n";
else if(!#runAndPreview)goto ending;
title "WinLPrtとDDE通信中...";
##retry = 0;
retry_loop:// ウェイト
##loop = 0;
while (##loop < #reTryWaitCount)##loop = ##loop + 1;
ddeinitiate $app, $topic;
if (!result) {
if (##retry > #retryMaxNum)call endByFalse
"報告...WinLPrtとのDDE接続に失敗しました。\n"+
"内容...WinLPrt自体はすでに起動してます。"+
"対応...続けて当マクロを再実行。次回からは即、プレビューできます(^^)";
else {// マシンによってはリトライが必要
##retry = ##retry + 1;
title "DDE接続リトライ("+str(##retry)+")中...";
goto retry_loop;
}
}
call checkVersion;
}else{
// play "c:\\windows\\media\\The Microsoft Sound.wav";//気晴らし(^^;
if(!#runAndPreview){
ddeexecute "ShowMainWnd(0)";
ddeexecute "ShowPrevWnd(0)";
goto ending;
}
}
return;
watchLastPrevPage://ddeadvice版
$$g0 = dderequest("PreviewPage");
if($$g0 == "" || $$g0 == "0")$$g0 = "1";
else{
title "HMWLP - プレビューページ("+$$g0+")監視中...";
#OrgPage = val($$g0);
}
while( 1 ) {
call getStyleNow2;
ddestartadvice "PreviewPage", $$g;
$$g = "";
while( strlen($$g) == 0 ){
ddewaitadvice "PreviewPage", 100;
}
if( $$g == "0")break;
else $$gg = $$g;
title "HMWLP - プレビューページ("+$$g+")監視中...";
}
if(val($LPP)*val($PP)==0)message "DDE情報の取得ミス";
if($$gg=="")$$gg=$$g0;
return val($$gg);
calcPage://プレビュー表示ページの算出
if(!#calculateType){//文字充填率で簡易計算
##pageChar=val($WLPColNum)*val($WLPRowNum)*#WLPTblNum;
##pageCharRC=##pageChar*#fullUpCharRate/100;
##PP=1+width*(#ty+1)/##pageChar;
}else{//できるだけ正確に計算してみる(^_^ゞ
title "プレビュー表示ページを算出中...";
disabledraw;
selectall;
copy;
moveto #tx,#ty;
#hwndCALC=findhidemaru($tmp);
if(#hwndCALC<0){
call openCalc;
}else{//異常終了による残留したTMP秀丸処理
#hwndCALC=hidemaruhandle(#hwndCALC);
if(#hwndCALC){
setactivehidemaru #hwndCALC;
selectall;
delete;
}else call openCalc;
}
if(#widthOrg<1 || #widthOrg>250){
message "err"+str(#widthOrg);
goto ending;
}
config "w"+str(#widthOrg);
envchanged;
if(#SEL)paste;
else poppaste;
moveto #tx,#ty;
golinetop2;
##CharXY=(#ty-y)*#widthOrg+#tx;
config "w"+$WLPColNum;
envchanged;
##nY=y+(##CharXY/val($WLPColNum));
##PP=1+##nY/(val($WLPRowNum)*#WLPTblNum);//conf"w"によるカーソル移動の補正(^_^)
setactivehidemaru #hwndOrg;
title "プレビュー画面準備中...";
moveto #tx,#ty;
enabledraw;
}
return str(##PP);
getPage:
if(#startPageCalc){
call calcPage;
$dispPage=$$return;
}else beep;
return;
wait:
##k=0;
while(##k<##1)##k=##k+1;
return;
openCalc:
openfile " /h ";
changename $tmp;
#hwndCALC=hidemaruhandle(0);
return;
calcHMLastPage:
setactivehidemaru #hwndCALC;
config "w"+$WLPColNum;//この時点では、keepCalcHMはONであるはずだからOK
envchanged;
moveto 0,(#LastPage-1)*val($WLPRowNum)*#WLPTblNum;
config "w"+str(#widthOrg);//この時点では、keepCalcHMはONであるはずだからOK
envchanged;
#LastPageHMY = y;
setactivehidemaru #hwndOrg;
return;
//書式情報取得
setStyleData:
if(!#NoName){
ddeexecute "SearchAsscFormat("+basename2+")";
if(!result)goto ending;
$WLPAsscFormat=dderequest( "AsscFormat" );
}else $WLPAsscFormat="";
if($WLPAsscFormat==""){
beep;
if(#dsNameYN){//現在の書式を保存しマクロ終了後に戻すべき?
$WLPAsscFormat=$dsName;
call waitTitle "指定デフォルト書式";
}else{
$WLPAsscFormat=dderequest( "CurrentFormat" );
call waitTitle "現書式を継続使用して";
}
}else{
ddeexecute "SetCurrentFormat("+$WLPAsscFormat+")";
$WLPAsscFormat=dderequest( "AsscFormat" );
}
ddeexecute "SetCurrentFormat("+$WLPAsscFormat+")";
$WLPColNum=dderequest( "ColumnNumber" );
$WLPRowNum=dderequest( "RowNumber" );
$WLPTblNum=dderequest( "TableNumber" );
#WLPTblNum=val($WLPTblNum);
if(#WLPTblNum<0)#WLPTblNum=#WLPTblNum*(-1);
if(#WLPTblNum*val($WLPColNum)*val($WLPRowNum)==0)call endByFalse "●メモリ不足が発生しました..終了します";
$WLPColNumOrg=$WLPColNum;
$WLPRowNumOrg=$WLPRowNum;
$WLPTblNumOrg=$WLPTblNum;
#WLPTblNumOrg=#WLPTblNum;
return;
waitTitle:
if(#msgWaitCount>100){
title "[×]関連付け書式ナシ!! "+$$1+"("+$WLPAsscFormat+")を採用";
while(##i<#msgWaitCount)##i=##i+1;
}
return;
getStyleNow:
ddeinitiate $app, $topic;
$WLPAsscFormat=dderequest( "CurrentFormat" );
if(!result)call endByFalse "●報告...getStyleNowのdderequest( AsscFormat )";
else message $WLPAsscFormat;
ddeexecute "SetCurrentFormat("+$WLPAsscFormat+")";
$WLPColNum=dderequest( "ColumnNumber" );
$WLPRowNum=dderequest( "RowNumber" );
$WLPTblNum=dderequest( "TableNumber" );
$LPP=dderequest( "LastPreviewPage" );
$PP=dderequest( "PreviewPage" );
#WLPTblNum=val($WLPTblNum);
if(#WLPTblNum<0)#WLPTblNum=#WLPTblNum*(-1);
if(#WLPTblNum*val($WLPColNum)*val($WLPRowNum)==0)call endByFalse "●メモリ不足が発生しました..終了します";
return;
getStyleNow2:
$$WLPAsscFormatN=dderequest( "CurrentFormat" );
if($$WLPAsscFormatN!=$WLPAsscFormat)ddeexecute "SetCurrentFormat("+$$WLPAsscFormatN+")";
$WLPTblNum=dderequest( "TableNumber" );
$LPP=dderequest( "LastPreviewPage" );
if($LPP=="0"||$LPP=="")$LPP=dderequest( "LastPreviewPage" );
if($LPP=="0"||$LPP=="")$LPP=dderequest( "LastPreviewPage" );
$PP=dderequest( "PreviewPage" );
if($PP=="0"||$PP=="")$PP=dderequest( "PreviewPage" );
if($PP=="0"||$PP=="")$PP=dderequest( "PreviewPage" );
#WLPTblNum=val($WLPTblNum);
if(#WLPTblNum<0)#WLPTblNum=#WLPTblNum*(-1);
if(#WLPTblNum*val($WLPColNum)*val($WLPRowNum)==0)call endByFalse "●メモリ不足が発生しました..終了します";
return;
checkVersion:
$$version = dderequest("Version");
if(!result)call endByFalse "●報告...WinLPrtのバージョンがかなり古いようなので、HMWLP(Ver.2)は停止します。\n"+
"●理由...WinLPrtのバージョンが5.19以降でないと、HMWLP.MAC(Ver.1)は動作しません。また、HMWLP.mac(Ver.2)はWinLPrt(Ver.5.20)以降でないと正しく動きません。\n"+
"●対応...WinLPrtの最新版を、NIFTY-Serve FWINAL LIB#8 か、h_toshさんのホームページ<http://www.na.rim.or.jp/~htosh/>で入手してください。";
##verNum = strstr($$version,".");
$$v = leftstr($$version,##verNum)+rightstr($$version,2);
if(val($$v)<520)call endByFalse "●...WinLPrtのバージョンが5.20より古いようなので、HMWLP(Ver.2)は停止します。\n"+
"●理由...HMWLP(Ver.2)はWInLPrt(Ver.5.20)以降が必要です。\n"+
"●対応...WinLPrtの最新版を、NIFTY-Serve FWINAL LIB#8 か、h_toshさんのホームページ<http://www.na.rim.or.jp/~htosh/>で入手してください。";
return;
checkType:
if(#calculateType==0 && (#fullUpCharRate<0 || #fullUpCharRate>100))call endByFalse
"注意...文字充填率によるページ算出に設定されていますが問題アリ。\n"+
"内容...現在[#fullUpCharRate="+str(#fullUpCharRate)+"]となっています。\n"+
"対応...#fullUpCharRateには 1~100 の値を半角数字で指定してください。";
return;
setINI:
if($stayMode == "")call setIniFirst;
else call setIniGet;
call checkType;
if(filename==""){
if(updated==0)#NoName=2;
else #NoName=1;
}
return;
setCond:
$ff = filename;
$tmp = hidemarudir+"\\HMWLP.TMP";
#widthOrg=width;
#hwndOrg=hidemaruhandle(0);
$fi = hidemarudir+"\\kakimac\\HMWLP.kdf";
$se = "ENV";
$sp = "PRV";
if(iskeydown(91)||iskeydown(92))execmacro "hmwlpS.mac";
$stayMode = getinistr($fi,$se,"stayMode");
call setINI;
call checkGo;
return;
getPrevpage://プレビューモードにし、表示頁を算出
if(#reversePrt){message "●確認...現在、逆順印刷に設定されています。\n"+
"●操作...プレビューを『終了後』に逆順印刷を開始します。\n"+
"●注意...プレビュー画面から直接「印刷」を実行してはダメ!";
}
ddeexecute "SetPreview(1)";
if(!result)call endByFalse "WinLPrt「プレビューモードにする」で失敗";
if(!selecting){//全体印刷
#tx=x;#ty=y;
if (updated||#NoName) {
#update=1;
if(#startPageCalc){
call getPage;
}else{
disabledraw;
selectall;
copy;
}
$exec="PrintFile(/c;/v"+$dispPage+")";
} else {
if(#startPageCalc)call getPage;
$param=filename;
$exec="PrintFile(/v"+$dispPage+";"+$param+")";
}
moveto #tx,#ty;
if(#startPageCalc)ddeinitiate $app, $topic;//再接続!
if(#update)ddeexecute "SetClipboardFileName("+filename2+"(更新中) "+date+" "+time+")";
}else{//文字列、行、BOX等の範囲指定印刷
if(rectselecting)#RECT=1;//box
else #RECT=0;// no box
#SEL=1;
#tx=seltopx;#ty=seltopy;
#ex=selendx;#ey=selendy;
disabledraw;
copy;
moveto #tx,#ty;
if(#RECT)beginrect;
else beginsel;
moveto #ex,#ey;
#partial=1;
$exec="PrintFile(/c)";
}
return;
dispPrev://プレビュー表示
ddeexecute $exec;
if (!result)call endByFalse "WinLPrt「プレビュー作画」で失敗";
ddeexecute "ShowPreviewWnd(0)";
if (!result)call endByFalse "WinLPrt「プレビュー表示」で失敗";
return;
afterPrev://0:秀丸でも最後のプレビュー画面を表示、1:WinLPrt起動時の秀丸画面
if(!#keepCalcHM)goto ending;
else {
call watchLastPrevPage;
#LastPage = ##return;
if(!#LastPage){
message "プレビューで問題発生(^^; 作業ファイルを探す努力をして、見つかればこれを閉じ、マクロを終了します。";
#tmpOrder = findhidemaru("+$tmp+");
if(#tmpOrder != -1)closehidemaruforced #hwndCALC;
else message "何か不正な事件が事件が…";
goto ending;
}else{
if(#partial)return;
call calcHMLastPage;
if((//書式名の変更にも対応するべき?
$WLPColNumOrg==$WLPColNum &&
$WLPRowNumOrg==$WLPRowNum &&
#WLPTblNumOrg==#WLPTblNum )){
if(#LastPage == #OrgPage){
if(!#reversePrt)return;
}
}
if(!#reversePrt)moveto 0,#LastPageHMY;
else call reversePrint;
}
}
return;
checkGo://白紙の秀丸調査
if(y==0 && x==0 && code==eof){// DDE取得ミスの事前回避
question "●報告…プレビューできません。\n"+
"●理由…白紙でプレビューする文字列がありません。\n"+
"●対応…とりあえずWinLPrtを起動しましょうか?";
if(!result)endmacro;
else #runAndPreview=0;
}
return;
reversePrint://"reverse print"
ddeinitiate $app, $topic;
ddeexecute "SetPreview(0)";// 1:preview 0:print
question "●今から、第"+$LPP+"ページから1ページへ向けて、逆順に印刷を開始します。たっぷり時間をかけて悠々と印刷します。"+
"(注意)逆順印刷を開始するとページ数と同じ回数だけ印刷ダイアログボックスが出て、そのたびにページのカウントをしますが、慌てたり怖がることはありません。印刷は正しく行えます(^^;"+
"\n●逆順印刷を実行しても、よろしゅうござひますね。";
if(!result)goto ending;
#LPP=val($LPP);
while(#LPP>0){
ddeexecute "PrintFile(/n"+str(#LPP)+";"+$ff+")";
#LPP=#LPP-1;
}
return;
setIniGet:
#stayMode = getininum($fi,$se,"stayMode");
#keepCalcHM = getininum($fi,$se,"keepCalcHM");
#reTryWaitCount = getininum($fi,$se,"reTryWaitCount");
#retryMaxNum = getininum($fi,$se,"retryMaxNum");
#msgWaitCount = getininum($fi,$se,"msgWaitCount");
#runAndPreview = getininum($fi,$sp,"runAndPreview");
#startPageCalc = getininum($fi,$sp,"startPageCalc");
#calculateType = getininum($fi,$sp,"calculateType");
#pageCheckLine = getininum($fi,$sp,"pageCheckLine");
#pageCheckMinL = getininum($fi,$sp,"pageCheckMinL");
#fullUpCharRate = getininum($fi,$sp,"fullUpCharRate");
#reversePrt = getininum($fi,$sp,"reversePrt");
#dsNameYN = 2-getininum($fi,$sp,"dsNameYN");
$dsName = getinistr($fi,$sp,"dsName");
if($dsName=="")$dsName="標準";
return;
setIniFirst:
#stayMode = 1; //1:常駐モード起動、0:非常駐モード起動
#keepCalcHM =1; //1:秀丸でも最後のプレビュー画面を表示、0:WinLPrt起動時の秀丸画面
#runAndPreview=1; //1:起動に続いてプレビュー、0:WinLPrtを起動するだけ
#startPageCalc=1; //1:ページ算出(低速)、0:常に1ページ目から表示(高速)
#calculateType=1; //1:正確に算出(正確&低速)0:文字充填率で概算(高速&不正確)
#pageCheckLine=1; //1:現在のカーソル位置が先頭に近い場合は高速に第一ページを自動表示、0:頁計算は上の設定に任せる
#pageCheckMinL=30; //頁計算をする場合に、頁計算を開始する位置(これ以上だと頁計算する)
#fullUpCharRate=80; //文字充填率(1~100の半角数字を指定)
#reTryWaitCount=1000;//ddeinitiate文で再接続するためのウェイト(各自の環境に依存)
#retryMaxNum=5; //リトライ最大回数
#msgWaitCount=3000; //関連付けされていない場合に自動設定される書式の表示時間カウンタ
#reversePrt =0; //0:正順に印刷、1:逆順に印刷(ただし、プレビュー終了後)
#dsNameYN = 1;
$dsName = "標準";
return;