powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужна помощь - вывод большого объема текста в текстовое поле
13 сообщений из 13, страница 1 из 1
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461451
Licvidator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ! Хочу написать клиента для непрерывного чата. Возникла проблема с выводом текста в текстовое поле. Поясню: работа клиента не ограничена, при этом нужно организовать чекбокс "остановить прокрутку", чтобы можно было оставить клиента на ночь в чате, а потом читать текст с того места, где прервался. Все бы ничего, да вот текст должен отображаться форматированным (по цвету, по размеру и т.д.), поэтому обычный TextBox не подходит. Тогда выбор пал на RichTextBox. Но появилась неувязочка - как только я приваиваю ему дополнительную порцию форматированного текста (RichTextBox.text=RichTextBox & string), предыдущее форматирование стирается. Я и это обошел, написав след. код:
'
RichTextBox.SelStart = Len(RichTextBox.text)
RichTextBox.SelText = vbLf & string
'
Тогда при каждом добавлении текста скролл автоматом съезжает вниз. В общем, получается замкнутый круг... Решил было воспользоваться советом о том, как добавлять в TextEdit более 64 Кб текста, т.е. организовать массив и загонять его в RichTextBox порциями, но тогда все упирается в размеры окна этого самого RichTextBox - в конце прокрутки неизбежно появятся пустые строки.
И как я только не "извращался", не получается. Заранее длину строки предугадать невозможно, горизонтальной прокрутки нет (ее не дожно быть в принципе), поэтому подгон константы с пустыми строками под высоту RichTextBox не пойдут, т.к. в массиве длиннющая строка будет представлена как одна, а в RichTextBox она будет переносится по строкам... поэтому возможен еще один "глюк" - я прокручу скролл на 1 позицию, а RichTextBox обновится, скажем, на 3 новых строки. Разбиение (предварительное) строки в массиве на неск. подстрок тоже не проходит, все зависит от размера выбранного шрифта и размеров самих символов.
В общем, я уже почти отчаялся... но ведь есть же редакторы типа Word, Excel, тот же IE - все форматированное и со скроллом все в порядке.
Что посоветуете? Может, есть другой контрол? (WebBrowser не предлагать;) Желательно, чтобы в этом контроле можно было делать ссылки.. напр., пойдет в чате сообщение с урл, и чтобы пользователь мог мышкой, прямо из клиента, пройти по ней (как в IE).

PS Даже если и отказаться от идеи остановки скролла, все равно будет ошибка - через пару часов пребывания клиента в чате, форматирование будет жутко тормозить.. т.е. сначала появится мессага, а только потом она будет раскрашена соответствующим образом...
PPS Надеюсь, все подробно описал;)
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461456
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет торможения.
А ты не крась все. Как видяхи современные делают, крась только то что видно.
Оставляй в тексте невидимые теги цветов и при прокрутке читай да подкрашивай :)

Magnus
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461467
Licvidator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Magnus23
Интересно, конечно, а как код узнает, видима строка в данный момент или нет? Это я и сам думал, и, если бы с массивом у меня все получилось, так и делал бы. Насчет "невидимых" цветов - интересное выражение;)
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461493
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты же знаешь текущую позицию а также знаешь насколько прокрутили.
Для этого, отключаем его собственные скролбары и цепляем отдельный вертикальный, по его изменениям можно судить о позиции.
я имел ввиду что тег цвета можно не показывать а не сами цвета :)

Вообще-то, можно ипишками получитьразмеры шрифта и вычислять количество символов в одной строке в зависимости от размера контрола. Но это немного муторно в кодировании.


Magnus
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461498
Licvidator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я это тоже пробовал... а что ты имеешь в виду под словом "тег"? это же не хтмл... да, приходит в виде хтмл, но теги все вырезаются, красить-то по-любому через .SelColor=
А вот насчет АПИ поподробнее, потому как я не смог их "правильно выстроить".. вроде бы примерно в голове код критится, но никак не могу это реализовать.. Тем более, ты не учел сами символы. Т.к. Если ты напишешь, например, десять раз подряд большую букву А, а потом, на др. строке, десять точек (.), то точки будут занимать гораздо меньше места, поэтому их можно в одной строке уместить больше. Понимаешь? Все не так просто, как хотелось бы.. в общем, если еще есть идеи - пожалуйста в коде;) Иначе, после 10 часов беспрерывного программинга голова уже не варит;)
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461505
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хтмл, но ртф :), там тоже своих тегов хватает, вполне можнонпоиграться с ними. TextRtf свойство. Но конечно, сначала тебе придется разобраться с со спецификацией ртф. Это кстати очень интересный вариант.

На счет АПИ, символы то я учел, не учел то что телепаты в отпуске :), я когда это писал , сам думал о главе из книги Эпламана "Вин32 АПИ и Вижуал Васик", в которй как раз подобное и описывалось. У меня-то мозги уже тоже не первой свежести. :) Она дома валяется, если будет время, вечером гляну и завтра притараню код.

Magnus
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461507
Licvidator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, только РТФ мне еще не хватало)) Видел я там этот код... тоскливо стало;))
Насчет кода - буду благодарен:)
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461508
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле в ртф все не так страшно, тебе то нужно не все, а только некоторая часть приминительно к товей проблеме.

Magnus
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461527
Licvidator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, примеры кода в студию!;) Я понимаю, что и сам могу разобраться в этом... но уже сил и времени нет:( Еще раз большое спасибо за внимание к моей проблеме;)
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32461532
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок :).
Постараюсь завтра притащить.

Кстати, :), есть местная функция, TextWidth возвращающая длинну текста в исходя из текущего шрифта формы. Делишь на размер бокса, получаешь строки :)

Как вариант :)

Magnus
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32462273
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или используй шрифт курьер - там все символы одинаковой ширины.
Тоже как вариант :)
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32462956
Licvidator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ! Свершилось;)) Я сам догадался, как енто все перехитрить. На всяк случай приведу пример кода, может кому-то поможет...
'
Option Explicit

Private Const LINES = 20 ' вот это значение зависит от высоты RichTextBox (тут я его обозвал txtText
Dim n
Private A$()

Private Sub Command3_Click()
Dim dd As Integer, i3 As Integer
Open "C:\113.txt" For Input As #1 Len = 1024
Do Until EOF(1)

n = n + 1
ReDim Preserve A$(n + LINES)
Line Input #1, A$(n)
txtText.Text = A$(n)

If txtText.GetLineFromChar(Len(txtText.Text)) > 0 Then
A$(n) = ""

dd = 0
For i3 = 1 To Len(txtText.Text)
If txtText.GetLineFromChar(i3 - 1) > dd Then ' -1 обязательно, иначе может быть ошибка
n = n + 1
ReDim Preserve A$(n + LINES)
dd = dd + 1
End If
A$(n) = A$(n) + Mid(txtText.Text, i3, 1)
Next

End If
Loop
Close #1
End Sub
'

Код полосы прокрутки, его изменения не привожу - это уже не суть важно;) Сразу прошу прощения за обозначения переменных - это тоже не суть:)
Осталось только одно: сделать изменять константу в зависимости от Form_Resize (соотв. и изменения размеров RichTextBox). Тут тоже есть над чем подумать.. ведь пользователь может изменить размеры уже во время выполнения кода, т.е. константа изменится. Придется переделывать массив снова. В общем, задача пока не решена.
...
Рейтинг: 0 / 0
Нужна помощь - вывод большого объема текста в текстовое поле
    #32462958
Licvidator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, еще забыл, что константа зависит также и от шрифта.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужна помощь - вывод большого объема текста в текстовое поле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]