Skip to Menu Skip to Content Skip to Footer

Monday, Dec 11th

Бегущая строка Delphi
Написав Administrator   
Вівторок, 21 червня 2011, 16:23
There are no translations available.

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

Приведу некоторые из протестированных мною компонентов:

TSecretPanel (пакет RXLib)
Возможно самый лучший по возможностям компонент, среди  тех, что попали мне в руки.
Можно двигать не только строку, но и текст, направление движения вертикальное и горизонтальное, есть возможность настроить скорость и цвет. Благодаря тому, что компонент унаследован от TCustomPanel, его не сложно присовокупить в любое место вашего приложения. Однако, параметры отображения строки оставляют желать лучшего.

JvScrollText (пакет JEDI VCL)
Положительное в этом шедевре только то, что он просто написан, работает и имеет открытый исходный код. Последнее не столь существенно, так как ничего полезного в нем мне найти не удалось.

TMarquee (Microsoft Office)
Почетное третье место занимает ActiveX объект TMarquee. Установить его легко и просто:

  1. Открываем Import Type Library...
  2. Находим Marquee OLE Control Module.
  3. Нажимаем Install..., не забывая указать пакет для установки, после чего нажимаем Compile и модуль готов к работе.

А вот работать с ним не очень легко. Компонент не адаптирован для работы в Delphi
и имеет все недостатки предыдущих, плюс то, что он не OpenSource.

Выводы.

К сожалению, бегущую строку можно создать только вручную, однако это как оказывается не такая тривиальная задача как может показаться на первый взгляд. Почему же у столь именитых разработчиков программного обеспечения ничего не получилось, ответ такой:
Все они использовали тупиковый вариант GDI, тогда когда нужно было использовать DirectX или же OpnGL.
В DirectX , для того что бы строка не мерцала, существует одна полезная функция
WaitForVerticalBlank, которая позволяет синхронизировать кадровую частоту с частотой вертикальной развёртки монитора., Это убирает мерцание изображения при прокрутке строки. Однако из за этого может снижаться производительность, порою довольно значительно. Максимальный FPS при этом равен частоте обновления монитора, то есть если ваш монитор имеет частоту 60 герц, больше 60 кадров в секунду строка не побежит.

Решение задачи.

Итак, как же побыстрее сделать строку, разбираться с DirectX дело не благодарное и малоинтересное. Один из выходов, использование библиотеки которая оптимизирует эту задачу, на данный момент мною было обнаружено два решения позволяющие оптимизировать работу с DirectX:

1 Andorra 2D - позволяет один и тот же код использовать как для DirectX так и для OpenGL, не имеет компонентов и поставляется как набор классов и функций.

2 DelphiX - работает только с DirectX, и работает довольно неплохо, выполнен как набор компонентов и поддерживает все версии Delphi.


Просмотрев обе библиотеки, решил использовать вариант №2, возможно потому что в нем уже был готовый пример (Demo_dxfont),  того что мне было нужно. Создать компонент на базе примера не составило особого труда, естественно он требует установленный  DelphiX.


Скачать

   

 

Новости