|
[code=HTML]<marquee height="100%" width="167" bgcolor="white" scrollamount="4">
<small>Такая же бегущая строка будет и у вас в Delphi-приложении</small>
</marquee>[/code]
Тег small делает шрифт текста меньшим, относительно основного текста.
Ну вот, теорию повторили! Теперь перейдём к проблемам реализации.
Как вы уже догадались, показывать нашу страничку мы будем в TWebBrowser => для отображения бегущей строки мы используем Internet Explorer (точнее, TWebBrowser использует IE). Следовательно, и отображаться она будет всегда одинаково! Значит, никаких проблем с разностью в браузерах нет! Это хорошо.
Но, как же мы будем показывать нашу страничку, если TWebBrowser умеет открывать только существующие странички? Очень просто. Сохранять на диск нашу HTML страничку мы не будем - не респектно! Для отображения странички воспользуемся протоколом about. Коротко говоря об этом протоколе, если создать строку вида "about: Наш HTML код " и передать эту строку в качестве параметра в TWebBrowser.Navigate, то наша страничка корректно отобразиться. Например:[code=Delphi]WebBrowser1.Navigate(¢about:<body bgcolor="red"><center>Hello, Dem@nXP!</center></body>¢);[/code]
Этот код отобразит нам страничку с красным фоном, посередине которой на первой строке будет надпись "Hello, Dem@nXP!" чёрными буквами.
А почему бы нам не отобразить так же и бегущую строку? Пробуем!
[code=Delphi]WebBrowser1.Navigate(¢about:<body>¢+
¢<marquee height="20" width="167" bgcolor="white" scrollamount="4">¢+
¢<small>Такая же бегущая строка будет и у вас в Delphi-приложении</small>¢+
¢</marquee></body>¢);
[/code]
Уррряя! Всё работает! Так, теперь доведём всё до человеческого вида, т.е. Сделаем размеры нашего WebBrowser¢a соизмеримыми с размерами Edit¢a. В предвкушении законченого дела запускаем наше приложение и ... не тут то было! Эти чёртовы полосы прокрутки! Да ещё и сама строка находится не с самого верху! Мдя, будем лечить...
В HTML¢e есть понятия нижнего, верхнего, левого и правого отступов от краёв страницы. А что если их обнулить?
[code=Delphi]WebBrowser1.Navigate(¢about:<body topmargin="0" leftmargin="0" marginwidth="0" rightmargin="0" bottommargin="0">¢+
¢<marquee height="20" width="167" bgcolor="white" scrollamount="4">¢+
¢<small>Такая же бегущая строка будет и у вас в Delphi-приложении</small>¢+
¢</marquee></body>¢);[/code]
Угу. Уже получше - если освободить место для полос прокрутки, то будет видно, что наша строка вплотную прилегает к краям TWebBrowser¢a. Но полосы прокрутки портят весь вид! Вот их мы сейчас и уберём!
А убираются они довольно просто: в теге body пролписываем scroll="no". Всё гениальное просто . Делаем размер WebBrowser¢a "нормальным" (у меня height=20 а width=167), изменяем текст на:
[code=Delphi]WebBrowser1.Navigate(¢about:<body topmargin="0" leftmargin="0" marginwidth="0"¢+
¢rightmargin="0" bottommargin="0" scroll="no"> <marquee height="20" width="167"¢+
¢bgcolor="white" scrollamount="4"><small>Такая же бегущая строка будет и у вас в¢+
¢Delphi-приложении</small> </marquee>
</body>¢);[/code]
И радуемся жизни: теперь то всё работает! Ну, для полного счастья можно подвязать размеры бегущей строки с размерами браузера. Это делается так:
[code=Delphi]WebBrowser1.Navigate(¢about:<body topmargin="0" leftmargin="0" marginwidth="0"¢+ ¢rightmargin="0" bottommargin="0" scroll="no"> <marquee height="¢+ IntToStr(WebBrowser1.height-5)+¢" width="¢+IntToStr(WebBrowser1. width)+ ¢"bgcolor="white" scrollamount="4"><small>Такая же ¢+ ¢бегущая строка будет и у вас в Delphi-приложении</small></marquee></body>¢);[/code]
Теперь даже если попытаться прокрутить (скроллером или кнопкой мыши) нашу страничку, бегущая строка всё равно не изменит своей траектории. WebBrowser1.height-5 сделано именно для этого.
Ну и, наконец, всё это можно красиво оформить в одну процедурку:
[code=Delphi]procedure SetRunText(Web: TWebBrowser; Text: string); begin Web.Navigate(¢about:<body topmargin="0" leftmargin="0" marginwidth="0"¢+ ¢rightmargin="0" bottommargin="0" scroll="no"> <marquee height="¢+ IntToStr(Web.height-5)+¢" width="¢+IntToStr(Web. width)+ ¢"bgcolor="white" scrollamount="4"><small>¢+Text+ ¢</small></marquee></body>¢); end;[/code]
Ну, или же сразу передавать в процедуру и все настройки:
[code=Delphi]procedure SetRunTextProfy(Web: TWebBrowser; Text, bgcolor, behavior, direction: string; speed: integer); begin Web.Navigate(¢about:<body topmargin="0" leftmargin="0" marginwidth="0"¢+ ¢rightmargin="0" bottommargin="0" scroll="no"> <marquee height="¢+ IntToStr(Web.height-5)+¢" width="¢+IntToStr(Web. width)+ ¢"bgcolor="¢+bgcolor+¢" scrollamount="¢+IntToStr(speed)+¢" behavior="¢+ behavior+¢" direction="¢+direction+¢" ><small>¢ +Text+¢</small></marquee></body>¢); end;[/code]
Если захотите оставить параметры по умолчанию, то можно просто передать пустые строки в нужных параметрах. Данную процедуру можно ещё расширить: например, передавать цвет не строкой, а TColor¢ом. Но это вы уже сделаете сами
Ну вот и всё. Сегодня вы научились делать бегущую строку аж двумя способами, вспомнили HTML, написали пару полезных процедур. Я надеюсь, что эта статья принесла вам пользу, научила чему-нибудь.
Я так и сделал, но есть намного эффективный способ, и по проще. http://www.nashpereviznuk.net/forum/viewtopic.php?t=196