クリップボードの中身がBOX選択のコピーかNo.05932
緒方聡 さん 08/10/12 13:59
 
お世話になってます。

Ctrl+V を拡張するマクロを作成しています。
やりたいことは、Visual Studio や Eclipse のように
ペースト先にあわせて自動的にインデントすることで、
これはbeginclipboardreadとgetclipboardで実現できています。

ただし、BOX選択したテキストを貼り付ける場合は、
pasterectを呼び出したいのですが、現在のクリップボードに
あるテキストがBOX選択されたものかどうかを取得する術が
見当たりません。

大変お手数ですが、上記を判断する方法を
ご教示いただけないでしょうか。

[ ]
RE:05932 クリップボードの中身がBOX選択No.05933
h-tom さん 08/10/12 14:22
 

h-tom です。

>大変お手数ですが、上記を判断する方法を
>ご教示いただけないでしょうか。
hidesoft.4:05675 から始まるツリーを参照。

[ ]
RE:05933 クリップボードの中身がBOX選択No.05934
緒方聡 さん 08/10/12 18:09
 
h-tom さん,
ありがとうございます。
あらかじめこちらを検索すればよかったです。

IKKI さんの一度貼ってみるというアイディアは巧妙ですね。

サンプルとして書いてもらっていたサブルーチンは
選択範囲を解除してしまい、本当の貼り付けの動作に
影響を及ぼしてしまうので、以下のように修正しました。

IsBox:
    if (selecting) {
        ##selecting = true;
        if (rectselecting) {
            ##rectselecting = true;
        }
        ##seltopx = seltopx;
        ##seltopy = seltopy;
        ##selendx = selendx;
        ##selendy = selendy;
        escape;
    }
    ##orgx = x;
    ##orgy = y;
    paste;
    ##box = (x == ##orgx && y == ##orgy);
    undo;
    if (##selecting) {
        if (##orgx == ##seltopx) {
            if (##orgy == ##seltopy) {
                moveto ##selendx, ##selendy;
                if (##rectselecting) {
                    beginrect;
                } else {
                    beginsel;
                }
                moveto ##seltopx, ##seltopy;
                if (!##rectselecting) {
                    endsel;
                }
            } else {
                moveto ##selendx, ##seltopy;
                if (##rectselecting) {
                    beginrect;
                } else {
                    beginsel;
                }
                moveto ##seltopx, ##selendy;
                if (!##rectselecting) {
                    endsel;
                }
            }
        } else {
            if (##orgy == ##seltopy) {
                moveto ##seltopx, ##selendy;
                if (##rectselecting) {
                    beginrect;
                } else {
                    beginsel;
                }
                moveto ##selendx, ##seltopy;
                if (!##rectselecting) {
                    endsel;
                }
            } else {
                moveto ##seltopx, ##seltopy;
                if (##rectselecting) {
                    beginrect;
                } else {
                    beginsel;
                }
                moveto ##selendx, ##selendy;
                if (!##rectselecting) {
                    endsel;
                }
            }
        }
    } else {
        moveto ##orgx, ##orgy;
    }
    return ##box;

[ ]
RE:05934 クリップボードの中身がBOX選択No.05935
秀丸担当 さん 08/10/14 09:28
 

既に解決されたかもしれませんが、クリップボードの中身がBOX選択かどうかを
表すようなキーワードというのは無くて、正確にそのことを知る方法は無いです。

参考までに、もしDLLを使えるのであれば、
GetClipboardData( CF_DSPTEXT );
の中身が"BOX"という文字列であるかどうかで判断することができます。
この方法は公式にサポートしているわけではないですが、いままでずっと変わっ
ていないです。

[ ]