<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/">
    <title>HOMING★WONDER</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/</link>
    <description>HOMING★WONDER</description>

    <dc:language>ja</dc:language>
    <dc:date>2011-10-05T15:14:27+09:00</dc:date>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/2.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/13.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/25.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/23.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/18.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/37.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/38.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/36.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/26.html" />
                <rdf:li rdf:resource="http://www31.atwiki.jp/kouraku_tiritomado/pages/20.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/2.html">
    <title>メニュー</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/2.html</link>
    <description>
      #center(){&amp;color(#666666){&amp;sizex(-3){&amp;br()ほーみんぐ★わんだー}}

***&amp;b(){－ CONTENTS －}
}

-[[TOP&gt;HOMING★WONDER]]

----
&#039;&#039;TIPS＆自製ツール&#039;&#039;
-[[秀丸マクロ&gt;秀丸マクロ・サンプル置場]]&amp;openclose2(show=▼){&amp;sizex(-3){&amp;br()・[[ディレクトリ作成 - バッチ処理&gt;秀丸マクロ ディレクトリ生成 － run で引数つきバッチ処理]]&amp;br()・[[外部プログラムから戻り値取得 - 秀丸パイプ&gt;秀丸マクロ 外部プログラムから戻り値を得る方法 － 秀丸パイプの使い方]]&amp;br()・[[ファイル／フォルダが存在するか確認&gt;秀丸マクロ ファイル／フォルダが存在するか確認する]]&amp;br()・[[ファイルを開くダイアログ&gt;秀丸マクロ ファイルを開くダイアログを実行する]]&amp;br()・[[インデントhome - カーソル移動サンプル&gt;秀丸マクロ インデントhome － カーソル移動サンプル]]}}
-[[SuperTopMost&gt;SuperTopMost]]
----
&#039;&#039;その他&#039;&#039;
-[[ParaFla! ノート]]
-[[ジムニー格納庫]]
----

&amp;color(red){Wiki整理のお知らせ}
&amp;sizex(-2){はてなブログを立てました。一部のコンテンツを引越すかもしれません。}

#divstyle(border-width:0; margin:0; padding:0; width=100%; background-color:transparent;){{
#html2(){&lt;a href=&quot;http://d.hatena.ne.jp/tiri_tomato/&quot; target=&quot;_blank&quot; style=&quot;padding:2px 4px 2px 2px; text-decoration:none; color:white; background-color:#2d2d2d;&quot;&gt;■ Go Blog ! &lt;&lt;&lt;/a&gt;}
}}
#divstyle(border-width:0; padding:2px 0 2px 0; border-color:white; border-width:4px 0 0 0; border-style:solid; outline-width:0; margin:0; width=100%; background-color:#2d2d2d; text-align:center;){
#javascript(){{{
&lt;script type=&quot;text/javascript&quot;&gt;
  var _gaq = _gaq || [];
  _gaq.push([&#039;_setAccount&#039;, &#039;UA-26129181-2&#039;]);
  _gaq.push([&#039;_trackPageview&#039;]);
  (function() {
    var ga = document.createElement(&#039;script&#039;); ga.type = &#039;text/javascript&#039;; ga.async = true;
    ga.src = (&#039;https:&#039; == document.location.protocol ? &#039;https://ssl&#039; : &#039;http://www&#039;) + &#039;.google-analytics.com/ga.js&#039;;
    var s = document.getElementsByTagName(&#039;script&#039;)[0]; s.parentNode.insertBefore(ga, s);
  })();
&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;http://counter1.fc2.com/counter.php?id=310553&quot;&gt;&lt;/script&gt;
}}}
#html2(){&lt;noscript&gt;&lt;img src=&quot;http://counter1.fc2.com/counter_img.php?id=310553&quot;/&gt;&lt;/noscript&gt;}
}
//---
//**リンク
//-[[@wiki&gt;&gt;http://atwiki.jp]]
//-[[@wikiご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]
//**他のサービス
//-[[無料ホームページ作成&gt;&gt;http://atpages.jp]]
//-[[無料ブログ作成&gt;&gt;http://atword.jp]]
//-[[2ch型掲示板レンタル&gt;&gt;http://atchs.jp]]
//-[[無料掲示板レンタル&gt;&gt;http://atbbs.jp]]
//-[[お絵かきレンタル&gt;&gt;http://atpaint.jp/]]
//-[[無料ソーシャルプロフ&gt;&gt;http://sns.atfb.jp/]]
// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります
//**更新履歴
//#recent(20)
//&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2011-10-05T15:14:27+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/13.html">
    <title>HOMING★WONDER</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/13.html</link>
    <description>
      ”ほーみんぐ★わんだー”

管理人「チリトマト」による、ごく個人的なサイトです。

----
2011.10.01 &amp;color(red){Wiki整理のお知らせ}
はてなブログを立てました。一部のコンテンツを移植するかもしれません。
意外とお客さんがいなくもないようなので、こちらにもブログと連動する共通カウンターを設置。


----    </description>
    <dc:date>2011-10-01T08:13:46+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/25.html">
    <title>SWF4 rotation の不思議仕様・精度落ち対策</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/25.html</link>
    <description>
      携帯待ち受けなどに使われるSWF4環境の rotation まわりには、わりと残念な仕様が多いようで、私が確認した現象とその対策をメモしておきます。

-【現象1】アナログ時計の針を回転させたら、どんどん縮んでいく。
-【現象2】細かな位置・角度変更を続けると動きがガタつく、位置がズレる、縮んで消えるなどする。

結局は「スプライトは座標の記録や計算の精度が低く、誤差が累積しやすいので出来るだけ慎重に動かす」という事なのですが…。


***【現象1】アナログ時計の針を回転させたら、どんどん縮んでいく
#divclass(marginleft16){

発生環境：Flash4
----
ありそうな話ですが、これは以下にオフィシャルなアナウンスがありました。
[[Adobe Macromedia - Director TechNote // FlashのムービークリップをsetFlashPropertyで回転させたら縮小してしまう&gt;&gt;http://www.adobe.com/jp/support/director/ts/documents/dr0221.html]]
どうも仕様のようです。説明によると、要点としては
-小数点で角度を設定すると縮小が起こる
-整数で角度を設定しても、実際の座標計算では小数点レベルの誤差を生じる（ただし、45度の倍数だけは正確）
だそうです。

【対策】
アナウンス通りに、こうしましょう。
-原則として、角度は整数値で設定
-角度を変更したら、scaleX, scaleY を 100 に設定
アナウンスにも記述されていますが、rotation に設定した値が、正確に反映される保証がありません。不具合あるような時は rotation の値を読み込んで処理を分岐するようなことはせず、自前で設定を変数に保存しておき、設定したつもりの値を基準にしてコードを書くべきです。

【個人的推察】
　どのレベルの精度問題かはわかりかねますが、もともとのリソースの水平状態からサンプリングして画面に出力…ではないのかな？という気がします。今の角度と次の角度との差分をとって、現在の画素に対して回転をかけていくような設計なら、計算を繰り返すたびになんらかの精度落ちが誤差として累積していく可能性が高いと言えます。なんかそのテのエラーっぽく見えます。
}


***【現象2】細かな位置・角度変更を続けるとスプライトの動きがガタつく、位置がズレる、縮んで消えるなどする（※環境依存）
#divclass(marginleft16){

発生環境：iモードシミュレーターII、W63CA（au機）
未発生環境：ParaFla!プレビュー、W41SH（au機）
----
　【現象１】と似たような感じですが、発生が環境依存で少し複雑です。小さなスプライトに対し、細かく位置・角度変更を繰り返し続けると、動きがガタつく、位置がどんどんズレていく、縮んで消える、という現象が発生しました。時計の針が逆回転までしてしまうのです。

スプライトの特徴としては、「ドットサイズが非常に小さく、基準点もゼロとかではなく、スプライト中に配置している画像のサイズはさらに小さい」。

|スプライトの大きさ|3x28|小さくて細長い|
|スプライトの基準点|1x27|基準点がスプライトの外側。端の方。|
|イメージの配置/サイズ|0,0 / 3x17|スプライトサイズからすると中途半端な大きさ|

起こったコードは【現象１】の対策済です。
-スプライトの位置や角度は整数値を設定
-スプライトの位置や角度は設定した値を記録し、変更の必要がある（新たな設定値が1以上違う）場合のみ書き換える
-スプライトの位置や角度を変更した場合には、scaleX, scaleY を再設定する

デバッグ出力しても、スプライト自体のプロパティ状態は良好です。スプライトのプロパティは正しいのに表示が乱れていることになります。

【推察１】
　スプライトのプロパティが正しく設定できていて、【現象1】という前例も踏まえます。変形計算を行うたびスプライト内イメージの「位置情報」にも誤差が累積している可能性が高いと思います。変形の基準点も端っことかではなくスプライトの外側ですし。内部のイメージを描画するのにも、スプライトの端から座標のオフセットを計算し、その部分にも誤差が累積する環境があるのかもしれません。

【検証１・ならばそもそもオフセットがなければ良い】
イメージの座標計算に誤差が乗るなら、スプライト座標と±0、つまりピッタリサイズのスプライトにすればどうかな、というのを試してみました。

-スプライトのサイズを変更し、イメージぴったりのサイズに変更する。
|スプライトの大きさ|3x17|→ イメージのサイズに合わせた|
|スプライトの基準点|1x27||
|イメージの配置/サイズ|0,0 / 3x17||

完璧ではありませんが、それなりに効果がありました。最初の状態だと rotation とは逆方向に回転するなど相当酷かったのですが、設定した範囲にある程度落ち着いてくれます。それでも50～100回程度も再計算すればある程度の誤差が出ました。rotationには一定の範囲を与えてアニメーションさせているはずですが、最低角と最高角で打つ位置が毎回微妙にズレていきます。完全にズレる前に自己復元して正常な範囲に戻るのですが、そのうちまた多少のズレを生じ始めます。結局、バグ状態に変わりはありませんでした。

しかし、とりあえずの方針として、わずかな誤差が相対的に大きくなってくる小さなイメージの描画には、とにかくジャストサイズのスプライトを使う方が無難だと思いました。スプライトの組み方には多少の制限となりますが、【現象１】の対策だけでそこそこフォローできます。

【検証２・完全に成功した対策】
-固定画面スプライトをそのまま描画しないで、定期的に duplicateClip()＆removeClip() する。

最終手段です。もし、【現象２・検証１の対策】でも微妙にずれることが確認されたら、強引な手段ですが、スプライトの削除と生成をはさんでクリアすれば良いと思います。

スプライト内イメージの位置情報は AS からは操作できない部分です。誤差が累積しても修正できません。
そこでオリジナルの健全な状態のスプライトを別に安置しておきます。で、見せるスプライトはduplicateClip()によるコピーとします。で、時々破棄して再生成してやるのです。もちろん携帯での頻繁な再生成はそれなりに処理負担＆電池消耗があると思いますので、現象が出たらパフォーマンスを多少犠牲にしつつ、程度を見ながら後付けで対処していくのがセオリーのような気がします。
}

----




----    </description>
    <dc:date>2011-09-09T07:43:46+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/23.html">
    <title>ParaFla! ノート</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/23.html</link>
    <description>
      #include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shCore.js)
#include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shBrushCpp.js)
最近、フリーのFLASHエディタで遊んでいます。
とりあえず目標は携帯待ち受けの自作ですが（※）、コレはなかなか優秀なオモチャの予感です。
（※）→&amp;sizex(-3){[[待ち受け出来ました！&gt;ジムニー格納庫 携帯電話・JA11メーター風待ち受けFLASH]]}

***説明

ParaFla! はフリーのFLASHエディタです。アクションスクリプト（AS）も使えます。
ネット上にも多数の解説サイトがあり環境は整っていますが、一部わかりにくいところもあります。
私がつまづいたポイントをまとめておきます。困った時に、副読本としてご覧いただければ幸い。

***オススメサイト（いきなり他力本願）
#divclass(marginleft16){

-[[ParaFla! Wiki&gt;&gt;http://www.wikihouse.com/ParaFla/]]
まさに本家というWikiです。解説はあんまりないのですが、膨大なサンプルがアップされており、具体性と即効性はピカイチです。
-[[パラフラ学習帳&gt;&gt;http://parafla776.jog.buttobi.net/]]
紙芝居ツールとしての概要、使い方が分かりやすいサイトです。
-[[ParaFla! 進学講座&gt;&gt;http://www.geocities.jp/para_core/kouza/]]
私が一番参考に使ったサイトです。「よくある文法リファレンス」として便利。
-[[区立ぱらふら予備校&gt;&gt;http://www.geocities.jp/dr0p4u/how2/]]
AS どころかプログラム初心者で、右も左もサッパリならこちらをどうぞ。
-[[デザインFlash待受画像ギャラリー! Design Flash Wall Gallery!&gt;&gt;http://nsflash.com/]]
むしろフラッシュのダウンロードサイトですが、[[携帯向けactionscript&gt;&gt;http://nsflash.com/action/action.html]]には、FSCommand2() が見やすくまとめてあります。
}

***SWF4・秀丸ハイライトファイル
#divclass(marginleft16){
100行以上書くような場合、スクリプトエディタは別に用意した方が無難です（使いやすいテキストエディタであれば、なんでも良いと思います）。
私は秀丸を使っているので、お土産にタイプミス防止・判読性向上のために作った強調表示定義ファイルを置いときます。ParaFla!SWF4 関数や制御構文、スプライトプロパティなどを強調表示1～4に設定するシンプルなものです。ご自由にお使い下さい。
-&amp;html(&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=23&amp;file=parafla_swf4.zip&quot;&gt;&lt;img src=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=15&amp;file=ico_file.gif&quot; style=&quot;vertical-align:middle;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=23&amp;file=parafla_swf4.zip&quot;&gt; ダウンロード &gt;&gt; parafla_swf4.zip&lt;/a&gt;)
----
}

***デバッグ出力のススメ
#divclass(marginleft16){

ParaFla! は、どう考えてもポカミスみたいな状態で実行しても、そのままプレビューが動きだします。
例えば、スプライト深度は一意に設定しないといけませんが、重複しててもエラーメッセージが出てプレビュー前に云々みたいな機能はありません（もちろん表示は妙な事になる）。
終始そんな調子なので、変数類とかちょいちょい画面に表示したりと一手間を心がけた方が良さそう。

----
}

***&quot;スプライト&quot;の説明
#divclass(marginleft16){
要はレイヤーとかそういうもののようです。
[[→ モノ好きだから読んでみる。&gt;ParaFla! の &quot;スプライト&quot; って何だ？]]

----
}

***removeClip() と duplicateClip() したスプライトの寿命
#divclass(marginleft16){
インスタンスの動的生成には解放がつきもののはずですが、意外と騒がれないのが気になって調べてみました。どうも削除を行う removeClip() は正の AS 深度のスプライトしか削除しないようです。
#html2(){&lt;pre name=&quot;code&quot; class=&quot;cpp:nocontrols&quot;&gt;// 深度が負のスプライトは、1フレームで自動的に削除されます。
// 必然的に、毎フレームduplicateClip()することになります。
duplicateClip(&quot;srcHoge&quot;,&quot;destHoge1&quot;,-1); // 深度が-1なので1フレームで自動削除

// 深度が0以上のスプライトは、removeClip()されるまで残ります。
duplicateClip(&quot;srcHoge&quot;,&quot;destHoge2&quot;,0); // 深度が0なので残り続けます。&lt;/pre&gt;}
duplicateClip() に設定した深度がマイナスだと 1 フレームで消えます。一方、正の値を使用したときは removeClip() 可能なので、removeClip() するまで存命します。

ParaFla! の深度ゼロは AS深度の -16127 に相当し、ParaFla! から設定可能な深度は ±256 に限られます。duplicateClip() を呼びだし複製したスプライトを、もし ParaFla! で最初から存在するスプライトの裏に配置したければ、duplicateClip() の深度には -16127±256 の範囲にある負の値を設定する必要があります。もちろん負の深度なので1フレームで消えます。基本的に毎フレーム複製する必要があります。

それでも毎フレーム複製するのは処理負荷だと思ったら、前後関係が発生するリソースを、あらかじめスプライトにまとめましょう。スプライトごと複製してしまえば正の範囲の AS 深度にマスク画像などを置く事が出来ます。

-全て負の深度（ -16127±256 ）に置く必要があり、毎フレーム複製処理の必要なケース
↑深度の値が大きい↑
親スプライト
&amp;tt(){├ }動的な複製スプライト （マスク対象）
&amp;tt(){│　└ }イメージ画像
&amp;tt(){└ }マスク画像
↓深度の値が小さい↓

-正の深度に複製可能で、毎フレーム複製処理の必要がないケース。
↑深度の値が大きい↑
親スプライト
&amp;tt(){└ }動的な複製スプライト
&amp;tt(){　　├ }イメージ画像 （マスク対象）
&amp;tt(){　　└ }マスク画像
↓深度の値が小さい↓

----
}

***SWF4 rotation の不思議仕様 精度落ち対策
#divclass(marginleft16){
携帯待ち受けなどに使われるSWF4環境には、わりと残念な仕様が多いようで、私が確認した現象とその対策をメモしておきます。

-【現象1】アナログ時計の針を回転させたら、どんどん縮んでいく。
-【現象2】細かな位置・角度変更を続けると動きがガタつく、位置がズレる、縮んで消えるなどする。

結論から言ってしまうと、「スプライトは座標の記録や計算の精度が低く、誤差が累積しやすいので出来るだけ慎重に動かす」という事なのですが、同じような現象に困った時は、こちらのメモを確認してみて下さい。
[[→ モノ好きだから読んでみる。&gt;SWF4 rotation の不思議仕様・精度落ち対策]]

----
}



----
#javascript(){{
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
dp.SyntaxHighlighter.ClipboardSwf = &#039;http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/clipboard.swf&#039;;
dp.SyntaxHighlighter.HighlightAll(&#039;code&#039;);
//--&gt;&lt;/script&gt;
}}    </description>
    <dc:date>2011-09-09T06:17:09+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/18.html">
    <title>秀丸マクロ インデントhome － カーソル移動サンプル</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/18.html</link>
    <description>
      #include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shCore.js)
#include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shBrushPhp.js)
タブインデントに対応したカーソルの行頭移動マクロです。
連続呼び出しで真の行頭とインデント行頭をフラフラします ( VisualStudio 的動作)。
通常範囲選択、BOX範囲選択中でも正常に動作します。
homeキーに対応させて使って下さい。 

-&amp;html(&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=15&amp;file=IndentHome.zip&quot;&gt;&lt;img src=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=15&amp;file=ico_file.gif&quot; style=&quot;vertical-align:middle;&quot;&gt;&lt;/a&gt; &lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=15&amp;file=IndentHome.zip&quot;&gt; ダウンロード&lt;/a&gt;)

*解説
タブや空白を除く行頭への移動は、正規表現を覚えれば驚くほど簡単です。
通常の行頭に移動した後 &quot;[^ \t]+&quot; を正規表現で検索すればそれでOKで、秀丸の強力なマクロは当然これをサポートしてくれます。
ただし、単に検索をかけただけでは検索バッファに履歴を残したり、
範囲選択中だとカーソル移動のために選択範囲が解除されてしまいます。
これらに対策を行い、カーソル移動系マクロの習作としてきちんと書いてみました。
興味のある方は（マクロヘルプを片手に）ご一読下さい。

*初期処理
#html2(){{{{{{
&lt;pre name=&quot;code&quot; class=&quot;php:nocontrols&quot;&gt;
{&amp;#x0009;//初期処理
&amp;#x0009;
&amp;#x0009;disabledraw; // 描画停止
&amp;#x0009;
&amp;#x0009;disableinvert; // 選択反転停止
&amp;#x0009;
&amp;#x0009;// 検索状態のバックアップ
&amp;#x0009;$strBuf = searchbuffer;
&amp;#x0009;#optBuf = searchoption;
&amp;#x0009;$strRepBuf = replacebuffer;
&amp;#x0009;
&amp;#x0009;// 選択状態のバックアップ
&amp;#x0009;#isSelect = selecting;
&amp;#x0009;#isRectSel = rectselecting;
&amp;#x0009;if ( x == seltopx ) #bufSelBeginX = selendx;
&amp;#x0009;else #bufSelBeginX = seltopx;
&amp;#x0009;if ( y == seltopy ) #bufSelBeginY = selendy;
&amp;#x0009;else #bufSelBeginY = seltopy;
}
&lt;/pre&gt;
}}}}}}
まずはおまじないです。チラツキ防止のお約束として、disabledraw を設定しておきます。
disableinvert の方は、今回は必要ないのですが、使いまわしを考えて出来るだけの予防策を盛り込みました。
-disabledraw / enabledraw ...　マクロ実行中の画面の更新を禁止 / 許可
-disableinvert / enableinvert ... 範囲選択のときの反転表示を禁止 / 許可

【検索状態のバックアップ】
後述するカーソル移動部分では、下方向検索（ searchdown2 ）を使用しています。マクロ内で検索を実施すると「下候補」「上候補」に使われる検索データも書き換えます。また、置換を使えば置換単語も書き換えます。マクロ内でこれらの機能を使う場合は、出来るだけマクロ実行前の状態に復帰しておくのがベターです（※）。今回は置換を行っていないので、置換設定については必要ないのですが、使いまわしを考えて出来るだけの予防策を盛り込みました。

-searchbuffer ...
　　「下候補」などで使用される最新の検索単語。検索を行うと更新されます。setsearch を使って別の設定に書き換えることが出来ます。
-searchoption
　　「下候補」などで使用される最新の検索オプション設定。検索を行うと更新されます。setsearch を使って別の設定に書き換えることが出来ます。
-replacebuffer
　　「置換」などで使用される最新の置換単語。置換を行うと更新されます。setreplace を使って別の設定に書き換えることが出来ます。

これらの値を使った状態取得＆復帰は、お定まりのルーチンみたいなものです。

(※)&amp;sizex(-2){今回は「単にカーソル移動だけ」が目的ですからね。もし、マクロの自動処理でどんな単語を検索したか重要なら、もちろん最新の検索バッファは消さない方が良いと思います。}

【選択状態のバックアップ】
homeとして使うマクロが、呼び出すたびに範囲選択を解除するようでは泣いてしまいます。これらもバックアップしておきます。
-selecting ...
　　範囲選択中かどうかを表します。範囲選択中の場合は１、そうでない場合は０です。
-rectselecting ...
　　BOX範囲選択中かどうかを表します。範囲選択中の場合は１、そうでない場合は０です。
　　（※）BOX範囲選択中は、selecting フラグも１になっています。
-seltopx / seltopy / selendx / selendy ...
　　選択範囲を示す変数です。一種の rect 型で、それぞれ seltopx&lt;=selendx, seltopy&lt;=selendy となります。

ここでは選択開始したカーソル座標を判断しています。”マクロ呼び出し時点でカーソルは選択範囲の端に存在している”ので（※） x, y それぞれに、現在のカーソル座標とは異なる方の値を適用すれば、通常選択・BOX選択どちらでも選択開始位置を読み取れます。

(※)&amp;sizex(-2){範囲選択状態でマクロを呼び出したら、範囲の隅っこに必ずカーソルが位置しているはずです。もしかしたら「マクロ呼び出し時点でカーソルが選択範囲の端っこに存在しない」という例外もあるかもしれません…が、再現方法を思いつけなかったので対策を入れていません。でも、マクロ呼び出し時に選択範囲有効なおかつ、選択範囲からカーソルが離れているなら、検索で選択範囲が消えたとしても、もともとの範囲を復旧するだけで良い気はします。とは言え、検証のしようがないので今回そういう仕様は見送っています。}

*正規表現検索によるカーソル移動
#html2(){{{{{{
&lt;pre name=&quot;code&quot; class=&quot;php:nocontrols&quot;&gt;
{&amp;#x0009;// 正規表現検索によるカーソル移動。
&amp;#x0009;#firstCur = x;
&amp;#x0009;moveto 0,y;
&amp;#x0009;searchdown2 &quot;[^ \t]+&quot;, casesense, regular;
&amp;#x0009;if ( result == 0 || ( #firstCur != 0 &amp;&amp; #firstCur &lt;= x ) ) moveto 0,y;
}
&lt;/pre&gt;
}}}}}}
正規表現を使って行頭を検索しています。正規表現の説明は省きます(※)。全角スペースに対応させても良い気がしますが、とりあえず半角スペースとタブ文字のみをインデント文字として認識させました。

有効な文字が見つからない場合(検索失敗)と、カーソルが通常の行頭～インデント行頭の中間にある場合には、通常の行頭に移動するようにします。これで連続実行すると通常の行頭とインデント行頭をフラフラするようになります。どっちでも良いんですが、この場合、moveto でなく golinetop2 を使ってもオッケー。

(※)&amp;sizex(-2){一応説明すると、} moveto &amp;sizex(-2){を使って通常の行頭に移動した後「半角スペースあるいはタブではない文字が一つ以上あらわれる位置」を検索しています。ヒット条件に改行文字を含むので、次の行にヒットしないのがミソと言えばミソです。}

*終了処理
#html2(){{{{{{
&lt;pre name=&quot;code&quot; class=&quot;php:nocontrols&quot;&gt;
{&amp;#x0009;// 終了処理
&amp;#x0009;
&amp;#x0009;// 選択状態の復帰
&amp;#x0009;if ( #isSelect )
&amp;#x0009;{
&amp;#x0009;&amp;#x0009;#bufSelLastX = x;
&amp;#x0009;&amp;#x0009;#bufSelLastY = y;
&amp;#x0009;&amp;#x0009;moveto #bufSelBeginX, #bufSelBeginY;
&amp;#x0009;&amp;#x0009;if ( #isRectSel == 1 ) beginrect;
&amp;#x0009;&amp;#x0009;else beginsel;
&amp;#x0009;&amp;#x0009;moveto #bufSelLastX, #bufSelLastY;
&amp;#x0009;&amp;#x0009;if ( #isRectSel == 0 ) endsel;
&amp;#x0009;}
&amp;#x0009;
&amp;#x0009;// 検索状態の復帰
&amp;#x0009;setsearch $strBuf, #optBuf;
&amp;#x0009;setreplace $strRepBuf;
&amp;#x0009;
&amp;#x0009;enableinvert; // 選択反転再開
&amp;#x0009;
&amp;#x0009;enabledraw; // 画面描画再開
}
&lt;/pre&gt;
}}}}}}
【選択状態の復帰】
検索によってカーソル移動した後は、範囲選択が解除されています。必要があれば、バックアップを使って復帰させます。

カーソルをもともとの選択開始位置まで戻し、選択モードフラグに応じて beginsel / beginrect を設定します。選択モードに切り替わったら、新たに見つかったインデント位置までカーソルを戻すことで選択範囲が復帰します。選択モードは endsel で解除できます。

-beginsel / beginrect ... 通常の範囲選択 / BOX 範囲選択 を開始する。
-endsel ... 通常の範囲選択（あるいは BOX 範囲選択）を終了する。

ちなみに私の秀丸設定では、範囲選択は shift キー押しっぱなしで行いますが、BOX 選択はトグル的なモード切り替え式にしています。そのため BOX 選択を行っているときには endsel による選択モードの解除を行わないようにしています。そうしないとマクロ実行後、カーソルを移動したら BOX 選択が消えちゃうんですよね…通常の範囲選択のときは shift キーは押しっぱなしなので大丈夫なんですが…。

【検索状態の復帰】
決まりきっているお約束です。【検索状態のバックアップ】に記述したとおり、検索ダイアログにゴミを残さないようにします。
ついでに、enableinvert, enabledraw も設定して、状態をマクロ実行前に復帰させます。

*感想
気がつけば肝心のカーソル移動のコードより、初期化と後始末が大半のコードになってしまいましたね！
行頭移動自体はなんの変哲もないマクロですし、カーソル移動を目的にしたマクロの雛形にしてもらえれば幸いです。

ちなみにコードに無名スコープ（意味のない{}カッコ）を使っていますが、コレ自体には何の意味もありません。意味的にまとめるだけのものです。

見たことのない人は若干気持ち悪いかもしれませんが、秀マクロはもちろん主要なCコンパイラでもサポートされています。しかし、秀マクロではローカルスコープとしては動作しないので「コードを目的別にまとめてネストすれば、個人的には見やすいかな～」という程度のものです。(Perlみたいに「無名スコープ＋ローカル宣言」が通れば変数名重複時の安全性が上がると思いますが、エディタマクロとしては過剰機能なんでしょうね)

このへんは、各人読みやすいように再編してもらえるとありがたいです。

----
#javascript(){{
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
dp.SyntaxHighlighter.ClipboardSwf = &#039;http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/clipboard.swf&#039;;
dp.SyntaxHighlighter.HighlightAll(&#039;code&#039;);
//--&gt;&lt;/script&gt;
}}    </description>
    <dc:date>2010-12-29T08:13:30+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/37.html">
    <title>SuperTopMost - 使い方</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/37.html</link>
    <description>
      #html2(){&lt;table width=100% class=simple&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/26.html&quot;&gt;Top&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/36.html&quot;&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/37.html&quot;&gt;使い方&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/38.html&quot;&gt;その他&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;}

***&amp;link_anchor(anchor_howto){使い方 ▼}
-起動
-終了
-設定変更
***&amp;link_anchor(anchor_optionformat){起動オプションの詳しい書式 ▼}
-ウィンドウタイトルの全文一致検索
-ウィンドウタイトルの部分一致検索＆呼び出しプロセスで絞り込み
-起動後、作動開始まで待機時間を入れる

----

**&amp;anchor(anchor_howto,option=nolink){使い方}
#divclass(marginleft16){
#html2(){
&lt;table width=100% class=simple&gt;&lt;tr&gt;&lt;td class=simple style=&quot;padding-right:8px;&quot;&gt;&lt;h4&gt;動作設定＆起動&lt;/h4&gt;ショートカットなどで必ず起動オプションを与えて実行してください。&lt;br&gt;最もシンプルな書き方は、次の通りです。&lt;br&gt;&lt;br&gt;&quot;SuperTopMost.exeのパス&quot; &quot;ウィンドウのタイトル&quot;&lt;br&gt;&lt;br&gt;ウィンドウのタイトルが、&quot;ウィンドウのタイトル&quot; に全文一致する、全てのウィンドウに対して前面化処理を行います。
&lt;/td&gt;&lt;td align=right class=simple&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=stmdlg00option.png&quot; target=new&gt;&lt;img src=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=stmdlg00option.png&quot; width=212px height=233px&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
}

#html2(){
&lt;table width=100% class=simple&gt;&lt;tr&gt;&lt;td class=simple style=&quot;padding-right:8px;&quot;&gt;&lt;h4&gt;終了&lt;/h4&gt;もう一度SuperTopMost.exeを起動してください。&lt;br&gt;多重起動しない代わりに、既出のSuperTopMostプロセスへ終了指示を送ることができます。&lt;/td&gt;&lt;td align=right class=simple&gt;&lt;a href==&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=stmdlg02endcancel.png&quot; target=new&gt;&lt;img src=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=stmdlg02endcancel.png&quot; width=189px height=63px&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
}

#html2(){
&lt;table width=100% class=simple&gt;&lt;tr&gt;&lt;td class=simple style=&quot;padding-right:8px;&quot;&gt;&lt;h4&gt;設定変更&lt;/h4&gt;もう一度ショートカットなどで起動オプションを与えて&lt;br&gt;SuperTopMost.exeを起動してください。&lt;br&gt;多重起動しない代わりに、既出のSuperTopMostプロセスへ新しい設定を送ることができます。&lt;/td&gt;&lt;td align=right class=simple&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=stmdlg03change.png&quot; target=new&gt;&lt;img src=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=stmdlg03change.png&quot; width=215px height=111px&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
}

}

**&amp;anchor(anchor_optionformat,option=nolink){起動オプションの詳しい書式}
#divclass(marginleft16){
***ウィンドウタイトルの全文一致検索 
#divclass(marginleft16){
【書式】
-基本
&quot;SuperTopMost.exeのパス&quot; &quot;任意のウィンドウタイトル&quot;
#divclass(marginleft16){
「任意のウィンドウタイトルに全文一致するウィンドウ」を前面化します。
}

-複数指定
&quot;SuperTopMost.exeのパス&quot; &quot;任意のウィンドウタイトル１&quot; &quot;任意のウィンドウタイトル２&quot;
#divclass(marginleft16){
「任意のウィンドウタイトル１と任意のウィンドウタイトル２のどちらかにタイトルが全文一致するウィンドウ」を前面化します。
}
}
&amp;br()
***ウィンドウタイトルの部分一致検索＆呼び出しプロセスで絞り込み
#divclass(marginleft16){
ウィンドウタイトルが不定で、全文一致で検索できない場合この方法を使います。
任意のキーワードをタイトルの一部に含むウィンドウの中で、任意の実行ファイルから起動しているものだけを前面化します。
【書式】
-基本
&quot;SuperTopMost.exeのパス&quot; &quot;/mod&gt;&gt;実行ファイル１&quot; &quot;任意のキーワード１&quot; &quot;任意のキーワード２&quot;
#divclass(marginleft16){
&amp;br()「タイトルに 任意のキーワード１/２ いずれかを含み、実行ファイル１ から起動しているウィンドウ」を前面化します。
/mod&gt;&gt; オプションは前置修飾であり、以降に続く任意のワード全てに影響します。
}

-複数指定
&quot;SuperTopMost.exeのパス&quot; &quot;/mod&gt;&gt;実行ファイル１&quot; &quot;キーワード１&quot; &quot;/mod&gt;&gt;実行ファイル名２&quot; &quot;キーワード２&quot;
#divclass(marginleft16){
&amp;br()「タイトルに キーワード１ を含み、実行ファイル１ から起動したウィンドウと、キーワード２ を含み、実行ファイル２ から起動したウィンドウ」を前面化します。/mod&gt;&gt; オプションを再設定すれば、それ以降のワードへ新しい実行ファイル等モジュール名を指定できます。

なお、部分一致＆モジュール絞込みを解除するには以下のように、実行ファイル名に &quot;all&quot; を指定します。

&quot;SuperTopMost.exeのパス&quot; &quot;/mod&gt;&gt;実行ファイル１&quot; &quot;キーワード１&quot; &quot;/mod&gt;&gt;all&quot; &quot;キーワード２&quot;

こうすることで、「タイトルに キーワード１ を含み、実行ファイル１ から起動したウィンドウと、キーワード２ に全文一致するウィンドウ」が前面化されるようになります。全文一致書式についても補足すると、次の書き方は同じ意味になります。

&quot;SuperTopMost.exeのパス&quot; &quot;任意のウィンドウタイトル&quot;
&quot;SuperTopMost.exeのパス&quot; &quot;/mod&gt;&gt;all&quot; &quot;任意のウィンドウタイトル&quot;

}
}
&amp;br()
***起動後、作動開始まで待機時間を入れる
#divclass(marginleft16){
ミリ秒単位で、フック作動開始を遅らせることができます。
スタートアップに登録した時、起動時の処理負荷を集中させたくない時などに指定します。

【書式】

&quot;/wait&gt;&gt;2500&quot;
#divclass(marginleft16){
&amp;br()起動後、2500ミリ秒の待ち時間を入れてから前面化処理を有効にします。
}
}

}

----




----    </description>
    <dc:date>2010-12-29T08:01:41+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/38.html">
    <title>SuperTopMost - その他</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/38.html</link>
    <description>
      #html2(){&lt;table width=100% class=simple&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/26.html&quot;&gt;Top&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/36.html&quot;&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/37.html&quot;&gt;使い方&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/38.html&quot;&gt;その他&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;}

**&amp;anchor(anchor_mechanism,option=nolink){動作原理＆時々表示に失敗する件について}
#divclass(marginleft16){
アプリケーション間あるいはタスクバーへのフォーカス移動など、ウィンドウの前後関係が変わりそうなメッセージをグローバルフックで見張っています。そこで任意の条件に合致するウィンドウを再表示（非フォーカス・表示のみ）する仕組みになっています。

とは言え状況次第ではうまく動かず、前面化に失敗するタイミングもあります。あんまり執拗に前面化するのも怖いので、緩めに作っています。その場合も、引き続きフォーカス移動をともなう操作をするだけで前面復帰できます。

タイミングの問題は、実のところあんまりクリティカルにはチェックしいません（何らかの操作により遠からずすぐ復帰しますし…申し訳ありますん）。一応、こちらから発行する再表示処理は結構な頻度（シェルフックイベント全て＆HCBT_ACTIVATE・MINMAX・MOVESIZE）で送っています。しかし各プロセスがメッセージを受信してから処理終了するまで当ツールが見張っているわけではありません。原因はそのへんにあるような気がしています。

もし、通常ウィンドウと最前面ウィンドウのそれぞれのＺオーダーについて、手前固定層・通常浮動層・奥固定層のような設定可能なシステムなら、こんな無理やりなツール必要ないんですけどネェ。
}

**&amp;anchor(anchor_plan,option=nolink){現在の改良検討案}
#divclass(marginleft16){
-設定方法が起動オプションのみってのはスパルタンすぎ？
　→ キー入力によるワンタッチの最前面化設定･解除ができれば便利な気がして仕様を模索中です。
-さすがに非最前面ウィンドウの属性書き換えくらいは出来た方が便利な気がする
…仕様のイメージがまとまらなくて悩んでます。うーん。＾＾；
}

----




----    </description>
    <dc:date>2010-12-29T07:58:26+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/36.html">
    <title>SuperTopMost - Download</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/36.html</link>
    <description>
      #html2(){&lt;table width=100% class=simple&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/26.html&quot;&gt;Top&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/36.html&quot;&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/37.html&quot;&gt;使い方&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/38.html&quot;&gt;その他&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;}

&amp;html(&lt;img src=&quot;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=15&amp;file=ico_file.gif&quot; style=&quot;vertical-align:middle;&quot;&gt;　ダウンロード )
#divclass(marginleft16){
-[[ver041b.zip 96KB ( スタンドアロン版 174KB )&gt;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=SuperTopMost_v041b.zip]]
-[[ver040b.zip 18KB ( VCランタイム MSVCR9x版 32KB )&gt;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=SuperTopMost_v040b.zip]]
}

ランタイム版について

#divclass(marginleft16){
まずシステムとしての Windows 系フォルダに MSVCR9x.dll（MSVCR90.dll等）が入っているか確認してみてください。最近は、MSN Live メッセなどでも気づかぬ間にランタイムをインストールしている事があるようです。

しかしランタイムがインストールされていない時は、わざわざインストールするのも馬鹿らしいかもしれません。その時はお好みでスタンドアロン版を使ってみてください。
}

**&amp;anchor(anchor_source,option=nolink){ソースコード}
#divclass(marginleft16){
-[[プロジェクト＆ソースコードファイル 339KB ( Visual C++ 2008 Express Edition )&gt;http://www31.atwiki.jp/kouraku_tiritomado?cmd=upload&amp;act=open&amp;pageid=26&amp;file=SuperTopMost_v04Release.zip]]
}

----




----    </description>
    <dc:date>2010-12-29T07:58:08+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/26.html">
    <title>SuperTopMost</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/26.html</link>
    <description>
      #html2(){&lt;table width=100% class=simple&gt;&lt;tr&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/26.html&quot;&gt;Top&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/36.html&quot;&gt;Download&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/37.html&quot;&gt;使い方&lt;/a&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;valign=&quot;middle&quot;width=&quot;25%&quot;style=&quot;background-color:#ccf;padding:4px 0px&quot;&gt;&lt;a href=&quot;http://www31.atwiki.jp/kouraku_tiritomado/pages/38.html&quot;&gt;その他&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;}

SuperTopMostは、常駐型の最前面表示支援ツールです。

-任意の最前面属性ウィンドウを、他の最前面属性ウィンドウよりも手前に固定表示できます。
　&amp;color(red){タスクバーよりも手前に表示できます！}
-前面化するウィンドウの選出条件は、ショートカットなどの起動オプションで設定＆実行開始。
-タスクトレーを使わないどころかダイアログもほとんど出さない軽量ストイック仕様。

【 Yahoo!ウィジェットをスタートボタン下に表示してみた 】
#divclass(tbl_layout){|&amp;image(supertopmost.png)|BOTTOM:通常では、たとえ最前面属性のウィンドウでも、他の最前面属性ウィンドウやタスクバーが有効になると、その後ろに隠されてしまいます。このツールは、そういう場合に前面表示できます。|}

この手のツールは出尽くした感がありましたが、「タスクバーより手前」に挑戦するのは意外と見当たらないので作ってみました。ニッチ万歳！！
ノートPCの貴重な表示領域を節約できます。ちなみに DLL・グローバルフック・プロセス間通信・STLの習作。

----




----    </description>
    <dc:date>2010-12-29T07:57:55+09:00</dc:date>
  </item>
    <item rdf:about="http://www31.atwiki.jp/kouraku_tiritomado/pages/20.html">
    <title>秀丸マクロ ファイルを開くダイアログを実行する</title>
    <link>http://www31.atwiki.jp/kouraku_tiritomado/pages/20.html</link>
    <description>
      #include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shCore.js)
#include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shBrushCpp.js)
#include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shBrushVb.js)
[[秀丸パイプ&gt;秀丸マクロ 外部プログラムから戻り値を得る方法 － 秀丸パイプの使い方]]とVBSを使って、マクロから「ファイルを開く」ダイアログを表示してみます。
標準入力を解析して、複数のパラメータを受け渡しするサンプルにもなっています。

使っている UserAccounts.CommonDialog が WindowsXP 専用であるため、他の環境では動かないそうです（Vista も不可！）。また、ダイアログ操作中は秀丸本体が軽くフリーズ状態となり、我ながら微妙なサンプルになっております。

*show_opendialog.vbs － UserAccounts.CommonDialog.ShowOpen() サンプル
#html2(){&lt;pre name=&quot;code&quot; class=&quot;vb:nocontrols&quot;&gt;Option Explicit

&#039;【初期処理】
Dim arg, arg_v, objDialog
Set objDialog = CreateObject(&quot;UserAccounts.CommonDialog&quot;)

&#039;【標準入力を解析して動作設定】
arg_v = Split(WScript.StdIn.ReadLine, &quot;,&quot;)
For Each arg In arg_v
    Dim argKey
    argKey = Split(Trim(arg),&quot;=&quot;,2)
    argKey(0) = LCase(argKey(0))
    Select Case argKey(0)
    Case &quot;filter&quot;
        objDialog.Filter = argKey(1)      &#039; Filter プロパティの設定
    Case &quot;filterid&quot;
        objDialog.FilterIndex = argKey(1) &#039; FilterIndex プロパティの設定
    Case &quot;dir&quot;
        objDialog.InitialDir = argKey(1)  &#039; InitialDir プロパティの設定
    Case &quot;fname&quot;
        objDialog.FileName = argKey(1)    &#039; FileName プロパティの設定
    End Select
Next

&#039;【実行とエコーバック】
If objDialog.ShowOpen &lt;&gt; 0 Then
    Wscript.Echo objDialog.FileName
End If

WScript.Quit&lt;/pre&gt;}
UserAccounts.CommonDialog 自体の説明は、いつものようにサックリ飛ばします。基本的な使い方は&amp;link_anchor(ms_ref){こちらをご覧になる}か、検索すれば他のサンプルがヒットすることでしょう。

【初期処理】
#divclass(marginleft16){
CreateObject でコモンダイアログを生成しています。（これがXP専用なのがネックです…）
}

【標準入力を解析して動作設定】
#divclass(marginleft16){
今回のハイライトです。標準入力に複数のパラメータを送るサンプルになっています。
ここでは、キーと値をセットにして、一行に複数の値が並んだ書式を解析しています。PerlなどでURLエンコードをやったことのある人はピンときたかもしれませんが、次のような書式を想定しています。
#html2(){&lt;pre&gt;キー=値,キー=値,...,キー=値&lt;/pre&gt;}
今回は、キーに指定された項目別に UserAccounts.CommonDialog に設定を与えたいので、具体的にはこんな書式を解析できると便利ですね。
#html2(){&lt;pre&gt;filter=Filterの設定値,filterid=FilterIndexの設定値,...,fname=FileNameの設定値&lt;/pre&gt;}
コードの方はまず、最初の Split() で &quot;,&quot; ごとに分解し、&quot;キー=値&quot; の文字列グループに換えてから For Each 構文に渡しています。そして For Each ループ中で受け取った個別の &quot;キー=値&quot; について、もう一度 &quot;=&quot; を区切りに使って Split() し、キーと値を分離しています。そこから先は簡単で、Case 構文を使ってキーごとに処理をふりわけています。Trim() と LCase() についは、なんとなくのオマケ機能です。カンマ前後の空白切除や、”キーについては大文字小文字を不問”にした方が便利そうなんじゃないかなぁ、と。

&quot;キー=値&quot; を並べるやり方は順番や個別省略が自在で、プログラム的にも短くカスタマイズが簡単です。スクリプトには都合の良いテクニックですね。
}

【実行とエコーバック】
#divclass(marginleft16){
ダイアログを表示し、ファイルが選択されたら標準出力にエコーして、キャンセル時にはなにも出力せず終了します。
}

*秀丸パイプを使ったマクロからの呼び出し
#html2(){&lt;pre name=&quot;code&quot; class=&quot;cpp:nocontrols&quot;&gt;loaddll &quot;HmPipe.hmf&quot;;
message dllfuncstr(&quot;HmPipeRun&quot;, &quot;Filter=All Files|*.*,Dir=C:&amp;#165;&amp;#165;,fname=TestView&quot;,
&amp;#9;&amp;#9;&amp;#9;&quot;cscript.exe&quot;, &quot;//nologo show_opendlg.vbs&quot;);
freedll;
endmacro;&lt;/pre&gt;}
設定を施してスクリプトを呼び出しています。フィルターは All Files、最初に開く場所を C:&amp;#165; に設定し、デフォルトのファイル名を &quot;TestView&quot; としています。

-実行結果
&amp;image(fileopen.jpg)

----
【注意】
なお秀丸パイプ作動中は制御がそっちに移りっきりなので、ダイアログ選択中は秀丸がフリーズしてしまいます。このダイアログに親ウィンドウとして秀丸を登録する、手軽な方法でもあればどうにかなりそうですが、どうしても本格的なハックになりそうです。秀丸としても DLL 関数がビジーな状態までは意識していないでしょうから、ここはもう本家 run 命令の標準入出力サポートを信じて待つしかありません。

-&amp;aname(ms_ref,option=nolink){参考}
[[MicrosoftTechNet / Hey, Scripting Guy! - ファイルを選択するためのダイアログ ボックスを表示する方法はありますか&gt;&gt;http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/jan05/hey0128.mspx]]
さらに詳しいフィルター設定など、マイクロソフト純正のサンプルが載っています。

----
#javascript(){{
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
dp.SyntaxHighlighter.ClipboardSwf = &#039;http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/clipboard.swf&#039;;
dp.SyntaxHighlighter.HighlightAll(&#039;code&#039;);
//--&gt;&lt;/script&gt;
}}    </description>
    <dc:date>2010-12-28T15:39:52+09:00</dc:date>
  </item>
  </rdf:RDF>

