Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > связь полосы прокрутки с текстом, выводимым на фор


Автор: Buka1214 8.5.2013, 17:28
Задача почти конкурсная ряд форумов решить ее не могут.
Я самоучка и, видимо, что-то пропускаю в учебниках, либо учебники барахло, поэтому просьба ответ дать в виде кода с комментариями. Необходимо решить именно эту задачу, а не искать обходных путей типа ListBox, TextBox, Grid и т. д.
Суть:
В Microsoft Visual Basic 6.0 на форму в цикле командой Print выводится текст более чем в 100 строк. Установлена полоса прокрутки и ее свойства. При перемещении движка текст не перемещается. При щелчке на полосе прокрутке выводится процедура
Private Sub VScroll1_Change()

End Sub
Видимо в нее надо что-то вставить или как-то связать полосу прокрутки либо с формой, либо с текстом. Вставка Form1 = VScrollBar.Value не помогла.
Как перемещать текст при перемещении движка полосы прокрутки?

Автор: Akina 8.5.2013, 20:35
Цитата(Buka1214 @  8.5.2013,  18:28 Найти цитируемый пост)
что-то пропускаю в учебниках

Именно. Внимательнейшим образом изучите, что из себя представляет объект "Форма" в VB6.

Цитата(Buka1214 @  8.5.2013,  18:28 Найти цитируемый пост)
Задача почти конкурсная ряд форумов решить ее не могут.

Задача - штатными средствами нерешаемая.

Автор: Сергейчик 20.5.2013, 22:25
предположу что при движении полосы прокрутки текст тупо перепечатывается
каждый раз уменьшая печатаемых количество строк или увеличивая

или каждый раз печатая с определённой позиции экрана тем самым будет типа эффекта прокручивания?

Автор: Сергейчик 21.5.2013, 00:08
Dim a As Integer, b As String
'
Код

Private Sub VScroll1_Change()
b = "ВАШТЕКСТ"
Label1 = VScroll1.Value
If Label1 = 0 Then
    Form1.Cls
    Print b
Else
    Form1.Cls
    For a = 1 To Label1
        Print
    Next a
    Print b
End If
End Sub

незабудь Label1 на форму кинуть или создай ещё одну переменную заместо Label1 
 smile 

Автор: Сергейчик 21.5.2013, 19:35
Вот ваша задача только не на 100 а на 100000 строк? smile  smile 
'кнопка загрузки текста сразу из файла или накопителя lдля вас не делал поэтому из окна Textboxa туда копируете и загружаете.
'
Dim A, B As Integer
Dim D(100000), C As String
Private Sub Command1_Click()
C = Text1.Text
A = 0
Do Until A = Len©
A = A + 1
If Mid$(C, A, 2) = vbCrLf Then C = Mid$(C, 1, A - 1) & Mid$(C, A + 2, Len© - A - 1): A = A - 1
Loop
Text1.Text = ""
A = 0
Do Until A = Int(Len© / 90) + 1
A = A + 1
If A = 1 Then D(A) = Mid$(C, 1, 90)
If A > 1 Then D(A) = Mid$(C, (A * 90) / 2 + 1, 90)
If A > Int(Len© / 90) Then D(A) = Mid$(C, A * 90 - 89, Len© - ((A - 1) * 90) + 1)
Loop
End Sub
'
Впрокрутку вставляем 
Private Sub VScroll1_Change()
Form1.FontSize = 8
Label1 = VScroll1.Value
Form1.Cls
Print , vbCrLf + vbCrLf
For B = Label1 To Label1 + 45
Print , D(B)
'(следующая строка в одну строку)
If B > A Then Form1.Cls: Form1.FontSize = 25: Print , vbCrLf + vbCrLf: Print , "Конец": Print , "Загрузите новый файл": Print , vbCrLf + vbCrLf: Print , "Конец": Print , "Загрузите новый файл": Print , vbCrLf + vbCrLf: Print , "Конец": Print , "Загрузите новый файл"
Next B
End Sub
'Кнопка загрузки снизу с права 1/3-ть экрана текстбокс  и слева от него прокрутка. 


Автор: Сергейчик 21.5.2013, 19:59
Правда такой объём врядли загрузите или циклы может надо переделывать?
а лучше с постепенной подгрузкой. 
я 7000-10000 строк пробывал,в строке 90 символов=900000 символов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)