VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -