DisableDraw() 関数の「メール一覧」の「No.00279
Iranoan さん 07/01/30 23:43
 
 秀丸担当さん今日は、Iranoan です。
 DisableDraw() を使ったマクロで、「メール一覧」の「範囲」を変わってし
まうと、マクロ中で変更しても、表情は元に戻らない場合があります。フォル
ダを入れ替えると、正しい「範囲」が表示されます。
 こちらの環境は、WindowsXP+IE6.0+秀丸 Ver.6.50β16 です。
 組み合わせが特定できないので、使ったマクロをそのまま掲載します。最後
のアカウントの「ゴミ箱」新しいメールをおいておいてください。最後のアカ
ウントの「ゴミ箱」の範囲が「全体」になります。
//Google Desktop に ? 時間前、もしくは現在の送受信したメールをアイテム化する
loaddll "tkinfo.dll";
$time = input( "何時間前からのメールをアイテム化しますか?\n"
  +"[キャンセル] で現在のメールをアイテム化できます。" );
$s1 = "";
$f1 = "";
#tmp = dllfunc( "DisableDraw", 1 );
if( result ){
  $find = dllfuncstr( "GetFindPack" );
  #tmp = dllfunc( "SelectFolder", dllfuncstr( "Account", 0 ), "" );
  #tmp = dllfunc( "SetFindPack", "flag=transmit=" + $time +
    "時間前-指定なし, inmail=3" );
  //#tmp = dllfunc( "DoGrep", "", "受信+送信済み+ユーザー" );
  while( 1 ){
    if( !dllfunc( "FindDown" ) )break;
    $f0 = dllfuncstr( "CurrentFolder" );
    if( $f0 == "ゴミ箱"//ゴミ箱除外
      || leftstr( $f0, 4 ) == "草稿"//草稿除外
      || leftstr( $f0, 6 ) == "未送信"//未送信除外
    ){
      #tmp = dllfunc( "SelectPane", 1 );
      #tmp = dllfunc( "SimulateKeyStroke", 35, 0, 0 );
      #tmp = dllfunc( "SetViewArea", 1 );
    }
    else{
      if( $f0 != $f1 ){
        #tmp = dllfunc( "SetViewArea", 1 );
        $f1 = $f0;
      }
      call Index;
    }
  }
  #tmp = dllfunc( "SetFindPack", $find );
}
else{
  question "現在のメールをアイテム化しますか?";
  if( result ){
    call Index;
  }
}
#tmp = dllfunc( "EnableDraw" );
freedll;
endmacro;

Index://現在のメールをアイテム化する
  $s0 = dllfuncstr("MailFilePath");
  if( $s0 != $s1 ){
    loaddll "TuruKameGDS.dll";
    ##inst = dllfunc("CreateIndexingInstance");
    ##tmp = dllfunc("DoIndexingByFile", ##inst, $s0);
    ##tmp = dllfunc("DestroyIndexingInstance", ##inst);
    $s1 = $s0;
    loaddll "tkinfo.dll";
  }
  return;

[ ]
RE:00279 DisableDraw() 関数の「メール一No.00315
秀まるお さん 07/01/31 17:06
 
 なぜこの話がここの会議室に書き込まれていて、しかも「秀丸担当さん」とま
で指定されてるのかよく分かりませんが…。

 こちらで簡単なテストをした限りではよく分かりません。でもって、こちらの
環境といってもgoogleデスクトップ検索は入ってないので、とりあえず

    loaddll "tkinfo.dll";
    #n = dllfunc("DisableDraw", 1);
    #n = dllfunc("FindDown");
    #n = dllfunc("SetViewArea", 1);
    #n = dllfunc("EnableDraw");

 ってマクロを作って試しただけですけど。(FindDownでフォルダが切り替わる
ようにだけしてテストした)

 すみませんが、その、マクロが終了した時点で何か他のウィンドウを秀丸メー
ルの上に置いてみて、それで「範囲(V)」の所を一度隠してまた表に出すって操
作をしてみてほしいです。そうすると「範囲(V)」の所が再描画されます。

 それでもし正しい表示がなされるなら、つまりEnableDrawした時にそこがうま
く再描画されてないだけって問題なので、強制再描画するように直したいと思い
ます。

 もしそれで正しい表示にならないとしたら、それはそれでもっと詳しく調べて
みたいと思います。

[ ]