config文によるフォント縮小が失敗するNo.05623
わっきー@茨城 さん 07/09/01 03:45
 
お世話になっております、わっきーです。
秀丸エディタのフォーラムとどちらに投稿すればよいのか少々迷ったのですが、マク
ロのお話ということでこちらにご報告させていただきます。

先日config文を使用した一時的なフォントサイズ変更(+復帰)のマクロを上げさせ
ていただきましたが、フォント縮小動作の挙動で不思議な動きをする点がありました。
(Windows XP Home sp2、秀丸エディタVer6.14&7.00 B22 で確認)

<再現手順>
1.以下の2つのマクロファイルを用意します。

// big.mac 一時的にフォントサイズを拡大
#FontSz = fontsize + 1;
if( 50 < #FontSz ) #FontSz = 50;
config "s" + str( #FontSz );
endmacro;

// small.mac 一時的にフォントサイズを縮小
#FontSz = fontsize - 1;
if( #FontSz < 8 ) #FontSz = 8;
config "s" + str( #FontSz );
if( fontsize != #FontSz ) message( str(fontsize) );
endmacro;

2.ファイルを新規作成し、AAA と入力して test.txt で保存。

3.big.mac を文字サイズが変化しなくなるまで実行。(フォントは拡大されていく)

4.次に small.mac を繰り返し実行。(フォントは縮小されていく)

5.途中でポップアップメッセージで "33" が表示され、それ以降はフォントサイズ
に変化がなくなる。


上記動作は拙作の FontZmIn.mac / FontZmOut.mac でも再現可能なのですが、何故か
手順5の段階で FontZmRest.mac を実行すると初期サイズに復帰できてしまいます。
また、縦書きモード表示に切り替えて上記手順を行うと更に動作はあやしくなり、手
順4に移った後フォントは縮小せずにそのまま拡大されてしまいます。


以上、よろしくお願いいたします。

[ ]
RE:05623 config文によるフォント縮小が失No.05624
h-tom さん 07/09/01 08:15
 

h-tom です。

>お世話になっております、わっきーです。
>秀丸エディタのフォーラムとどちらに投稿すればよいのか少々迷ったのですが、マク
>ロのお話ということでこちらにご報告させていただきます。
マクロの話だけど、不具合と思うなら「秀丸エディタ&関連ソフトサポート会議室」
に投稿するべきだと思う。こっちだと担当さんが気がつかない場合もあるし。

で、フォントがらみの話の場合、使っているフォントが何か書いた方がいい。
フォントを変えると、どうなるかも書いてあると、さらにいいかも。

ちなみに、
>5.途中でポップアップメッセージで "33" が表示され、それ以降はフォントサイズ
>に変化がなくなる。
横書き、MSゴシックだと問題なし。リミットの8までいく。
(Ver.7.00β22 Windows2000SP4)

>また、縦書きモード表示に切り替えて上記手順を行うと更に動作はあやしくなり、手
>順4に移った後フォントは縮小せずにそのまま拡大されてしまいます。
これは、仕様っぽい気がするけどね。
拡大(増加)時でも、指定した値になっていない。大きなサイズになると設定値より、
大きなfontsizeにセットされている。
 最大値の50時、fontsizeは52
 52-1=51をセットすると、fontsizeは53
表示上(処理の都合上?)問題のない値に、補正しているからじゃないのかな?

マクロで対処するなら、config後の結果を見て、再補正するとか?

[ ]
RE:05624 config文によるフォント縮小が失No.05625
わっきー@茨城 さん 07/09/01 11:49
 
>h-tom です。
>
> マクロの話だけど、不具合と思うなら「秀丸エディタ&関連ソフトサポート会議室」
> に投稿するべきだと思う。こっちだと担当さんが気がつかない場合もあるし。

そうですね。
ただ、h-tom さんの投稿を拝読したところ秀丸エディタの仕様かつマクロ側で対応で
きそう
なので急がなくてもよさそうです。


> で、フォントがらみの話の場合、使っているフォントが何か書いた方がいい。
> フォントを変えると、どうなるかも書いてあると、さらにいいかも。

デフォルト設定のMSゴシックです。
ちなみに、さきほどMS Pゴシックに設定してやってみましたが動作は同じでした。


>ちなみに、
>> 5.途中でポップアップメッセージで "33" が表示され、それ以降はフォントサイズ
>> に変化がなくなる。
>横書き、MSゴシックだと問題なし。リミットの8までいく。
>(Ver.7.00β22 Windows2000SP4)

Windows2000の環境は外出先で試せるので確認してみます。


>> また、縦書きモード表示に切り替えて上記手順を行うと更に動作はあやしくなり、手
>> 順4に移った後フォントは縮小せずにそのまま拡大されてしまいます。
> これは、仕様っぽい気がするけどね。
> 拡大(増加)時でも、指定した値になっていない。大きなサイズになると設定値より、
> 大きなfontsizeにセットされている。
>  最大値の50時、fontsizeは52
>  52-1=51をセットすると、fontsizeは53
> 表示上(処理の都合上?)問題のない値に、補正しているからじゃないのかな?
>
> マクロで対処するなら、config後の結果を見て、再補正するとか?

ありがとうございます、拡大時の値はノーマークでした…。
config文はシステムに素直に値を渡しているわけではないということみたいですね。

いろいろ試行した結果、マクロの最後に以下の補正を入れたらなんとかなりました。
(縦書きも3回補正することで縮小処理ができました)

// 縮小時のフォントサイズの補正
#Cnt = 0;
while( #Cnt < 3 )
{
    if( #FontSz <= fontsize  )
    {
        #FontSz = #FontSz - 1;
        config "s" + str( #FontSz );
    }
    else
    {
        goto EXIT;
    }
   
    #Cnt = #Cnt + 1;
}

EXIT:
endmacro;

[ ]
RE:05625 追記No.05626
わっきー@茨城 さん 07/09/01 12:08
 
> いろいろ試行した結果、マクロの最後に以下の補正を入れたらなんとかなりました。
> (縦書きも3回補正することで縮小処理ができました)
>
> // 縮小時のフォントサイズの補正
> #Cnt = 0;
> while( #Cnt < 3 )
> {
>     if( #FontSz <= fontsize  )
>     {
>         #FontSz = #FontSz - 1;
>         config "s" + str( #FontSz );
>     }
>     else
>     {
>         goto EXIT;
>     }
>    
>     #Cnt = #Cnt + 1;
> }
>
> EXIT:
> endmacro;

上記補正はリミッター処理がかかると後確実にwhile文を3回踏んでしまうので、
もう少しスマートな形になるようにしたほうがよいみたいですね。
(結果的には問題はないのですが)

[ ]
RE:05626 追記No.05627
h-tom さん 07/09/01 13:04
 

h-tom です。

>上記補正はリミッター処理がかかると後確実にwhile文を3回踏んでしまうので、
>もう少しスマートな形になるようにしたほうがよいみたいですね。
>(結果的には問題はないのですが)
こっちで改造してみたマクロ。参考にして下さい。

// small.mac 一時的にフォントサイズを縮小
//debuginfo 1;
#FontSz = fontsize - 1;
if( #FontSz < 8 ) endmacro;
disabledraw;
//debuginfo "設定値   #FontSz:" + str(#FontSz) + " fontsize:" + str(fonts
ize) + "\n";
config "s" + str( #FontSz );
//debuginfo "設定後の値 #FontSz:" + str(#FontSz) + " fontsize:" + str(fonts
ize) + "\n";
//目標値より大きい場合
if(fontsize > #FontSz){
    //#FontSz  目標値
    //#FontSz_1 設定値
    #FontSz_1 = #FontSz;
    while(true){
        //目標値以下になるまでループ
        if( #FontSz >= fontsize )break;
        #FontSz_1 = #FontSz_1 - 1;
        config "s" + str( #FontSz_1 );
//        debuginfo "補正後の値 #FontSz:" + str(#FontSz) + " fontsize:" + s
tr(fontsize) + " #FontSz_1:" + str(#FontSz_1) + "\n";
    }
//    debuginfo "補正結果  #FontSz:" + str(#FontSz) + " fontsize:" + str(f
ontsize) + "\n";
}
enabledraw;
endmacro;

[ ]
RE:05627 追記No.05628
わっきー@茨城 さん 07/09/01 14:10
 
ありがとうございます、参考にさせていただきます。
ちなみに先ほどWindows2000での動きを確認しました。
たしかに横書きの場合問題なく縮小できますね。

[ ]