tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
2つリッチテキストボックスのスクロールの同期を取る(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2012/04/04 08:53
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[リッチテキストボックス][][]                                    *
* キーワード:スクロールの同期を取る,表示位置,連動,トップ,揃える,                 *
***********************************************************************************

元質問:リッチテキストボックス同時スクロールにつ - 大久保  2003/11/04-11:58 No.6510

2つのリッチテキストボックスをマウスのスクロールボタンと連動して表示させたいのですが、
ずれてしまいます。ご教授お願い致します。
http://www.hanatyan.sakura.ne.jp/logbbs/wforum.cgi?mode=allread&no=6510&page=630#6510

------------------------------------------------------------------------------------
※ このサンプルでは行数が多かったりするとうまく動作しませんので改良版を下記の方に
  投稿しておきましたのでそちらをご利用下さい。

  http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=317

  2012/03/22
------------------------------------------------------------------------------------

※ 下記の元質問者の投稿コードは、元々、某出版社より発行されていたサンプル集のコードが
流出したものと思われます。ネット上で出回っている Tips の殆どが下記方式で同期を取って
います(EM_GETSCROLLPOS を使用した)が、同様に行数が多かった場合は同期しません。

これにより、このサンプル(下記元質問者のコード)は、使用しないようにして下さい。
同様に、EM_SETSCROLLPOS を使って同期を取っているようなコードは使用しないように。


Public Function WindowProc(ByVal hWnd As Long, _
                           ByVal uMsg As Long, _
                           ByVal wParam As Long, _
                           ByVal lParam As Long) As Long
  Dim lngResult As Long
  Dim lngwParam As Long
  Dim lngNowPos As Long
  
  Dim udtPoint                As tagPOINT
  Dim lngWin32apiResultCode   As Long
  
  Static flg As Boolean
  If flg = False Then
    flg = True
    Select Case uMsg
      Case WM_VSCROLL, WM_MOUSEWHEEL
        lngWin32apiResultCode = SendMessage(hWnd, EM_GETSCROLLPOS, 0, udtPoint)
        With Form1.RichTextBox2
         lngWin32apiResultCode = SendMessage(.hWnd, EM_SETSCROLLPOS, 0, udtPoint)
        End With
    End Select
    flg = False
  End If
  WindowProc = CallWindowProc( _
                    glngHwnd, hWnd, _
                    uMsg, wParam, lParam)
End Function


-------------------------------------------------------------------------------
Re^3: リッチテキストボックス同時スクロー.. - 花ちゃん 2003/11/09-08:53 No.6564
-------------------------------------------------------------------------------

どのような場合に、どのようにずれるのでしょうか?
一応試した限りでは問題ないようですが?

一度下記を試して見て下さい。
それとどのようにずれるのでしょうか?
明らかに、RichTextBox1 とRichTextBox2 のトップに表示される行が違うとか
RichTextBox2 の方が遅れて表示されるとか?
スクロールバーをスライドさせた場合とクリックした場合では違うとか、詳しい
症状を教えて頂けませんか。?
念のためOS等の環境(WinXP系だと思うのですが)とRichTextBoxのバージョン(結構違いに
より問題がありますので)



------------------------------------------------------------------------------------
※ このサンプルでは行数が多かったりするとうまく動作しませんので改良版を下記の方に
  投稿しておきましたのでそちらをご利用下さい。

  http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=317

  2012/03/22
------------------------------------------------------------------------------------

Option Explicit
Private Declare Function SendMessage Lib "user32" _
        Alias "SendMessageA" (ByVal hwnd As Long, _
        ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long
Private Const WM_USER = &H400
Private Const EM_SETSCROLLPOS = WM_USER + 222
Private Const EM_GETSCROLLPOS = WM_USER + 221
Private Type tagPOINT
    x As Long
    y As Long
End Type

Private Sub Command1_Click()
    Timer1.Interval = 150
    Timer1.Enabled = True
End Sub

Private Sub Command2_Click()
    Timer1.Interval = 0
    Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
    Dim udtPoint  As tagPOINT, Ret As Long
    Ret = SendMessage(RichTextBox1.hwnd, EM_GETSCROLLPOS, 0&, udtPoint)
    Ret = SendMessage(RichTextBox2.hwnd, EM_SETSCROLLPOS, 0&, udtPoint)
End Sub



 [スレッド一覧へ] [親スレッドへ]