検索フォルダ、3枠区切り、保存後SetMailFNo.02062
プックン さん 09/07/04 11:12
 
秀まるおさん、こんにちは。
検索フォルダ、3枠区切りでマクロで編集、保存後にSetMailFlag"altered"を実行すると
下記メッセージが表示されます。
2枠区切りや、通常フォルダだとこの事象は発生しません。
回答よろしくお願いいたします。

メッセージ
まだ保存されていないメール上でSetMailFlag/SetMailColor/GetMailColor/SetMailT
ransmitDate/GetMailSize関数は使えません。

私の作ったマクロで、3枠区切り、検索フォルダを使用していると
上記メッセージがでていて、なんでだろうと思っていたのですが、
マクロをどんどん短くして下記マクロででるのが確認できました。
Ver5.19のベータ版で事象がずーっとでていたのですが、なかなか
マクロのどの部分ででているのかわからなかったので、報告が遅くなりました。
正式版がでちゃいましたが、よろしくお願いします。

環境:
OS:Windows XP Home
秀丸メール Ver5.19正式版

//debug.mac
 loaddll "TKInfo.dll";

if(dllfunc("ExecAtMain","MailIndex") != -1){
 //現在のメールの改変情報を取得
 ##altered = dllfunc("ExecAtMain","GetMailFlag", "altered");

 //秀丸メール本体上で、マクロによるメールの書き換えを許可
 ##n=dllfunc("ExecAtMain","BeginEditMail");
 $$wk = dllfuncstr("CurrentDate") ;
 //Headerの削除
 ##n = dllfunc("ExecAtMain", "DeleteHeader", "Schedule" );
 //Headerの削除
 $$s = dllfuncstr("ExecAtMain","SetHeader", "Date",$$wk);
 
 //メールの保存
 ##n=dllfunc("ExecAtMain", "SaveEditMail",0,0);
 $$sub =
  dllfuncstr("ExecAtMain","CurrentHeader", "Subject") ;
 if(##n ==0){
  message
  $$sub +
  "\nメール保存失敗" ;
 }

 //現在のメールの改変情報を取得
 ##n = dllfunc("ExecAtMain","GetMailFlag", "altered");
 message
  "altered flag before=" + str(##altered) + "\n" +
  "altered flag after =" + str(##n) + "\n" ;

 if(##altered == 0){
  message "SetMailFlag Pre" ;
  ##n = dllfunc("ExecAtMain","SetMailFlag","altered", 0);
  message "SetMailFlag Post" ;
 }

 //メッセージ表示用処理
 openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
 $$pane = str(getregnum( "pane" ));
 closereg ; //レジストリを閉じます

 ##n = dllfunc("ExecAtMain","GetFolderPropFlags");
 //検索フォルダの場合
 if((##n & 0x10) == 0x10){
  $$grepfolder = "フォルダ=検索フォルダ\n" ;
 }
 else{
  $$grepfolder = "フォルダ=通常フォルダ\n" ;
 }
 $$m =
  $$pane + "枠区切り\n" +
  "題名" + $$sub + "\n" +
  dllfuncstr("ExecAtMain","CurrentFolder" ) +
  $$grepfolder;
 message $$m ;
}
else message "メール選択してください" ;
 freedll;
 endmacro;

//debug.macおわり

[ ]
RE:02062 検索フォルダ、3枠区切り、保存No.02070
秀まるお さん 09/07/06 14:11
 
 こちらでテストしてみたんですが、うまく再現出来ませんでした。

 3枠区切りで、適当な検索フォルダ上で適当なメールを選択して、連絡いただ
いたマクロを実行すると、まずメール一覧のDate:の欄が今現在の時刻に書き換
わり、その後

 altered flag before=0
 altered flag after =0

 というメッセ−ジが出て、次に

 SetMailFlag Pre

 が出て、次には

 SetMailFlag Post

 が出てきて、次は

 3枠区切り
 題名................(2009/07/04)
 受信\..............=検索フォルダ

 のように出てきて、それでマクロが正常終了します。

 「まだ保存されてないメール上でSetMailFlag/SetMailColor/GetMailColor/
SetMailTransmitDate/GetMailSize関数は使えません。」

 のエラーメッセージが出るということは、3枠区切りじゃなくて2枠区切りで
はないかという気がしますけども、2枠区切りでテストしても再現しませんでし
た。

 ということですみませんがちょっと分からないです。

 何か再現用のマクロ内容が違うのではないかという気がします。

[ ]
RE:02070 検索フォルダ、3枠区切り、保存No.02083
プックン さん 09/07/07 01:59
 
> こちらでテストしてみたんですが、うまく再現出来ませんでした。

今日自宅のPCでマクロを実行してみました。
なぜか先日でていたのに、エラーが発生せずに秀まるおさまが書き込んで
いただいたメッセージの表示をしただけでした。

発生していたのは3枠区切りです。

> のエラーメッセージが出るということは、3枠区切りじゃなくて2枠区切りで
>はないかという気がしますけども、2枠区切りでテストしても再現しませんでし
>た。
>
> ということですみませんがちょっと分からないです。
>
> 何か再現用のマクロ内容が違うのではないかという気がします。

再現テストとして、
会社でのPCでもなっていたので一度確認してみます。

[ ]
RE:02083 検索フォルダ、3枠区切り、保存No.02089
プックン さん 09/07/08 00:17
 

>再現テストとして、
>会社でのPCでもなっていたので一度確認してみます。

自宅で"debug.mac"を作成して試したときは、再現率100%だったのですがどうも再現
しなくなってしまいました。
会社では、再現したりしなくなったりといった状態です。
事象がでた会社の環境で
設定(O) - 設定内容の保存/復元(U)
で保存したレジストリ情報を送付すれば参考になるなら送付させていただきますが、
いかがいたしましょう?。

[ ]
RE:02089 検索フォルダ、3枠区切り、保存No.02096
秀まるお さん 09/07/08 12:00
 
 再現テストをするためには、設定のレジストリが一致してればいいかというと
それだけではダメで、具体的にエラーが起きる検索フォルダの条件とか、具体的
に起きるメールそのものも一致してないとダメなんじゃないかと思います。

 発生する時としない時の違いが何か分かるともっと助かりますけども…。

 とりあえず、再現するかどうか分からないのにテストするのは大変なので、
dump.txtに詳しい状況を出力するようにして、そでプックンさんの所で再現して
もらって、そのときのdump.txtを送っていただく、という作戦がいいんですけど、
それでどうでしょ?

[ ]
RE:02096 検索フォルダ、3枠区切り、保存No.02100
秀まるお さん 09/07/08 15:17
 
 とりあえずdump.txt出力をいろいろ付けてβ版をアップロードしてしまいまし
た。

http://hide.maruo.co.jp/software/bin2/hmmail520b1_signed.exe

 dump.txtには、

 this is pHidemaruView
 SetText at pHidemaruView
 SetNull at pHidemaruView
 szFileName cleared at XXXXXX

 のような記録が出てくれるはずだと思います。それで原因が分かるかなぁと思
います。

 ということでお願いします。「全般的な設定・上級者向け・動作の記録」の中
にある「秀丸メールの動作をdump.txtに記録する」をONにして再現していただき
まして、その後、秀丸メールのデータ用フォルダにあるdump.txtを秀丸エディタ
などで開いて、そこから上記のような文字列を探すか、またはエラーの発生した
時刻から該当部分を抽出していただきましてその辺の記録(100行くらいあれ
ばたぶん大丈夫)を僕にメールで送って欲しいです。

 メールで送っていただくとしたら、送り先は、"maruo@mitene.or.jp"です。

[ ]
RE:02100 検索フォルダ、3枠区切り、保存No.02105
プックン さん 09/07/09 00:00
 
> とりあえずdump.txt出力をいろいろ付けてβ版をアップロードしてしまいまし
>た。

dump.txt出力版の作成ありがとうございます。
早速再現しましたので、メールにて送付させていただきました。
調査よろしくお願いいたします。

[ ]
RE:02105 検索フォルダ、3枠区切り、保存No.02106
秀まるお さん 09/07/09 09:40
 
 dump.txtを見たら原因が分かりました。結論としては、仕様ということになり
ます。

 まず、問題が起きる条件ですが、検索フォルダがリアルタイム更新ありになっ
てないとダメです。それで、メールを改変保存したことによって、そのメールが
検索フォルダの対象外のメールとなる、というのが再現の条件です。

 例えばメモ付きのメールを集める用に、「flag=memo, subfolder=1」という条
件で検索フォルダを作成して、リアルタイム検索ONにしたとします。

 そこのフォルダ上で、例えば

    loaddll "TKInfo.dll";
    #n = dllfunc("BeginEditMail");
    #n = dllfunc("DeleteHeader", "X-Memo:");
    #n = dllfunc("SaveEditMail", 0, 0);
    message str(dllfunc("MailIndex"));

 のようなマクロを実行すると、「-1」が表示されてメール内容枠の表示も空っ
ぽになることが分かります。

 そういう状態でSetMailFlag等を呼び出すとエラーになります。

 解決策としては…。SaveEditMail関数呼び出しした後にはそのメールは検索フ
ォルダから消えることもありえるという前提でマクロを作るか、または
StopGrepFolderRealtime関数をあらかじめ呼び出してリアルタイム更新をOFFに
するしか無いと思います。

 メールが検索フォルダから消えたかどうかは、"MailIndex"関数の返り値を確
認することで判定出来ます。

[ ]
RE:02106 検索フォルダ、3枠区切り、保存No.02120
プックン さん 09/07/11 01:02
 
回答ありがとうございます。
原因が判明してすっきりしました。

> dump.txtを見たら原因が分かりました。結論としては、仕様ということになり
>ます。


> 解決策としては…。SaveEditMail関数呼び出しした後にはそのメールは検索フ
>ォルダから消えることもありえるという前提でマクロを作るか、または
>StopGrepFolderRealtime関数をあらかじめ呼び出してリアルタイム更新をOFFに
>するしか無いと思います。

わたしのマクロの作りこみが不十分だったってことですね。
メッセージが事象と一致しない内容だったのでわかりにくかったですが、対処方法が
わかってたすかりました。
回答ありがとうございました。


[ ]