フォルダの並び替えをNo.33239
MISONO さん 08/02/06 13:43
 
フォルダ枠のフォルダの並び替えはD&Dで可能ですが、マウスの右クリックメニュー
に「上へ移動」とか「下へ移動」というようなメニューとしても追加していただけな
いでしょうか?またそのコマンドをキー割り当てできるようにしていただけるとひじ
ょうに助かります。


[ ]
RE:33239 フォルダの並び替えをNo.33240
秀まるお2 さん 08/02/06 14:19
 
 とりあえず、今現在選択しているフォルダを上または下に移動するマクロを
作ってみました。それを使って欲しいです。

 実行すると「上に移動」および「下に移動」っていうメニューが出てくるの
で、それの好きな方を選択すると移動します。

 アカウントも移動出来ます。

 移動出来るのは、あくまで同じ兄弟レベルの中での上下関係だけです。


    loaddll "tkinfo.dll";
    $home = dllfuncstr("HomeDir");
    $account = dllfuncstr("CurrentAccount");
    $folder = dllfuncstr("CurrentFolder");
    if( $folder == "" ) {
        $path = $home + "subdir.bin";
        $base = $account;
    } else {
        #xBase = 0;
        #x = 0;
        while( midstr( $folder, #x, 1 ) != "" ) {
            if( midstr( $folder, #x, 1 ) == "\\" ) {
                #xBase = #x + 1;
            }
            #x = #x + 1;
        }
        if( #xBase == 0 ) {
            message "移動出来ません。";
            endmacro;
        }
        $parent = $home + $account + "\\" + leftstr( $folder, #xBase );
        $base = midstr( $folder, #xBase, 999 );
        $path = $parent + "subdir.bin";
    }
    if( ! existfile( $path ) ) {
        message $path;
        message "移動出来ません。";
        endmacro;
    }
    menu "上に移動", "下に移動";
    #result = result;
    if( #result == 0 ) {
        endmacro;
    }
    #n = dllfunc("NewMail");
    #n = dllfunc("SwitchHeaderView", 0);
    gofiletop;
    beginsel;
    gofileend;
    delete;
    insertfile $path;
    while(1) {
        searchdown2 $base;
        if( !result ) {
            message "エラーです。";
            endmacro;
        }
        if( x == 0 && linelen == strlen($base) ) {
            break;
        }
        right;
    }
    golinetop;
    beginsel;
    down;
    cut;
    if( #result == 1 ) {
        up;
        paste;
    } else {
        down;
        paste;
    }
    saveas $path;
    #handle = hidemaruhandle(0);
    #n = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;
    #n = dllfunc("RefreshFolder");

[ ]
RE:33240 フォルダの並び替えをNo.33241
MISONO さん 08/02/06 15:02
 

> とりあえず、今現在選択しているフォルダを上または下に移動するマクロを
>作ってみました。それを使って欲しいです。

あ、どうもすんません。そっか。ファイルにテキストでそういった情報は保管してあ
ったんですね。それをマクロで編集するということで。
・・・と、提示していただいたマクロを動かしてみましたが、ちょっとうまく動かな
かったんで私の方で直しました。下記参照。
    あとクリップボードを使いたくない場合は改良が必要ですね。あとでやってみま
す。改良した物は皆さんに使っていただければと思うので
マクロライブラリに出させていただきたいと思います。




    loaddll "tkinfo.dll";
    $home = dllfuncstr("HomeDir");
    $account = dllfuncstr("CurrentAccount");
    $folder = dllfuncstr("CurrentFolder");
    if( $folder == "" ) {
        $path = $home + "subdir.bin";
        $base = $account;
    } else {
        #xBase = 0;
        #x = 0;
        while( midstr( $folder, #x, 1 ) != "" ) {
            if( midstr( $folder, #x, 1 ) == "\\" ) {
                #xBase = #x + 1;
            }
            #x = #x + 1;
        }
        if( #xBase == 0 ) {
            message "移動出来ません。";
            endmacro;
        }
        $parent = $home + $account + "\\" + leftstr( $folder, #xBase );
        $base = midstr( $folder, #xBase, 999 );
        $path = $parent + "subdir.bin";
    }
    if( ! existfile( $path ) ) {
        message $path;
        message "移動出来ません。";
        endmacro;
    }
    menu "上に移動", "下に移動";
    #result = result;
    if( #result == 0 ) {
        endmacro;
    }
    #n = dllfunc("NewMail");
    #n = dllfunc("SwitchHeaderView", 0);
    gofiletop;
    beginsel;
    gofileend;
    delete;
    insertfile $path;
    gofiletop;
    while(1) {
        searchdown2 $base;
        if( !result ) {
            message "エラーです。";
            endmacro;
        }
        if( x == 0 && linelen == strlen($base) ) {
            break;
        }
        right;
    }
    golinetop;
    beginsel;
    down;
    cut;
    if( #result == 1 ) {
        up;
        paste;
    } else {
        down;
        paste;
    }
    saveas $path;
    #handle = hidemaruhandle(0);
    #n = dllfunc("SetMainWndTop");
    closehidemaruforced #handle;
    #n = dllfunc("RefreshFolder");

[ ]