c41455da

Бегущая строка

Бегущая строка считается одним из частей, притягивающим внимание клиента. Бегущие строки довольно часто располагают на Web-сайтах. Сегодня мы добавим также бегающую строчку в Delphi-приложение.

Что такое бегущая строка? Данная область, где «проезжает» документ. Чтобы сделать эффект передвигающегося текста, надо или двигать сам документ, или поочередно рвать из него отрывки и менять их со временем. Попытаемся оба метода.

Передвигающийся элемент. Это самый простой по реализации метод. Возьмем стандартный TLabel, уберем в него необходимый нам документ (качество Caption). Также нужно задать точный объем (длину) компонента. Легче всего оставить качество AutoSize в значении True. В итоге при изменении текста длина компонента будет автоматом изменяться. Чтобы менять положение компонента сделаем это таймером (элемент TTimer со страницы Систем). Зададим промежуток срабатывания таймера в 50 мс (качество Interval). Сейчас сделаем шлифовальщик мероприятия OnTimer. Сориентируемся, что должно выходить: прежде всего, мы можем поменять размещение компонента на форме, а во-вторых — надо проверять, не ушел ли наш документ за границы дисплея и, если это случилось, передвинуть его на обратный край окна. Пускай назначение текста будет справа-налево.

Пустим платформу и взглянем, что получилось. На самом деле, документ движется справа-налево, однако есть 1 неприятный момент: когда документ целиком прячется за левой границей окна, он переезжает за левую границу, чтобы его не было хорошо видно (по-другому он просто неожиданно будет), однако у окна возникает горизонтальная полоска прокрутки! Решение крайне обычное: установить у формы качество AutoScroll в False и полоски прокрутки больше не будет. Есть еще 1 дефицит: элемент сияет при перемещении.

Разрезаем документ. Данный метод кардинально различается от первого. Тут мы не будем шевелить наш элемент, а просто будем менять его документ. Чтобы осуществить такую бегающую строчку нам понадобится особый буфер, где будет храниться весь документ, т.к. качество Caption будет регулярно изменяться и держать документ там мы не сможем.

Также нам понадобится нынешняя позиция бегающей строки. Это будет последовательный номер знака в тексте. Специальной неустойчивой начинать не будем — сделаем это качеством Tag нашего TLabel. Добавим также второй таймер (Timer2) с промежутком 150 мс, и кнопочку для старта бегающей строки. Таймер первоначально отключим (Enabled = False).

Сейчас настроим TLabel. Прежде всего, если документ движется справа-налево, означает он обязан быть выровнен по правому концу: ставим Alignment у TLabel в taRightJustify. Во-вторых, если объем надписи будет изменяться автоматом, бегающей строки не выйдет — объем будет просто увеличиваться и вся пометка будет заметна. Поставим AutoSize в False, однако длину надписи сделаем побольше (по крайней мере 200 точек). Действительно, делать это далеко не в обязательном порядке, если несколько поменять способ (сантиметров. ниже). В конце концов, шлифовальщик таймера.

Пустим и надавим на кнопочку. Вот еще одна бегущая строка. В отличии от первого метода тут мигания почти исключены.

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

Сейчас и объем задавать вручную не обязательно — все равно больше 5 знаков в один миг времени на бегающей строке не будет.

Однако возникает 1 плохой «глюк»: предварительно строка бегает, когда доходит до конца, то буквы пропадают по одной, всякий раз сдвигаясь направо. Данный момент направляет на себя внимание. Чтобы от него освободиться, надо к строке специально добавить несколько недостатков (например, столько, сколько знаков в один миг хорошо видно на дисплее, т.е. 5) — тогда эти пробелы будут являться знаками, однако они будут невидны. Подключим в uses модуль StrUtils и сделаем это небольшой, однако очень необходимой функцией — DupeString. Функция получает 2 параметра — строчку и количество, а итогом считается композиция обозначенного числа подобных строчек. К примеру, DupeString(‘-‘,10) предоставит «———-«.

Ну вот, сейчас совершенно другое дело — реальная бегущая строка! Но ее дефицит — неимение гладкости. Знаки возникают строго по одному, а не равномерно ездят. Обычными методами «скусить» часть знака, пока, невозможно.

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий