2006/4/23 (日) 14:16:29 maru  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
[4433] マクロからアウトプットウインドウへ出力
>>data:5188にちょっと関連して
マクロから別のウインドウに出力するような機能が
時々要望としてあがるので、アウトプットウインドウに出力
するマクロ関数を作ってみました。
共有フォルダ:Developer/Source/MacroTraceOut.diff

integer S_TraceOut ( S1 );

S1: 出力したい文字列
戻り値: 出力文字列長

2006/4/24 (月) 00:50:28 げんた  
INCM1.23c
[4434] RE: マクロからアウトプットウインドウへ出力
PPAとJavaScriptで試しましたが動作は問題ないようですね.
▼PPA
var
        a, i : Integer;
begin
        a := S_TraceOut( 'TEST of TraceOut' );
        for i := 0 to 5 do
        begin
                a := a + S_TraceOut( IntToStr( a ) + ' Printed.' );
        end;
end

▼JavaScript
var a, i;
a = Editor.TraceOut( 'TEST of TraceOut (JavaScript)' );
for( i = 0; i < 5; i++ ){
        a += Editor.TraceOut( a + ' Printed.' );
}

-----
気付いたこと
*関数型なのでノーマルのマクロでは使えない
*PPAでは引数は文字列のみ.数値はIntToStrで変換が必要
*JavaScriptでは数値も引数に与えられる
*1行出力毎に自動的に復帰改行が入る
*返される文字数には復帰改行は含まれない


ノーマルのマクロでは固定文字列しか与えられずあんまり使用価値が無いので関数として定義することに特に問題はないでしょう.
でも,出力文字数を知りたいのはどのようなときでしょうか?

2006/4/25 (火) 01:13:11 maru  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
[4437] Re2: マクロからアウトプットウインドウへ出力
▼ げんたさん
レスありがとうございます。
> PPAとJavaScriptで試しましたが動作は問題ないようですね.
> 気付いたこと
> *関数型なのでノーマルのマクロでは使えない
> *PPAでは引数は文字列のみ.数値はIntToStrで変換が必要
> *JavaScriptでは数値も引数に与えられる
> *1行出力毎に自動的に復帰改行が入る
> *返される文字数には復帰改行は含まれない

いつもお手数おかけいたします。

> でも,出力文字数を知りたいのはどのようなときでしょうか?
えっと、CMacro::HandleFunctionのコメントに
*値を返す関数を処理する
と書いてあったので、何か値を返すべきかと思って無理やり…。
特に意味はありません。

2006/4/25 (火) 01:48:17 げんた  
INCM1.23c
[4438] Re3: マクロからアウトプットウインドウへ出力
>*値を返す関数を処理する
>と書いてあったので、何か値を返すべきかと思って無理やり…。

なら別に普通の値を返さないタイプのマクロで良かったのでは?
ノーマルのマクロでの使い道は無さそうではあるけれどもムリに排除する必要もないかと.

2006/4/26 (水) 23:50:06 maru  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
[4441] Re4: マクロからアウトプットウインドウへ出力
▼ げんたさん
> なら別に普通の値を返さないタイプのマクロで良かったのでは?
他に習い値を返さないタイプに直しました。
また改行コードを付加しないように変更しました。

共有フォルダ:/Developer/Source/MacroTraceOut2.diff

たとえば引数に空文字列を渡されたときは
クリップボードの内容(もしくは選択文字列)を出力する
ような機能をつければキーマクロからでも
使途がありそうですが、今のところは現状で満足です。

2006/4/29 (土) 02:42:13 げんた  
INCM1.23c
[4442] Re5: マクロからアウトプットウインドウへ出力
細かくてすいませんが
>他に習い値を返さないタイプに直しました。
コマンドからは使われないので,32768以上の値を割り当てたい...

>また改行コードを付加しないように変更しました。
改行があるのと無いのではどちらが便利なんでしょうか.
素のマクロでは改行を特殊文字で与えられないので改行できないと言うのもちょっと気になる.
TraceOutに出すのはデバッグ用の文字列で,そうであればその都度勝手に改行してくれた方が便利,というのは浅はかかな?
TraceOutとTraceOutlnの両方を用意する案もありますが.

>たとえば引数に空文字列を渡されたときは
>クリップボードの内容(もしくは選択文字列)を出力する

これは本当の空文字列と区別が付かなくなるのであまり良い仕様では無いと思います.

2006/4/29 (土) 17:39:23 maru  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
[4446] Re6: マクロからアウトプットウインドウへ出力
▼ げんたさん
> 細かくてすいませんが
いえいえ、アドバイスありがとうございます。

> コマンドからは使われないので,32768以上の値を
と思って32802にしましたが、もっと大きな値ですか?

> 改行があるのと無いのではどちらが便利なんでしょうか.
> 素のマクロでは改行を特殊文字で与えられないので

「素のマクロ」とは*.ppaの意味ですか?
改行を与えられないとは予定外でした。
やっぱり勝手に改行が付くようにいたします。

> >たとえば引数に空文字列を渡されたときは
上記に関連して、PPAで改行だけの行を送信するためには
空文字列を渡すしかないので、このような仕様は
不適切ですね。

2006/4/29 (土) 20:58:39 げんた  
INCM1.23c
[4448] Re7: マクロからアウトプットウインドウへ出力
>> コマンドからは使われないので,32768以上の値を
>と思って32802にしましたが、もっと大きな値ですか?

すいません.見間違えました.
他のコマンドの隙間に入っているような気がしたんですが,よく見たらコマンドの末尾でしたね.

>> 素のマクロでは改行を特殊文字で与えられないので
>「素のマクロ」とは*.ppaの意味ですか?
>改行を与えられないとは予定外でした。
>やっぱり勝手に改行が付くようにいたします。

素のマクロというのは.mac のことです.素のマクロで使い道があるとすれば外部コマンドを連続して実行した結果をアウトプットに取り込む場合で,コマンドの出力の間に何か区切りを入れたい場合ですかね.
エディタに文字を入力する場合は1文字ずつ文字コードで与える方法が用意されているので改行も入れられますが,今回は文字列しか与えられないのでできません.

ppaでは一応与えることは出来ますが,文字列中で\r\nといった書き方が出来ず,
文字列連結として+ #13 + #10 と毎回書かなくてはならなくてちょっと煩雑かなと.
(変数に入れればもう少し短くはなりますが.)

2006/5/2 (火) 12:08:52 maru  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
[4455] Re8: マクロからアウトプットウインドウへ出力
いろいろ考えた末、以下の仕様で作ってみました。

void TraceOut( S1, i1 );

S1:出力テキスト
i1:次の数値の和。
  0x01  ExpandParameterによる文字列展開を行う
  0x02  テキスト末尾に改行コードを付加しない

共有:/Developer/Source/MacroTraceOut3.diff

2006/7/1 (土) 20:36:44 げんた  
INCM1.23c
[4499] Re9: マクロからアウトプットウインドウへ出力
遅くなりましたが,sakura/trunk#982でCommitしました.
Patches #1478468

INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]