2008年5月31日土曜日

第96回目 QXマクロの紹介(その7)

○第96回目 QXマクロの紹介(その7)
 ※QXマクロは、QXエディタ(テキストエディタ)で使用されるマクロのことです。
  QXマクロでは、全角スペースはデータ以外は認められていません。コピーして使う場合は、必ず半角スペースに変えてください。

 今回はこれを取り上げます。
 9.この文書の全文を別の文書のある部分にコピーしたい
 10.この文書のこの部分を別の文書のある部分にコピーしたい

 QXエディタはタブ形式です。ですから複数のファイルを一つのウィンドウで同時に開いておくことが出来ます。

 あるファイルのすべてを、別のファイルのカーソルのある位置にコピーします。トランザクションを別のファイルで作っておいて、完成後、メインのマスターに追加するという感じの処理というのでしょうか。

 意外とこれがスムーズに運びストレスを感じません。
 通常の作業で行なうと、
 1.Ctrl+A  すべてを選択
 2.Ctrl+C  コピー
 3.Ctrl+W(該当するウィンドウに移る。QXでは常に二つのウィンドウを認識している。それ以外の別のファイルへの移動は、Alt+W+番号となります)
 4.Ctrl+V  貼り付け
 です。
 これが同じ条件で、
 TAB+Aで終ります。(ショートカットキー化されています)

 本当に必要なのは一部をコピーすることだともいますが、これも比較すると
 範囲を指定し、TAB+X
 で終ります。(ショートカットキー化します)

 前者は後者に含まれますので、最終的には一つのマクロとなります。
 範囲が選択されていない=⇒全文コピー
 範囲が選択されている =⇒その範囲をコピー

 現在は、用途の関係から、それぞれ別マクロとし、更に後者を更に分けています。
 つまり、後者のほうを、
 範囲が選択されていない=⇒特殊記号に挟まれた部分をコピー
 範囲が選択されている =⇒その範囲をコピー
 としています。
 これは、辞書的なファイルを作っている関係から必要となったものです。
 一つの項目が○から始まり、次の○の直前で終わる。
 これを単位として、コピーするというものです。
 コピーしたい範囲内にカーソルがあれば実行できるので、非常に便利です。
 気持ちよくいく、という感性的な快感を重要視したものです。

 では単純な全コピーから。
if @hwnd = 0 then exit proc
@BlockSelectAll
@BlockClipboardCopy
@WindowChange 'QXエディタで現在認識されている別のファイルに移動
@BlockClipboardPaste
 でおしまいです。
 直前に表示されていたウインドのカーソルのあるところにコピーされます。

 では後者の場合です。
 まずは選択されているかどうかの判断です。
 '選択されているかどうかを取得
sel_md=@Select '0は選択されていません。
if sel_md=0 then

 選択されている場合は、
@BlockClipboardCopy 以下を実行すればいいことになります。

 選択されていない場合は、
 範囲を指定して、
@BlockClipboardCopy 以下を実行すればいいことになります。

 範囲指定は…。
 頭は、
'区切り語を上に向かって検索する。
@@FindAddString "^" & rr$,0  'rrは○です。"^"が付くことで先頭のものだけを検索します
@SearchRepeatUp
if @@SearchFound=0 then exit proc
'ブロック選択開始
@BlockSelect
 最後は、
'区切り語を下に向かって検索する。
@@FindAddString "^" & rr$,0
@SearchRepeatDown
'区切り語がなかった場合、行末にいく
if @@SearchFound=0 then
@MoveFileBottom
@MoveBeginningLine
end if
'クリップボードにコピー
@BlockClipboardCopy
 と続きます。

 感覚的に、操作がスムーズにいったという感じが必要だと思います。そのとおりの感じを受けるはずです。
 
 次に、機能拡大をすべき事項は、ウィンドウの選択です。現在は、直前表示されていたウィンドウに対して張り付けるということですが、これを、任意のウィンドウに、任意のカーソルの場所に貼り付けられるということです。
 いろいろ研究した結果、それほど難しくはないことがわかりました。
 次回、確認の結果、整理して紹介します。

※今回紹介したのは一つのかたちです。やっていくともっとということになり、それに対応していくと更に便利になります。
 考えられるアイデアとしては、区切り記号を入力するようにすることです(一部をメニュー化し、それ以外は入力することも考えられる)。これによって一つのエクセルマクロを簡単な操作でクリップボードにコピーすることができます(区切り記号はSubとなる。その後の操作は、エクセルのモジュールのウィンドウに移動して、Ctrl+Vで貼付けてください)。

0 件のコメント: