-
К примеру у меня есть большой текстовый файл и мне нужно выводить этот текст на Canvas компонента TImage.
Я вычитал так: 1)Выводить текст на буферный BitMap. 2)Копировал на Canvas через BitBlt.
Все как бы хорошо, но появилась надобность скроить текст, т.е. в зависимости от положения скрола выводить нужный кусок тексата из файла. Не критично, но тормоза есть
На буфер я выводил построчно, т.е. по onScroll вызывается 40-80 раз(взависимости от высоты экрана) процедура TextOut. может это узкое место? Но вызвать TextOut меньшее количество раз не получится. Так чтобы вызвать TextOut только раз с переводом строк до конца экрана не получится?
-
Отказаться от TImage, контролировать всю графику самому. Покажите код где будет ясна последовательность генерации текста в буфере и последующий сброс буферной картинки на канвас.
-
> KilkennyCat © (17.11.17 21:55) [1]
Ну после выходных, код на работе. Да и работа приложения вобщем удовлетворяет задаче, там и переделывать ничего не буду.
У меня вопрос чисто познавательного характера, вот статью на хабре нашел хорошую, где рассматривается вопрос организации памяти при написании "с низов" текстового редактора, а по вопросу быстрой отрисовки текста в окне, та ничего и не нашел, но не долбить же TextOut на Canvas. Почитать бы как это "правильно" делается.
-
Принцип прост. Пока выводится одно, рисовать следующее. Но поскольку неясно, что будет следующее, рисуется некая буферная зона со всех движущихся краев.
-
> kilkennycat © (17.11.17 22:51) [3] > > Принцип прост. Пока выводится одно, рисовать следующее. > Но поскольку неясно, что будет следующее, рисуется некая > буферная зона со всех движущихся краев.
С примерами кода бы посмотреть...
-
ну, мне уже не найти, делал лет 15 назад. многослойный скроллинг текста в полном экране.
-
> многослойный скроллинг текста
что это хоть примерно?
-
> Valeron (17.11.17 19:05)
лучше всего поискать какой-нибудь текстовый редактор opensource и посмотреть, как сделано там. например notepad++ с открытыми исходниками, но не на Делфи, думаю можно найти на Делфи.
-
> но не долбить же TextOut на Canvas.
А куда же его ещё делать?
> Не критично, но тормоза есть
Какая ОС? Какой компьютер? Какие сервисы запущены?
> На буфер я выводил построчно, т.е. по onScroll вызывается > 40-80 раз(взависимости от высоты экрана) процедура TextOut. > может это узкое место?
Возьмите профилировщик и посмотрите. К примеру Sampling Profiler Может у вас чтение с файла тормозит? А может и вывод.
> Но вызвать TextOut меньшее количество раз не получится.
Ну почему? Можно за кэшировать каждое уникальное слово. А можно и просто каждую букву. Какой алфовит у вас сколько шрифтов?
|