テンプレートですがNo.16791
o_hiro さん 04/02/27 15:03
 
よろしくお願いします。

新規作成テンプレートを作っています。
挿入したマクロは「〜です」という単文です。

$(SetHeader,"To","宛先 様 <atesaki@com>")$-
$(ExecMacro,"mac_name.mac")

同じ形式で作った別のテンプレートだと、
マクロの部分は本文に表示されるのに、
今回のものだけは「Subject」に展開してしまうのですが、
何かミスっていますでしょうか?

[ ]
RE:16791 テンプレートですがNo.16792
秀まるお2 さん 04/02/27 16:07
 
 マクロを起動した時点でのカーソル位置は、状況により変化します。なので、
マクロ側でカーソル位置を正しくSubject:欄に移動してから文字列挿入させてや
るか、または、マクロ内から

   #n = dllfunc("SetHeader", "Subject", "XXXXX");

 のような感じでたしかにSubject:ヘッダを書き換えるように処理するのがいい
と思います。

[ ]
RE:16792 テンプレートですがNo.16797
かわした さん 04/02/27 19:12
 
かわした%ユーザです。

o_hiroさんは本文部に「〜です」を挿入したいのにSubjectに挿入されて
困っている、ということではないでしょうか。

例えば本文の先頭に挿入したいなら、

moveto 0,0;

のような指定がマクロの挿入分の前に必要かと思います。

[ ]
RE:16797 テンプレートですがNo.16799
o_hiro さん 04/02/27 19:55
 
秀まるお2さん、かわしたさん、ありがとうございます。

理解できなかったので、mac_name.macの一行目に
   #n = dllfunc("SetHeader", "Subject", "XXXXX");
を書き込み、テンプレートを指定してエディタを起動したら
以下のメッセージが出てしまいました。

DLLがロードされてないのにdllfunc関数が使われました

今度は、テンプレート側一行目に書き込んだら、本文に
   #n = dllfunc("SetHeader", "Subject", "XXXXX");
が表示。
Subjectには、今まで通り、マクロで書き込むはずの一文が出てしまいました。

この旨書き込もうとフォーラムに入ったら、かわしたさんのコメントを拝見したので
さっそくやってみました。

$(SetHeader,"To","宛先 様 <atesaki@com>")$-
moveto 0,0;
$(ExecMacro,"mac_name.mac")

としてみたのですが、本文に「moveto 0,0;」が表示されてしまいました。

[ ]
RE:16799 テンプレートですがNo.16800
かわした さん 04/02/27 20:08
 
かわしたです。

moveto 0,0;

はマクロ(mac_name.mac)に書く必要があります。

念のため補足しますが、単に本文先頭に「hogehogeです」と書きたいだ
けでしたらわざわざマクロを使わずとも、テンプレートに直接

$(SetHeader,"To","宛先 様 <atesaki@com>")$-
hogehogeです

と書けば済みます。

[ ]
RE:16800 テンプレートですがNo.16801
かわした さん 04/02/27 20:22
 
かわしたです。

>はマクロ(mac_name.mac)に書く必要があります。

ちょっと不親切だったので詳しく書きますね。mac_name.mac の内容が

--
insert "hogehogeです";
--

の場合はテンプレートで

$(SetHeader,"To","宛先 様 <atesaki@com>")$-
$(ExecMacro,"mac_name.mac")

としているとSubjectに「hogehogeです」が挿入されるケースがあります
が、mac_name.mac の内容を

--
moveto 0,0;
insert "hogehogeです";
--

とすると本文先頭に「hogehogeです」が間違いなく挿入されます。


o_hiroさんがお使いの mac_name.mac の内容を見れば、おそらく上記の
ような insert 文があるはずですので、その直前に moveto 0,0; を挿入
すればお望みの動作となると思います。

[ ]
RE:16801 テンプレートですがNo.16804
o_hiro さん 04/02/27 21:32
 
かわしたさん、ありがとうございます。

>>はマクロ(mac_name.mac)に書く必要があります。

マクロの一行目に「moveto 0,0;」を追加しましたら
本文一行目にマクロが展開してくれました。
(表示させるのは一行の文なのですが、構成はそうではなかったので
マクロで対処したかったのです)

テンプレートには同じ形式でマクロを組み込んであっても
そのマクロの性質によっては本文に展開してくれたり
思わぬ所に入ったりするのですね。

勉強になりました。
ありがとうございました。

[ ]
RE:16799 テンプレートですがNo.16805
秀まるお2 さん 04/02/27 22:02
 
 一点にだけコメントさせていただきます。

>    #n = dllfunc("SetHeader", "Subject", "XXXXX");
> を書き込み、テンプレートを指定してエディタを起動したら
> 以下のメッセージが出てしまいました。

 dllfunc関数を使う前に、

    loaddll "tkinfo.dll";

 の1行が必要です。

[ ]
RE:16804 テンプレートですがNo.16809
アルビレオ さん 04/02/28 01:18
 
鶴亀ユーザーのアルビレオです。

>テンプレートには同じ形式でマクロを組み込んであっても
>そのマクロの性質によっては本文に展開してくれたり
>思わぬ所に入ったりするのですね。

間違っているわけではありませんが、より正確には
・テンプレートからマクロを呼び出すときはカーソル位置に注意する必要がある。
ということです。
今回の場合は「moveto 0,0;」を追加することで、カーソル位置を気にしなくて
もいいようにマクロを改造したといえます。

マクロ側でわざとカーソル位置を指定しないことで、同じマクロでもテンプレー
トから呼び出す位置によって柔軟な使い方ができる場合もあるので、うまく使い
分けるといいでしょう。

[ ]
RE:16805 テンプレートですがNo.16814
o_hiro さん 04/02/28 13:51
 
秀まるお2さん、アルビレオさん、ありがとうございます。

>>    #n = dllfunc("SetHeader", "Subject", "XXXXX");
>> を書き込み、テンプレートを指定してエディタを起動したら
>> 以下のメッセージが出てしまいました。

> dllfunc関数を使う前に、
>    loaddll "tkinfo.dll";
> の1行が必要です。

一応「moveto 0,0;」にて解決はしているのですが
早速やってみました。

マクロの1行目に「loaddll "tkinfo.dll";」
二行目に「#n = dllfunc("SetHeader", "Subject", "XXXXX");」
を入れて実行したのですが、結果的には前回同様“Subject”に
一文が表示されてしまいました。

[ ]
RE:16814 テンプレートですがNo.16817
アルビレオ さん 04/02/29 14:48
 
アルビレオです。

>マクロの1行目に「loaddll "tkinfo.dll";」
>二行目に「#n = dllfunc("SetHeader", "Subject", "XXXXX");」
>を入れて実行したのですが、結果的には前回同様“Subject”に
>一文が表示されてしまいました。

すみません、ウソを書いてしまいました。
私自身も今まで勘違いしていたことがわかりました。

まず、$(ExecMacro,"...")はテンプレート中のどこに書いても結果は同じです。

ひとまずマクロの事は置いておいて、テンプレートを使ったときのカーソル位置

・To:が空ならTo:の位置
・To:が空でなくてSubject:が空ならSubject:の位置
・To:とSubject:が空でなければ$cの位置($cがなければ本文の先頭)
となっています。

そして$(ExecMacro,"...")はテンプレートの展開が終わり、カーソル位置が確定
してから呼び出されるようです。
つまりマクロ中で「dllfunc("SetHeader", "Subject", "XXXXX");」としても、
すでにカーソル位置が確定したあとなのでカーソル位置は変わらないようです。

というわけで、カーソル位置を本文の先頭にしたいだけなら「moveto 0,0;」を
使った方が簡単ですが、「To:やSubject:はマクロ側でセットしたい、マクロで
本文に挿入する文字列の位置はテンプレートの$cで指定した場所にしたい」とい
う場合は、

----テンプレート
$(SetHeader, To, "ダミー")$-
$(SetHeader, Subject, "ダミー")$-
こんにちは。
$c
$(ExecMacro, "test.mac")$-
----テンプレート終わり

----マクロ(test.mac)
loaddll "tkinfo.dll";
#n = dllfunc("SetHeader", "Subject", "XXXXX");
insert "abc";
----マクロ終わり

と書けばうまくいきました。

[ ]
RE:16817 テンプレートですがNo.16818
かわした さん 04/02/29 18:00
 
かわしたです。

>>マクロの1行目に「loaddll "tkinfo.dll";」
>>二行目に「#n = dllfunc("SetHeader", "Subject", "XXXXX");」
>>を入れて実行したのですが、結果的には前回同様“Subject”に
>>一文が表示されてしまいました。

秀まるおさんの示した方法はo_hiroさんのやりたかったことではなくて
「SubjectにXXXXXをセットする方法」なのでその結果で正常です。
o_hiroさんが「エラーが出た」と書かれたので「こうすればエラーが出
ませんよ」との意味で書き込まれたんだと思います。


蛇足ですが、もしテンプレートの $c の位置に「hogehogeです」と挿入
したい場合でも、アルビレオさんのようにややこしいことをする必要は
なくて

--
while (y<0) tab;
insert "hogehogeです";
--

とすればいいです。

[ ]
RE:16818 テンプレートですがNo.16819
アルビレオ さん 04/02/29 18:10
 
アルビレオです。

>蛇足ですが、もしテンプレートの $c の位置に「hogehogeです」と挿入
>したい場合でも、アルビレオさんのようにややこしいことをする必要は
>なくて
>
>--
>while (y<0) tab;
>insert "hogehogeです";
>--
>
>とすればいいです。

まさかtabコマンドがそのままカーソル移動(の意味を持つTABキー入力)として
使えるとは思ってませんでした(^^;

[ ]
RE:16818 テンプレートですがNo.16836
o_hiro さん 04/03/01 11:31
 
アルビレオさん、かわしたさん、ありがとうございます。

> ひとまずマクロの事は置いておいて、テンプレートを使ったときのカーソル位置
> は
> ・To:が空ならTo:の位置
> ・To:が空でなくてSubject:が空ならSubject:の位置
> ・To:とSubject:が空でなければ$cの位置($cがなければ本文の先頭)
> となっています。

これは勉強になりました。こういう法則があるのですね。

> 「To:やSubject:はマクロ側でセットしたい、マクロで
> 本文に挿入する文字列の位置はテンプレートの$cで指定した場所にしたい」とい
> う場合は、

「To」「Subject」はテンプレート側でセットできればいいので、
こちらは問題ありません。しかし、こういう事もできるのですね。
このケースのテンプレートとマクロを実際に試してみましたが
思うように出来ました。

今回は[16470]から始まる「カウントダウンさすマクロ」を読んで興味を持ち、
“子供たちの誕生日から現在まで何日”と言うのを本文に入れてみたかったのです。
よってマクロは、でるもんたさんの作られたものを編集して使わせて頂いております。
 # でるもんたさん、感謝しております。

[ ]