scroll в RichTextBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

scroll в RichTextBox

Сообщение 13GHOST » 07.01.2007 (Вс) 11:13

следующая проблема: имеетя RichTextBox с вертикальным скролом. при добавлении текста в него используется - RichTextBox.selstart = len(RichTextBox). При этом скрол сам мотается в самый конец, что не желательно бы! :( Сделал следующее:
Код: Выделить всё
SendMessage RichTextBox.hwnd, EM_GETSCROLLPOS, 0, pt
RichTextBox.selstart = len(RichTextBox)
SendMessage RichTextBox.hwnd, EM_SETSCROLLPOS, 0, pt

Впринципе проблема исчезла, но теперь появляются "мерцания" при каждом добавлении текста, т.е. скролл сначало едет в самый конец, потом обратно. Дак вот... я хотел спросить можно ли какнибудь совсем заблокировать скролл чтобы он совсем не ездил??

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.01.2007 (Вс) 11:25

следующая проблема: имеется число, к которому я прибавляю 10. При этом число увеличивается на 10, что не желательно бы! :( Сделал следующее:
Код: Выделить всё
t = a
a = a + 10
a = t

Впринципе проблема исчезла, но теперь появляются "мерцания"...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 07.01.2007 (Вс) 11:26

:))
ну как можно добавить текст чтобы скрол не проматывался?? :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.01.2007 (Вс) 11:33

.text = .text & "text"
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 07.01.2007 (Вс) 12:04

но я же добавляю текст в формате Rich, там необходимо изменять сво-ва шрифта:
RichTextBox.selstart = len(RichTextBox)
RichTextBox.selbold = true
RichTextBox.seltext = "text"
к примеру во многих чатах ведь как то же это реализована, т.е. отключается автоматич. прокрутка текста

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.01.2007 (Вс) 13:14

LockWindowUpdate спасет отца русской демократии :)

Код: Выделить всё
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long

Private Sub AddText(NewText As String, Optional Italic As Boolean = False, Optional Bold As Boolean = False)
    With rtbMain
        LockWindowUpdate .hWnd
       
        .SelStart = Len(rtbMain.Text)
       
        If Italic = True Then .SelItalic = True
        If Bold = True Then .SelBold = True
       
        .SelText = NewText
       
        .SelStart = 0
       
        LockWindowUpdate False
    End With
End Sub

Private Sub cmdAddItalic_Click()
    AddText "Some Italic text..." & vbCrLf & vbCrLf, True
End Sub

Private Sub cmdAddBold_Click()
    AddText "Some Bold text..." & vbCrLf & vbCrLf, , True
End Sub

13GHOST
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 305
Зарегистрирован: 09.01.2004 (Пт) 12:48

Сообщение 13GHOST » 07.01.2007 (Вс) 16:18

Amed в точку немного модернизировал и как раз получил то что хотел! Большое спасибо!

Код: Выделить всё
Private Sub AddText(NewText As String, Optional Italic As Boolean = False, Optional Bold As Boolean = False)
    Dim t As Long
    With rtbMain
        LockWindowUpdate .hwnd
        FirstVisibleLine = SendMessage(.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
        FirstChar = SendMessage(.hwnd, EM_LINEINDEX, FirstVisibleLine, ByVal 0&)

        .SelStart = Len(rtbMain.Text)
       
        'If Italic = True Then .SelItalic = True
        'If Bold = True Then .SelBold = True
       
        .SelText = NewText & vbCrLf

        .SelStart = FirstChar
       
        LockWindowUpdate False
    End With
End Sub

Private Sub Command1_Click()
AddText "Some Italic text...", True
End Sub


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 73

    TopList