Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

проезжает текст

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 20.5.2024

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

Простая бегущая строка своими руками

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

1. Движущийся компонент.

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

procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
  Label1.Left
:=Label1.Left-1; 
  
if Label1.Left+Label1.Width < 0 then 
    Label1.Left
:=Self.Width; 
end;

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

2. Разрезаем текст.

Этот способ кардинально отличается от первого. Здесь мы не будем двигать наш компонент, а просто будем изменять его текст. Чтобы реализовать такую бегущую строку нам потребуется дополнительный буфер, где будет храниться весь текст, т.к. свойство Caption будет постоянно меняться и хранить текст там мы не сможем. Итак, объявим глобальную переменную:

var 
  Form1: TForm1; 
  
MarqueeText: String;

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

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  MarqueeText
:='Бегущая строка своими руками.'
  Label2.Tag
:=0; 
  Timer2.Enabled
:=True; 
end;

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

procedure TForm1.Timer2Timer(Sender: TObject); 
begin 
  Label2.Caption
:=Copy(MarqueeText,1,Label2.Tag); 
  Label2.Tag
:=Label2.Tag+1; 
end;

Запустим и нажмём на кнопку. Вот и ещё одна бегущая строка. В отличие от первого способа здесь мерцания практически исключены.

Теперь вернёмся к размеру надписи. Ограничивать размер не обязательно, если программно ограничить длину вырезаемого фрагмента. В данном примере длина фрагмента растёт, пока он не станет равным всей строке. Давайте ограничим фрагмент 5-ю символами:

procedure TForm1.Timer2Timer(Sender: TObject); 
begin 
  
if Label2.Tag > 5 then 
    Label2.Caption
:=Copy(MarqueeText,Label2.Tag,5) 
  
else 
    Label2.Caption
:=Copy(MarqueeText,1,Label2.Tag); 
  Label2.Tag
:=Label2.Tag+1; 
end;

Теперь и размер задавать вручную не обязательно - всё равно больше 5 символов в один момент времени на бегущей строке не будет.

Что мы ещё не ушли? Бегущая строка пройдёт всего один раз, а нам нужно, чтобы она пробегала снова и снова. Нет проблем - в конец обработчика таймера добавим возврат на начальное положение:

  if Label2.Tag > Length(MarqueeText) then 
    Label2.Tag
:=0;

Но появляется один нехороший "глюк": сначала строка бежит, а когда доходит до конца, то буквы исчезают по одной, каждый раз сдвигаясь вправо. Этот момент обращает на себя внимание. Чтобы от него избавиться, нужно к строке дополнительно добавить несколько пробелов (в частности, столько, сколько символов в один момент видно на экране, т.е. 5) - тогда эти пробелы будут считаться символами, но они будут невидны. Подключим в uses модуль StrUtils и воспользуемся маленькой, но крайне полезной функцией - DupeString. Функция принимает два параметра - строку и число, а результатом является комбинация указанного числа таких строк. Например, DupeString('-',10) выдаст "----------". Слегка изменим строку присвоения текста бегущей строке (процедура нажатия кнопки):

MarqueeText:='Бегущая строка своими руками.'+DupeString(' ',5);

Ну вот, теперь совсем другое дело - настоящая бегущая строка! Однако её недостаток - отсутствие плавности. Символы появляются строго по одному, а не плавно выезжают. Стандартными способами "откусить" часть символа, к сожалению, нельзя :-)

Бросаем велосипеды

На самом деле, за нас уже потрудились программисты Microsoft и создали неплохую бегущую строку, которую мы можем использовать в своём приложении. Единственное условие - в системе должен быть установлен Microsoft Office, так как библиотека, о которой речь пойдёт ниже, входит в его состав, но не входит в состав Windows.

Установка

  1.  Открываем окно Project » Import Type Library...
  2.  Находим в списке Marquee OLE Control Module.
  3.  Нажимаем Install..., указываем пакет для установки, затем нажимаем Compile и модуль устанавливается.
  4.  Объект TMarquee появится на странице палитры компонент, которая была выбрана в окне установки (по умолчанию ActiveX). Значок объекта - буквы A и B в жёлтой рамке.

Работа с TMarquee

Работать с данным компонентом довольно просто. Для начала разместите его на форме. Бегущая строка сразу активируется даже в design-time. В run-time она выглядит точно также. Фактически, настройка бегущей строки сводится лишь к изменению свойств компонента - просто рассмотрим назначение каждого из них.

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

  •  Scroll - Обычная прокрутка (когда текст полностью скрывается за границей, он появляется с другой стороны);
  •  Slide - аналог Scroll, но при достижении края бегущая строка остановится;
  •  Alternate - "пинг-понг" (когда текст доходит до края, направление движения меняется на обратное).

MarqueeBgColor - цвет фона бегущей строки в формате #RRGGBB.

MarqueeDirection - направление движения (Left / Right соответственно).

MarqueeDisplayText - текст бегущей строки.

MarqueeHeightMarqueeWidth - высота и ширина бегущей строки.

MarqueeLoop - количество проходов бегущей строки (Infinite - бесконечно).

MarqueeScrollAmount - количество пикселей, на которое сдвигается текст при изменении состояния.

MarqueeScrollDelay - интервал времени между сменой состояний (в миллисекундах).

Все остальные свойства стандартны.

Компонент имеет несколько стандартных событий, но специальных, к сожалению, не предусмотрено.

Заключение

Как видите, бегущую строку можно создать вручную, а можно использовать готовую. Помимо TMarquee от Microsoft существуют и сторонние компоненты, реализующие бегущую строку. Например, в JediVCL есть такой компонент. Бегущая строка позволяет привлечь внимание пользователя к определённым элементам, однако злоупотреблять этим не стоит.




1. от 10000 до нескольких миллионов углеродных единиц
2. вступ у війну США й вихід з війни Росії
3. Сущность города мощно понять рассматривая его на основе развития общества в целом как форму и результат э
4. Тема 7 Коммуникационная политика ~ 4 ч
5. Шпаргалка- Шпаргалка по экономике укр.html
6. ТЕМА 1 Налоговый учет его назначение 2
7. лицевой области. Восстановление костной ткани в очаге деструкции
8. Ю и Лаврентьев В
9. Экономические отношения в агропромышленном комплексе
10. МЕНЕДЖМЕНТ Ж~НЕ МАРКЕТИНГ КАФЕДРАСЫ ЕМТИХАН~А АРНАЛ~АН ТЕСТ С~РА~ТАРЫ
11. Развитие системы взаимоотношений с окружающими людьми в ранней юности
12.  Требования предъявляемые к одежде и обуви предназначенной для занятий физической культурой и спортом
13. Открытие счетов в банке и лицензирование отдельных видов ПД
14. 1
15. Тема- Философия Нового времени конец 1617 века Представители Ос
16. Тема- Рынок- понятие функции
17. В языке есть слова
18. Форма пластмассового изделия 2
19. История политико-правовой мысли во взглядах Августина и Сперанского
20. . Сведения о себе Фамилия Имя Отчество Моё имя означает