マクロにVBのReplace関数のようなものが欲No.07550
山田健一 さん 03/12/28 10:41
 
 みなさん、こんにちは。

 $(AdrBook,"グループ名")$-
で新規メッセージ作成時にグループを指定してアドレス帳が開けるのはうれしい
ですが、これを共通に設定したいと考えています。
 たとえば、振り分けフォルダとアドレス帳グループを同じ名前にしておいて
User\友人\ネット関連 フォルダに関連するアドレスはアドレス帳の
友人/ネット関連 グループに記述するようにします。

 フォルダの名前は$(CurrentFolder)で得られるので
$(AdrBook,$ReplaceStr($ReplaceStr($(CurrentFolder),"User\",""),"\","/"))
$-
等とすると、共通化できます。
ReplaceStr(置換対象文字列,検索文字列,置換文字列)
みたいな関数があると実現できるのですが、いかが思われますか?

 他の場面でも応用できそうな気がします。

 マクロヘルプの中を見た限りでは見つかりませんでした。既に存在していたら、
ご容赦ください。

山田健一 http://homepage3.nifty.com/yamada_ken1/

[ ]
RE:07550 マクロにVBのReplace関数のようNo.07551
山田健一 さん 03/12/28 10:56
 
>$(AdrBook,$ReplaceStr($ReplaceStr($(CurrentFolder),"User\",""),"\","/"))
>$-

 文法が違いますね。
$(AdrBook,$(ReplaceStr,($(ReplaceStr,($(CurrentFolder),"User\",""),"\","
/"))))$-
ですね。恥ずかしい。

山田健一 http://homepage3.nifty.com/yamada_ken1/

[ ]
RE:07550 マクロにVBのReplace関数のようNo.07552
Iranoan さん 03/12/28 20:03
 
 山田健一さん今日は、Iranoan です。
>  $(AdrBook,"グループ名")$-
> で新規メッセージ作成時にグループを指定してアドレス帳が開けるのはうれしい
> ですが、これを共通に設定したいと考えています。
 こういうことは、現状ではマクロを書けばよいです。末尾のマクロを「送信
用エディタ起動時」に指定してください。
 あと ReplaceStr の様な関数を用意することは反対ではありません。しかし、
何時も検索でヒットする文字列全てを置換したいとは限らないでしょうから、
-1 なら全てでそれ以外ならその個数だけ置換、といった引数の指定が必要に
なると思います。
//--------------------------------------------------------------------
loaddll "tkinfo.dll";
$$return = dllfuncstr( "CurrentFolder" );
if( leftstr( $$return, 5 ) == "User\\" )
  $$return = rightstr( $$return, strlen( $$return ) - 5 );
call ReplaceStr $$return, "\\", "/";
#tmp = dllfunc( "AdrBook", $$return );
freedll;
endmacro;

ReplaceStr://buffer 中の文字列を置換
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:07552 マクロにVBのReplace関数のようNo.07553
山田健一 さん 03/12/28 22:07
 
  Iranoan さん、こんにちは。

 教えていただいたマクロを試してみましたが、新規メッセージはどのフォルダ
から起動しても 未送信 フォルダとなってしまうようで失敗しました。
 現在のフォルダではなく、起動したフォルダが取得できないと私の望みは満た
されないようです。
 とはいえ、マクロ作成のテクニックを教えていただき、ありがとうございまし
た。

山田健一 http://homepage3.nifty.com/yamada_ken1/

[ ]
RE:07552 マクロにVBのReplace関数のようNo.07554
秀まるお さん 03/12/28 22:11
 
 一応サイトー企画からもコメントさせていただきますが、VisualBasicにある
ような文字列関係の関数を追加して欲しいということは、それはそれで対応でき
ないことも無いと思います。

 ただ、現状のtkinfo.dllは、もともと鶴亀メールをコントロールする用でして、
しいて追加するなら、秀丸/鶴亀共用の、汎用の文字列操作DLLを用意した方が
いいんじゃないかと思います。

 しいてやるなら、VisualBasic互換DLLとか、そういう形になるのかもしれませ
ん。どっちにしても、Replaceだけ対応すればそれで話が終わる訳でもなく、も
っとスケールの大きな話になりまして、それはそれで今すぐ対応するのは無理そ
うです。

 とりあえず、Iranoanさんのようなマクロによる方法で対応してほしいです。

[ ]
RE:07553 マクロにVBのReplace関数のようNo.07555
秀まるお さん 03/12/28 22:52
 
>  現在のフォルダではなく、起動したフォルダが取得できないと私の望みは満た
> されないようです。

 新規メールが起動された時点での選択されたフォルダは、

    $s = dllfuncstr("ExecAtMain", "CurrentFolder");

 にて一応取得できます。

[ ]
RE:07553 マクロにVBのReplace関数のようNo.07556
Iranoan さん 03/12/28 23:20
 
 山田健一さん今日は、Iranoan です。
>  教えていただいたマクロを試してみましたが、新規メッセージはどのフォルダ
> から起動しても 未送信 フォルダとなってしまうようで失敗しました。
 すいません、この点をすっかり忘れていました。
 また返信までアドレス帳が表示されるのは、鬱陶しいので、この点も含め修
正したマクロを末尾に付けておきます。
//--------------------------------------------------------------------
loaddll "tkinfo.dll";
if( dllfunc( "MailType" ) )goto End;
$$return = dllfuncstr( "ExecAtMain", "CurrentFolder" );
if( leftstr( $$return, 5 ) == "User\\" )
  $$return = rightstr( $$return, strlen( $$return ) - 5 );
call ReplaceStrChangeCharacter $$return, "\\", "/";
#tmp = dllfunc( "AdrBook", $$return );

End:
  freedll;
  endmacro;

ReplaceStrChangeCharacter://buffer 中の文字列を置換
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:07554 マクロにVBのReplace関数のようNo.07559
山田健一 さん 03/12/29 17:38
 
  秀まるお さん、Iranoan さん、こんにちは。

 まとめレスにて失礼します。

> しいてやるなら、VisualBasic互換DLLとか、そういう形になるのかもしれませ
>ん。どっちにしても、Replaceだけ対応すればそれで話が終わる訳でもなく、も
>っとスケールの大きな話になりまして、それはそれで今すぐ対応するのは無理そ
>うです。
>
> とりあえず、Iranoanさんのようなマクロによる方法で対応してほしいです。

 Iranoan さんのマクロで充分に実用になりますので、この方向で構いません。
 Iranoan さん、ありがとうございました。私としては、この方法を取りたいフ
ォルダとそうでないフォルダがありますので、フォルダプロパティの新規メール
用テンプレートに
$(ExecMacro,"OpenAdr4Folder.mac")$-
を記述することで対応しました。

山田健一 http://homepage3.nifty.com/yamada_ken1/

[ ]