Конференция "Начинающим" » Cамый быстрый вывод текста на TCanvas [D7]
 
  • Valeron (17.11.17 19:05) [0]
    К примеру у меня есть большой текстовый файл и мне нужно выводить этот текст на Canvas компонента TImage.

    Я вычитал так:
    1)Выводить текст на буферный BitMap.
    2)Копировал на Canvas через BitBlt.

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

    На буфер я выводил построчно, т.е. по onScroll вызывается 40-80 раз(взависимости от высоты экрана) процедура TextOut. может это узкое место? Но вызвать TextOut меньшее количество раз не получится.
    Так чтобы вызвать TextOut только раз с переводом строк до конца экрана не получится?
  • KilkennyCat © (17.11.17 21:55) [1]
    Отказаться от TImage, контролировать всю графику самому. Покажите код где будет ясна последовательность генерации текста в буфере и последующий сброс буферной картинки на канвас.
  • Valeron (17.11.17 22:12) [2]

    > KilkennyCat ©   (17.11.17 21:55) [1]

    Ну после выходных, код на работе. Да и работа приложения вобщем удовлетворяет задаче, там и переделывать ничего не буду.

    У меня вопрос чисто познавательного характера, вот статью на хабре нашел хорошую, где рассматривается вопрос организации памяти при написании "с низов" текстового редактора, а по вопросу быстрой отрисовки текста в окне, та ничего и не нашел, но не долбить же TextOut на Canvas. Почитать бы как это "правильно" делается.
  • kilkennycat © (17.11.17 22:51) [3]
    Принцип прост. Пока выводится одно, рисовать следующее. Но поскольку неясно, что будет следующее, рисуется некая буферная зона со всех движущихся краев.
  • Valeron (17.11.17 23:11) [4]

    >  kilkennycat ©   (17.11.17 22:51) [3]
    >
    > Принцип прост. Пока выводится одно, рисовать следующее.
    > Но поскольку неясно, что будет следующее, рисуется некая
    > буферная зона со всех движущихся краев.

    С примерами кода бы посмотреть...
  • kilkennycat © (18.11.17 00:12) [5]
    ну, мне уже не найти, делал лет 15 назад. многослойный скроллинг текста в полном экране.
  • Valeron (18.11.17 10:00) [6]

    > многослойный скроллинг текста

    что это хоть примерно?
  • Eraser © (18.11.17 17:42) [7]

    > Valeron   (17.11.17 19:05) 

    лучше всего поискать какой-нибудь текстовый редактор opensource и посмотреть, как сделано там. например notepad++ с открытыми исходниками, но не на Делфи, думаю можно найти на Делфи.
  • Pavia © (21.11.17 06:34) [8]

    >  но не долбить же TextOut на Canvas.

    А куда же его ещё делать?


    > Не критично, но тормоза есть

    Какая ОС? Какой компьютер? Какие сервисы запущены?


    > На буфер я выводил построчно, т.е. по onScroll вызывается
    > 40-80 раз(взависимости от высоты экрана) процедура TextOut.
    >  может это узкое место?

    Возьмите профилировщик и посмотрите. К примеру Sampling Profiler Может у вас чтение с файла тормозит?  А может и вывод.


    > Но вызвать TextOut меньшее количество раз не получится.

    Ну почему? Можно за кэшировать каждое уникальное слово. А можно и просто каждую букву.
    Какой алфовит у вас сколько шрифтов?
 
Конференция "Начинающим" » Cамый быстрый вывод текста на TCanvas [D7]
Есть новые Нет новых   [118448   +36][b:0][p:0]