「
利用者:Sukemaru
」を編集中 (節単位)
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
=== ポップアップメニュー === sukemaru の環境では、メニューに表示するアイテムが 5000 件とか 10000 件とかを超えるとポップアップメニューが表示されず(エラーメッセージも表示されず)にマクロが終了してしまうことがある…。 「[[ポップアップメニューで検索先にジャンプ#sukemaru 版|検索ジャンプ]]」マクロの include 版で発生するのだが、ポップアップメニューを表示する直前にステータスバーに表示すべき情報を <code>ClipboardData.SetData( Status );</code> でコピーしておくと、 <code>ヒット数: 21,525 件 ( 4 件目 ) ・ 21,525 行 ( 4 行目 ) / 全体の行数: 61,001 行 [ 12. 906 秒 ]</code> のようにデータが残ったので、前処理段階でコケたのではなくポップアップメニューの描画のさいにコケていたようだ。 また、11 万行の文書から空行を検索したとき、ステータスバーに以下のメッセージを表示して <code>一致: 27,814 行 / 空白行数: 27,849 行 / 全体の行数: 111,186 行 [ 6. 485 秒 ]</code> ポップアップメニューも表示されたが、実際に表示されていたアイテム数は 6000 件台で、20000 件以上のアイテムは表示されずにスポイルされてしまっていたということもあった。 以下の単純なコードでアイテム 10000 件のポップアップメニューを表示させようとしても、4000 件ぐらい(4000 前後で不定)までしか表示されない…。 <syntaxhighlight lang="javascript"> var m = CreatePopupMenu(); for ( var i = 1; i <= 10000; i ++ ) { m.Add( "" + i, i ); } var r = m.Track( mePosMouse ); </syntaxhighlight> 環境依存の不具合かもしれないが、はて…? ==== オプションフラグ ==== [[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|PopupMenu.Add() メソッド]] の第三引数 '''Flags''' : int を数値化すると <syntaxhighlight lang="javascript"> meMenuChecked = 1 meMenuGrayed = 2 meMenuChecked + meMenuGrayed = 3 meMenuSeparator = 4 </syntaxhighlight> となるので、真偽値が <syntaxhighlight lang="javascript" inline>true=1</syntaxhighlight> / <syntaxhighlight lang="javascript" inline>false=0</syntaxhighlight> で評価されることを利用して、真偽値を返す変数や条件式を代入することができる(ただし Number 型に変換する必要がある ← 算術演算子 <syntaxhighlight lang="javascript" inline>+</syntaxhighlight> をつけるなど)。 <syntaxhighlight lang="javascript"> var menu = CreatePopupMenu(); var hoge = true; var fuga = false; var piyo = true; menu.Add( "Hoge", 1, + hoge ); // "+" を付けて数値化すると meMenuChecked menu.Add( "Fuga", 2, !fuga * 2 ); // (!fuga = 1) *2 なので meMenuGrayed if ( piyo ) { menu.Add( "Piyo", 3 ); // piyo が true のときだけ表示 } var num = menu.Track( mePosMouse ); </syntaxhighlight> : ※ オプションフラグ ''meMenuGrayed'' を使用して条件付きで特定の項目をグレーアウトするだけでなく、<code>menu.Add( ... );</code> の行を [https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#if...else_statement if() 文] で囲むなどすれば、状況に応じたメニュー項目だけを表示させることもできる。 ==== アクセラレータ ==== ポップアップメニューのラベルの文字列に「半角アンパサンド記号 '''<q>&</q>''' + '''半角英数字''' (またはアスキー記号)」を付記することで、アクセラレータ(アクセスキー)を設定することができる。 ラベルの先頭に連番数字などがある場合は、数字のまえにアンパサンド記号を付加して数字をアクセラレータにすることもできる。 そのさい、Shift キー付きでの入力が必要な記号は Shift キーなしで入力可能なキーのラベルと同一視される (e.g. 「'''&#'''」で '''<q>#</q>''' 記号をアクセラレータに指定した場合、JIS 配列のキーボードでは <kbd>3</kbd> キーがアクセラレータになる)。 * <span style="color:#0000c0;">'''<q>&</q>''' 記号でアクセラレータ化する文字の位置は限定されないが、<u>最初の '''<q>&</q>''' 記号のうしろの文字がアクセラレータになる</u></span>( … とおもわれる ← ポップアップメニュー内で「下線つきで表示される文字」と一致しないことがある)。 * <span style="color:#c00;">全角文字はアクセラレータにできない。</span> * <span style="color:#c00;">ラベル文字列に含まれる '''<q>&</q>''' 記号はすべてエスケープされてしまい、ポップアップメニューには表示されなくなるので、ラベルに '''<q>&</q>''' 記号を表示させたいときは、'''<q>&&</q>''' のように二重に記述する必要がある。</span> ** → 不特定の文字列 <syntaxhighlight lang="javascript" inline>String</syntaxhighlight> (文書内から抽出したテキストなど)をラベルにする場合は、あらかじめ <syntaxhighlight lang="javascript" inline>String.replace( /&/g, "&&" )</syntaxhighlight> と記述するとよい。 : ※ '''<q>&&</q>''' の記述で表示される '''<q>&</q>''' 記号は、アクセラレータにならない。 * <span style="color:#0000c0;">同じキーが重複してアクセラレータに指定されていると、そのキーを押した場合、アイテム間をトグル移動する(その場合は <kbd>Enter</kbd> キーで決定する)。</span> ** → アイテム数が多くなるメニューの場合、<syntaxhighlight lang="javascript" inline>menu.Add( "キャンセル & ", 0 );</syntaxhighlight> という行を 10 件とか 20 件ごとに挿入すると、スペースキーでポップアップメニュー内をスクロールさせることができる。 : ※「'''&<span style="background:#bfdfff;"> </span>'''」(半角アンパサンド+半角空白) で半角スペースをアクセラレータに指定したアイテムは、<kbd>Space</kbd> キーがアクセスキーになる。 <syntaxhighlight lang="javascript"> /* アクセラレータを付加する */ var menu = CreatePopupMenu(); var piyo = "LOVE & PEACE & ..."; menu.Add( "アイテム1(&1)", 1 ); // [1] キーがアクセラレータ menu.Add( "アイテム&2", 2 ); // [2] キーがアクセラレータ menu.Add( "0&3 アイテム3", 3 ); // [3] キーがアクセラレータ menu.Add( "&Hello &World &4", 4 ); // [H] キーがアクセラレータ menu.Add( piyo.replace( /&/g, "&&" ) + "(&5)", 5 ); // [5] キーがアクセラレータ menu.Add( piyo + "(&6)", 6 ); // スペースキーがアクセラレータ menu.Add( "※※※※", 0, meMenuSeparator ); // meMenuSeparator があると第一引数の文字列は無視される menu.Add( "キャンセル & ", 0 ); // スペースキーがアクセラレータ // 5つめのアイテムは "LOVE & PEACE & ..." と表示されるが // 6つめのアイテムは "LOVE PEACE ..." と表示される // ※ 6つめのアイテムと最後のアイテムでアクセラレータが重複している var ret = menu.Track( 0 ); </syntaxhighlight> <syntaxhighlight lang="javascript"> /* 10 行ごとに「キャンセル」項目を挿入し、スペースキーでスクロール可能にする */ var arr = document.Text.split( "\n" ); var menu = CreatePopupMenu(); for ( var i = 0; i < arr.length; i ++ ) { if ( i > 0 && i % 10 == 0 ) { menu.Add( "", 0, meMenuSeparator ); menu.Add( "キャンセル & ", 0 ); menu.Add( "", 0, meMenuSeparator ); } menu.Add( arr[i].slice( 0, 30 ).replace( /&/g, "&&" ), i + 1 ); } var y = menu.Track( 0 ); if ( y ) { document.selection.SetActivePoint( mePosLogical, 1, y ); } </syntaxhighlight> ==== ラベルの整形 ==== * 基本的にポップアップメニュー(警告・確認ダイアログなどもだが)は UI フォントで表示されるので、文字列が英数字の羅列の場合には読みづらい ( …と個人的に感じている @WinXP)。 : 文書内の文字列など不特定の文字列をラベル化する「[[ポップアップメニューで検索先にジャンプ#sukemaru 版|検索ジャンプ]]」や「[[ブックマーク一覧ジャンプ#sukemaru 版|ブックマークジャンプ]]」、「[[「クリップボード履歴」メニューのマクロ化]]」マクロでは、読みづらい半角アルファベットや記号を全角化させるなどしている。 <syntaxhighlight lang="javascript"> /** * ポップアップメニューに表示するラベルを整形する * * ※ 不要な置換については .replace( ... ) の行を 削除/コメントアウト してよい * * ・行頭空白を除去 * ・空白文字を圧縮: →「›」(U+203A) に置換 * ・文字数を切り詰め( String.slice メソッド ) * ・改行記号を可視化: →「↲」(U+21B2) または「⏎」(U+23CE) に置換 * ・削られてしまう「&」を補完 * ・「¥」(U+005C) を「∖」(U+2216) に置換 * ・特殊な空白文字を豆腐に置換: →「⊠」(U+22A0) または「▯」(U+25AF) * ・判読しづらい ascii 記号 !"%'(),.:;@[]`{|} を全角に置換 * ・「a-z」を全角に置換 */ var y = document.selection.GetActivePointY( mePosLogical ) // 行番号 var str = document.GetLine( y, 0 ); // 行の文字列 var menuWidth = 55; // 切り捨ての閾値 var reg = /[\u00A0\u1680\u180e\u2000-\u200A\u2028\u2029\u202F\u205F\uFEFF]/g; var menuKey = str.replace( /^[\t ]+/, "" ) .replace( /(?:\t|[ ]{3,}|[ ]{2,})+/g, " › " ) .slice( 0, menuWidth + 1 ) .replace( /\r?\n/g, " ↲ " ) .replace( /[&]/g, "&&" ) .replace( /[\\]/g, "∖" ) .replace( reg, "▯" ) .replace( /[!"%'(),.:;@\[\]`a-z{|}]/g, function( tmp ) { return String.fromCharCode( tmp.charCodeAt( 0 ) + 0xFEE0 ) } ); // 文字数を切り詰めた場合は「 ...」を付加 menuKey += ( str.length > menuWidth ) ? " ..." : ""; // 文字列の先頭に行番号(連番)を付加する // パターン➀: アクセラレータつきの番号(左端揃え)を付加 var num = "&" + y; menuKey = num + ": " + menuKey; // パターン➁: 番号(左端揃え)の 末尾1桁 をアクセラレータにするなら var num = String( y ).replace( /\d$/, "&$&" ); menuKey = num + ": " + menuKey; // パターン➂: 連番が多いときは「空白文字でケタ埋め (右端揃え)」するとよい // 例: EN SPACE「 」(U+2002) でケタ埋めして、末尾1桁 をアクセラレータにする var numWidth = String( d.GetLines( 0 ) ).length; var num = ( " " + y ).slice( - numWidth ).replace( /\d$/, "&$&" ); menuKey = num + ": " + menuKey; </syntaxhighlight> : ※ このコードでは色々と unicode 文字を使用しているので、マクロの JS ファイルは UTF-8 などの形式で保存しなければならない。 * また、「[[#マクロライブラリに投稿したマクロ|マクロライブラリに投稿したマクロ]]」の節の画像リンク(サムネイル)のように、タブインデントや連番のケタ埋め、サブメニューの活用などの工夫で、ポップアップメニューの体裁はある程度自分好みにカスタマイズできる。 ==== ステータスバーの表示 ==== ポップアップメニューの表示と同時ににステータスバーに任意の文字列を表示する場合は、 [[マクロリファレンス:PopupMenu インターフェイス#Track メソッド|PopupMenu.Track()]] の行の直前に ''[[マクロリファレンス:Window インターフェイス#Status プロパティ|Status]] = "hoge";'' を記述する。 ※ <code>PopupMenu.Track()</code> が発動した時点でエディタウインドウ本体は停止するので、直後に <syntaxhighlight lang="javascript" inline>Status = "hoge";</syntaxhighlight> を記述しても、ポップアップメニューの項目を選択するかメニューをキャンセルするまで表示されない。 <syntaxhighlight lang="javascript"> // e.g. ポップアップメニュー表示までのマクロの処理時間をステータス表示させる // 計測開始 ※ ソースコードの先頭付近におくこと var start = new Date(); // 文書の各論理行を配列におさめ、ポップアップメニュー項目に var ay = document.selection.GetActivePointY( mePosLogical ); var lineArray = document.Text.split( "\n" ); var menu = CreatePopupMenu(); for ( var i = 0, len = lineArray.length, y, flag; i < len; i ++ ) { y = i + 1; flag = ( y == ay ) ? meMenuChecked : 0; menu.Add( y + ": " + lineArray[i].slice( 0, 50 ), y, flag ); } // ステータスバーに処理時間を表示 Status = ( ( new Date() - start ) / 1000 ).toFixed( 3 ) + " 秒"; // ポップアップメニューを表示 var yy = menu.Track( mePosMouse ); // 選択した行に移動する if ( yy ) { document.selection.SetActivePoint( mePosLogical, 1, yy, false ); } </syntaxhighlight> : ※ ポップアップメニューにかぎらず、[[マクロリファレンス:Window インターフェイス#Alert メソッド|警告 (Alert)]] や [[マクロリファレンス:Window インターフェイス#Confirm メソッド|確認 (Confirm)]]、 [[マクロリファレンス:Window インターフェイス#Prompt メソッド|入力 (Prompt)]] ダイアログなどモーダルなポップアップウインドウを表示させる場合も、同様に <syntaxhighlight lang="javascript" inline>Status = "hoge";</syntaxhighlight> を先に記述する必要がある。 : ※ Mery メインウインドウのメニューバー項目のような、マウスホバーで動的にステータス表示を変更させる制御はできない。 ==== 配列からポップアップメニューを生成 ==== [https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Loop_Statements/for_Statement for 文] などの [https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Loop_Statements/ ループ処理] によって配列からポップアップメニューのアイテムを生成する場合に、[[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|PopupMenu.Add() メソッド]] の第二引数 '''id''' (※通常は 1 ~ )と配列のアイテムのインデックス '''[ i ]''' の値(※通常は 0 ~ )を一致させたいときは、配列の先頭にダミーまたは空の要素を置いておき、ループ処理の開始インデックスを 1 にする。 <syntaxhighlight lang="javascript"> var a = new Array( "" ); // 先頭に空のダミー要素を入れておく a.push( "あああ" ); a.push( "いいい" ); a.push( "ううう" ); // a = [ "", "あああ", "いいい", "ううう" ] となる var menuA = CreatePopupMenu(); for ( var i = 1; i < a.length; i ++ ) { // 開始値を var i = 1 にすると menuA.Add( a[i], i ); // Id を ( i + 1 ) にする必要がない } var numA = menuA.Track( mePosMouse ); // c.f. 空要素なしの配列 [ "あああ", "いいい", "ううう" ] をループ処理する場合 var b = [ "あああ", "いいい", "ううう" ]; var menuB = CreatePopupMenu(); for ( var i = 0; i < b.length; i ++ ) { menuB.Add( b[i], i + 1 ); // Id を 1 ~ にするには ( i + 1 ) } var numB = menuB.Track( mePosMouse ); </syntaxhighlight> ==== サブメニュー ==== サブメニューを組みこむ場合、通常はそれぞれの PopupMenu オブジェクトをあらかじめ宣言しておくものだが、[[マクロリファレンス:PopupMenu インターフェイス#AddPopup メソッド|PopupMenu.AddPopup() メソッド]] 内の第二引数で定義することもできる。 [[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|PopupMenu.Add() メソッド]] が大量に並んでいる項目群の一部をサブメニュー化して整理したくなったときなどに、サブメニューオブジェクトの宣言行を用意しなくて済むので便利である。 サブメニューを多重に含むコードの場合、字下げ(インデント)を活用することで、メニューの階層構造を把握しやすくできる。 <syntaxhighlight lang="javascript"> var mainMenu = CreatePopupMenu(); mainMenu.Add( "アイテム1", 1 ); mainMenu.AddPopup( "サブメニュー1", subMenu1 = CreatePopupMenu() ); subMenu1.Add( "アイテム2", 2 ); subMenu1.AddPopup( "サブメニュー2", subMenu2 = CreatePopupMenu() ); subMenu2.Add( "アイテム3", 3 ); var r = mainMenu.Track( 0 ); Alert( r > 0 ? mainMenu.GetText( r ) : "キャンセル" ); </syntaxhighlight> * 配列やオブジェクトからポップアップメニューの生成をするときにサブメニューを利用する場合、あらかじめサブメニューのラベルや各要素の振り分け方が決まっていれば難しいことはないが、<span style="color:#c00;">要素が不定数の配列やオブジェクトを複数のサブメニューに振り分けるのは簡単ではない…。</span> : → 組み込み関数「[[ポップアップメニューを手軽に扱う]]」や「[[階層化マクロメニュー]]」マクロなどのソースコードを参考にして自力でコードを組むか、組み込み関数「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する]]」で一定数ごとにサブメニュー項目を自動生成して要素を放り込むしかない。 : ※ 自動分割サブメニューのページに「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する#サンプルコード2|サンプルコード2]] (簡易版)」を追加した。 : 「[[ポップアップメニューを「n*十件ずつ」のサブメニューに自動分割する#サンプルコード1|サンプルコード1]]」の組み込み関数ではサブメニューオブジェクト専用の配列 smArray を用意して <code>smArray.push( CreatePopupMenu() );</code> → <code>menu.AddPopup( label, smArray[ smId ] );</code> としているが、サンプルコード2のようにループ処理内で <code>subMenu = CreatePopupMenu();</code> を使いまわしするだけでも新規のサブメニューアイテムを生成できるようだ。 * [[マクロリファレンス:PopupMenu インターフェイス#AddPopup メソッド|PopupMenu.AddPopup() メソッド]] では [[マクロリファレンス:PopupMenu インターフェイス#Add メソッド|Add() メソッド]] の第三引数(''meMenuChecked, meMenuGrayed, meMenuSeparator'')は使用できない。 : サブメニュー内のすべてのアイテムが無効(グレーアウト)になる条件でも、サブメニュー見出しを無効化することはできないので、サブメニュー見出しが表示されなくなるように(またはグレーアウトされるように) <code>PopupMenu.AddPopup()</code> 周りを [https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#if...else_statement if() 文] で囲うしかない(※ メニューの階層構造が複雑な場合に、ソースコードが見づらくなってしまうが…)。 <syntaxhighlight lang="javascript"> // e.g. 編集モードが Text ならサブメニューを表示する // ※ Text 以外ならグレーアウトさせた "サブメニュー" アイテムを表示 var menu1 = CreatePopupMenu(); var menu2 = CreatePopupMenu(); if ( document.Mode == "Text" ) { menu1.AddPopup( "サブメニュー", menu2 ); menu2.Add( "アイテム2", 2 ); } else { menu1.Add( "サブメニュー", 0, meMenuGrayed ); } menu1.Add( "アイテム1", 1 ); var r = menu1.Track( mePosMouse ); </syntaxhighlight> : また、上出の「自動分割サブメニュー」の組み込み関数を制作するさい、チェックつきアイテムを含むサブメニュー見出しにもチェックを付けられるようにしたかったが、これも無理だった。 :: → サブメニューオブジェクトを <code>AddPopup()</code> する前に孫アイテムを <code>Add()</code> しておき、チェックつきアイテムを含むかどうかの条件文でサブメニューオブジェクトのラベルを生成(サブメニューラベルの先頭に "'''*'''\t" や "'''✔'''" などを付加)してから <code>AddPopup()</code> することはできるが、 ''meMenuChecked'' とおなじチェックマークをつけられるわけではないので、コードが煩雑になるわりにあまり報われない努力となる…。 ==== マクロの動作設定を変更可能にする ==== 拙作マクロは、ポップアップメニューを使うものにかぎらず動作設定用の項目が多い。 ポップアップメニューマクロでないものは、通常、頻繁に動作設定を弄る必要はないが、sukemaru 好みの動作方式は一般的嗜好と合致しないであろうことから公開用のマクロにするにあたってカスタマイズ可能な「設定項目 (変数)」にして調整しなおすことが多い…。 <span style="color:#0000c0;"> ポップアップメニューマクロであれば、メニュー項目から動作設定をカスタマイズできるようにコーディングすることができる。</span> * まず、[[利用者:Masme|masme]] 氏の「[[行並べ替え]]」や「[[連番を挿入]]」マクロのように、[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/do...while do ... while() 文] によるループを利用して、動作設定の既定値を何度も書き換えながらポップアップメニューを再描画する方法がある。 : <s>動作設定の変更内容はマクロの完了時に破棄されてしまうので、</s> 同じマクロを連続して利用することが多いならば、マクロメニューの [[ヘルプ:マクロ#編集|編集]] コマンドからソースコードを開いて、初期設定項目(変数)の既定値を書き換えておくとよい。 * sukemaru の場合は、「[[ポップアップメニューで検索先にジャンプ#include版|検索ジャンプ]]」「[[ブックマーク一覧ジャンプ#include版|ブックマークジャンプ]]」や「[[ファイルを読み直す・開きなおす#include版|読みなおし]]」マクロなどで、【include 版】と称するものを作っている。 : これらにおいては、[[includeライブラリ]] の IO クラス(IO.js)の関数メソッド <code>IO.Serialize() / IO.Deserialize()</code> を利用して、ポップアップメニュー内の「設定変更」サブメニューから変更した [[#外部ファイルにマクロの設定などを書き出す|設定値を外部ファイル(JSON ファイル)に保持]] できるようにしている。 : カスタマイズしながら実行するのも、カスタマイズした動作設定を維持したままでままで再実行するのも容易にはなったが、コードが煩雑になって他のマクロに流用しづらくなってしまっている…。 : ※ 非 include 版では、「設定変更」サブメニューや masme 氏のマクロのような処理コードは入れず、動作設定の変更方法はソースコードの変数の値の書き換えのみとしている。 ==== GetKeyState.exe の活用 ==== pizz 氏作成の「[[GetKeyState.exe(キー状態取得実行ファイル)]]」を使うと、マクロ実行(開始)時の修飾キーの押し下げ状態でポップアップメニューに表示する項目を変化させたり、メニュー内のアイテムを選択(クリック)するときの修飾キーの押し下げ状態で実行するコマンドを変化させることができる。 マクロ開始時に仕込むとショートカットキーの割りあて方が制限されたり、メニュー表示までにタイムラグが生じてしまうこともあるが、アイテム選択後のコマンド実行時に仕込めばあまり問題にならない。 ※ ただし、Mery のポップアップメニューは <kbd>Alt</kbd> キーでキャンセルされてしまうので、ポップアップメニュー内のコマンド実行用に仕込めるのは <kbd>Ctrl</kbd> か <kbd>Shift</kbd> キーにかぎられる。 : ref. [[GetKeyState.exe(キー状態取得実行ファイル)#実装例|GetKeyState.exe の実装例: サンプルコード3]]
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
利用者ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク