投稿日 | : 2005/03/22(Tue) 01:29 |
投稿者 | : kuro3 |
Eメール | : |
URL | : |
タイトル | : Re^3: チラツキ防止(修正分) |
花ちゃんさんへ
kuro3です。
私なりにがんばってみたのですが、行き詰ってしまい、また返信させていただきました。
紹介させていただいた方法を用いてみたのですが、何点か課題が沸いて発散中です。
1)SendKeys "+{DOWN " & i & "}"の処理を行っているときに、
リッチテキストボックスの内容の選択部分が反転処理され、
ちらついてしまいました。
また、この部分の処理にそれなりに時間がかかってそうな印象をうけました。
2)SendKeys "{DELETE}"にて削除する後に、
カレットを最終に移動したくて.SelStart = 2147483647を実行すると
SendKeys "{DELETE}"の処理がキャンセルしてしまいました。
処理自体は早くなってうれしいのですが、まだ理解しきれていないところがあり
恐縮ですが、アドバイスいただけないでしょうか。
特にまだ、SendKeys をAPIでやる方法にたどりつけていないのでAPI制御に変えただけで、
直るような内容でしたら非常に申し訳ありません。
参考に今回教えていただいた内容をもとに組んだソースを添付させていただきます。
Private Sub Timer1_Timer()
'受信文字がないときはなにもしない
'10msecで5行くらい増えることがあり。
'インターバルは10msecで設定
If RS_recv = "" Then 'RS_recv は受信バッファです
Exit Sub
End If
Dim strtmp As String
Dim MaxRow As Integer
Dim logbufRow As Long
On Error GoTo HELL
strtmp = RS_recv
RS_recv = ""
Moni_Text.SelStart = 2147483647
Moni_Text.SelText = Replace(strtmp, Chr(&HD), vbCrLf)
RS_recv = ""
'総行数を取得する
MaxRow = SendMessage(Moni_Text.hwnd, EM_GETLINECOUNT, 0&, 0&)
'いらない行数をチェックする。
If MaxRow >= logbuf_max.Text + 1 Then '505行を超えたら処理開始
logbufRow = logbuf.Text + 1
senddel = 1 'delキーを一時的に使えるように
With Moni_Text
.SetFocus
.SelStart = 0
SendKeys "+{DOWN " & (MaxRow - logbufRow) & "}" '500行を超えた分で処理
SendKeys "{DELETE}"
'.SelStart = 2147483647 '左記を実行するとDELがキャンセルされる。
End With
End If
Exit Sub
HELL:
MsgBox ("エラー
End Sub