HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1020
太田mesboxとnotesel2解決


太田

リンク

2007/10/20(Sat) 21:15:44|NO.11826

こんばんわ、阿部さんが質問していたスレのを
参考にスクリプトを組んだのですが


#define EM_SETSEL $b1 #define EM_REPLACESEL $C2 sdim s,1000 sdim msg mesbox s,300,100,0:hEdit = objinfo(stat,2) input msg,200,20,48 button gosub "入力",*send stop *send notesel s bstr= noteinfo (0) // 行数を調べる if bstr>19:notedel 0 sendmsg hEdit,EM_SETSEL,strlen(s),-1 sendmsg hEdit,EM_REPLACESEL,0,msg+"\n" return

mesboxの行数が20を越すと0行目を消すようにしているのですが
これだとmesboxが変わらないので


*send notesel s bstr= noteinfo (0) // 行数を調べる if bstr>19:notedel 0 objprm 0,"" sendmsg hEdit,EM_SETSEL,strlen(s),-1 sendmsg hEdit,EM_REPLACESEL,0,s+msg+"\n" return

としてみたのですが、これだとobjprmでちらついてしまいます
どうすれば、行数を越えると最初の行を消し、ちらつかせず
mesboxのスクロールバーを下にすることができるでしょうか



この記事に返信する


t.hamaguchi

リンク

2007/10/21(Sun) 14:53:55|NO.11846

objprmで全部を更新するのではなく、必要な部分だけ更新してみてはいかがでし
ょう(この場合は先頭の行と終わりの行)。
ついでにWindowsの更新領域も制御すると効果的です。それでも頻繁に更新すると
ちらつきますが...(^_^;

#uselib "user32" #func InvalidateRect "InvalidateRect" int,int,int #define WM_SETREDRAW $0000000B #define EM_SETSEL $000000B1 #define EM_SCROLLCARET $000000B7 #define EM_LINEINDEX $000000BB #define EM_REPLACESEL $000000C2 #const null 0 #const false 0 #const true 1 sdim s, 1000 sdim msg mesbox s, 300, 100, 0 hEdit = objinfo(stat, 2) input msg, 200, 20, 48 button gosub "入力", *send stop *send ; 再描画フラグをoff sendmsg hEdit, WM_SETREDRAW, false, 0 ; 行末に1行追加 len = strlen(s) sendmsg hEdit, EM_SETSEL, len, len sendmsg hEdit, EM_REPLACESEL, false, msg +"\n" ; 20行以上なら1行目を削除 notesel s if noteinfo(0) > 19 { sendmsg hEdit, EM_LINEINDEX, 1, 0 sendmsg hEdit, EM_SETSEL, 0, stat sendmsg hEdit, EM_REPLACESEL, false, "" } noteunsel ; 再描画フラグをon & 再描画 sendmsg hEdit, WM_SETREDRAW, true, 0 InvalidateRect hEdit, null, true ; 行末に移動 len = strlen(s) sendmsg hEdit, EM_SETSEL, len, len sendmsg hEdit, EM_SCROLLCARET, 0, 0 return



太田

リンク

2007/10/21(Sun) 15:15:43|NO.11848

なるほど、sendmsgでWindowsを制御するんですか
参考になりました、有り難うございます



ONION software Copyright 1997-2023(c) All rights reserved.