Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Синхронная прокрутка текстбоксов Добавлено: 13.07.04 16:59  

Автор вопроса:  @CyRax PTR | Web-сайт: basicproduction.nm.ru/ | ICQ: 204447456 
Что то не получается.
Нужно чтобы при прокрутке одного текстбокса прокручивались и остальные.
Пробовал через CallBack, но прокручиваются только если двигаешь мышью.

Вот код на всякий случай.

'Модуль
Private Const EM_SCROLL = &HB5
Private Const WM_VSCROLL = &H115

Public Text1_OldProc As Long, Text3_OldProc As Long, TxtPreCode_OldProc As Long
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
     ByVal hwnd As Long, _
     ByVal nIndex As Long, _
     ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" ( _
     ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, _
     ByVal msg As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = -4

Public Function TextBox_CallBack(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_VSCROLL And wParam < 2 Then
 LASMIDE.Text_AlignTopLines hwnd
End If
 If hwnd = LASMIDE.Text1.hwnd Then TextBox_CallBack = CallWindowProc(Text1_OldProc, hwnd, uMsg, wParam, lParam)
 If hwnd = LASMIDE.Text3.hwnd Then TextBox_CallBack = CallWindowProc(Text3_OldProc, hwnd, uMsg, wParam, lParam)
 If hwnd = LASMIDE.TxtPreCode.hwnd Then TextBox_CallBack = CallWindowProc(TxtPreCode_OldProc, hwnd, uMsg, wParam, lParam)
End Function

'Форма
Private Sub Form_Load()
 Text1_OldProc = SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf TextBox_CallBack)
 Text3_OldProc = SetWindowLong(Text3.hwnd, GWL_WNDPROC, AddressOf TextBox_CallBack)
 TxtPreCode_OldProc = SetWindowLong(TxtPreCode.hwnd, GWL_WNDPROC, AddressOf TextBox_CallBack)
End Sub

Function Text_TopLine(ByVal hwnd As Long) As Long
 Const EM_GETFIRSTVISIBLELINE = &HCE
 Text_TopLine = SendMessage(hwnd, EM_GETFIRSTVISIBLELINE, 0, ByVal 0)
End Function

Sub Text_AlignTopLines(ByVal hWnd_Action As Long)
 Dim AlignedTopLine As Long
 AlignedTopLine = Text_TopLine(hWnd_Action)
 If hWnd_Action <> Text1.hwnd Then Text_Scroll Text1.hwnd, AlignedTopLine
 If hWnd_Action <> Text3.hwnd Then Text_Scroll Text3.hwnd, AlignedTopLine
 If hWnd_Action <> TxtPreCode.hwnd Then Text_Scroll TxtPreCode.hwnd, AlignedTopLine
End Sub

Sub Text_Scroll(ByVal hwnd As Long, ByVal NewTopLine As Long)
 Dim Text_CurrLine As Long
 Text_CurrLine = Text_TopLine(hwnd)
 If Text_CurrLine = NewTopLine Then Exit Sub
 
 Const EM_SCROLL = &HB5
 Const SB_LINEDOWN = 1
 Const SB_LINEUP = 0
 
 Dim ScrollMsg As Long, ScrollCount As Long
 If Text_CurrLine < NewTopLine Then
    ScrollMsg = SB_LINEDOWN
    ScrollCount = NewTopLine - Text_CurrLine
 ElseIf Text_CurrLine > NewTopLine Then
    ScrollMsg = SB_LINEUP
    ScrollCount = Text_CurrLine - NewTopLine
 End If
 Dim Scrolling As Long
 For Scrolling = 1 To ScrollCount
    SendMessage hwnd, EM_SCROLL, ScrollMsg, 0
 Next Scrolling
End Sub

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #1
Добавлено: 13.07.04 20:06
Разобрался сам.

2 Админы.
Можете удалить эту тему. Она всё равно не несёт полезной информации. Конечно если вам не влом :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам