SetTitleListTopIndexNo.45284
styth さん 13/11/08 15:33
 
loaddll "TKinfo.dll";
#n = dllfunc("SetTitleListTopIndex", 999999);

 を実行しても、メール一覧を一番下にスクロールしません。
 一覧表示でも、スレッド表示でも同じです。
 確認して頂けないでしょうか?
 使い方が間違っていたら、すみません。
 よろしくお願いします。

[ ]
RE:45284 SetTitleListTopIndexNo.45285
秀まるお2 さん 13/11/08 23:04
 
 今とりあえず簡単にテストしてみた限りはスクロールするようでした。スレッ
ド表示でも一覧表示でも大丈夫そうです。

 今度デバッガーでトレースして、何か関係するオプション類が無いか探してみ
ます。

[ ]
RE:45285 SetTitleListTopIndexNo.45286
styth さん 13/11/09 09:56
 
> 今度デバッガーでトレースして、何か関係するオプション類が無いか探してみ
>ます。
 よろしくお願いします。

 因みに

loaddll "TKinfo.dll";
#n = dllfunc("SetTitleListTopIndex", 0);
message str(#n);// …あ
#n = dllfunc("SetTitleListTopIndex", 999999);
message str(#n);// …い

 上記の様なマクロを実行したら、
 あ、では一番上にスクロールして、一番上のメールがアクティブにはなりませ
ん。メッセージは0を表示します。
 い、では元のメールに戻って、そこがアクティブです。メッセージは0を表示
します。

[ ]
RE:45286 SetTitleListTopIndexNo.45287
秀まるお2 さん 13/11/09 15:57
 
 ソースコードを見直したりトレースしたりもしてみたんですけど、特に何か設
定によってうまくいかない可能性はなさそうな気がします。

 そもそもですが、SetTitleListTopIndex関数は、現在選択してるメールを変化
させる命令じゃなくて、あくまでスクロールをさせるだけの命令です。その辺が
勘違いされてるような気がします。

 メール一覧のリストボックスの中での、その枠の中での一番上の行を、全体の
中での何行目にするかってことを指定するだけの関数になります。

 選択してる位置を変更するのはSetMailIndex関数になります。

 リストボックスの命令で言うと、SetTitleListTopIndex関数は、
LB_SETTOPINDEXってメッセージを送るのに相当し、SetMailIndex関数は、
LB_SETCURSELメッセージに相当します。(google検索するとその辺のことも出て
くると思います)

 SetTitleListTopIndex関数を呼び出しても、選択されてるメール自体は何も変
化せず、例えば1行目のメールが選択されてる状態でSetTitleListTopIndex関数
で一番下にスクロールさせても選択位置はそのままで、選択位置は画面上から消
えるような形になります。

 何かその辺の理解が違ってるだけじゃないでしょうか。

 ちなみにLB_GETTOPINDEXってメッセージもありますけども、それを使って、た
しかにスクロールしてるかどうか確認するマクロも作成が可能です。

#define LB_GETTOPINDEX          0x018E

 と定義されてるので、例えば、

    loaddll "tkinfo.dll";
    #list = dllfunc("TitleListWnd");
    #index_set = 0;
    while(1) {
        #n = dllfunc("SetTitleListTopIndex", #index_set);
        #index = sendmessage( #list, 0x018E, 0, 0 );
        question "現在の先頭位置は " + str(#index) + "\n\n中止=いいえ";
        if( result == no ) {
            break;
        }
        #index_set = #index_set + 1;
    }

 ってな具合のマクロを実行すると、1行ずつスクロールアップしていて、カウ
ントアップしていくことが確認出来るんじゃないかと思います。

[ ]
RE:45287 SetTitleListTopIndexNo.45288
styth さん 13/11/09 17:03
 
> そもそもですが、SetTitleListTopIndex関数は、現在選択してるメールを変化
>させる命令じゃなくて、あくまでスクロールをさせるだけの命令です。その辺が
>勘違いされてるような気がします。

> SetTitleListTopIndex関数を呼び出しても、選択されてるメール自体は何も変
>化せず、例えば1行目のメールが選択されてる状態でSetTitleListTopIndex関数
>で一番下にスクロールさせても選択位置はそのままで、選択位置は画面上から消
>えるような形になります。

> 何かその辺の理解が違ってるだけじゃないでしょうか。
 理解できました。


 #n = dllfunc("SetTitleListTopIndex", 0);
 message str(#n);// …あ

 で、「選択に成功した場合は1、失敗した場合は0を返します。」
 とのことなんですが、スクロールには成功していますが、返り値に0が返って
くるのは、どういうことなんでしょう?
 また、勘違いしていたら、すみません。

[ ]
RE:45288 SetTitleListTopIndexNo.45289
秀まるお2 さん 13/11/11 08:33
 
 返り値については、すみませんが間違ってました。

 LB_SETTOPINDEXの返り値をそのまま返してたので、成功したら0、失敗したら
LB_ERR(= -1)が返る作りになってしまってました。

 ヘルプの方か、ソースコードか、どちらか修正させていただきます。

[ ]
RE:45289 SetTitleListTopIndexNo.45290
styth さん 13/11/11 09:39
 
> ヘルプの方か、ソースコードか、どちらか修正させていただきます。
よろしくお願いします。
勘違いの元は、返り値に0が返ってくるので、おかしいな、と思いました。

[ ]