| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Бегущая строка |
| Автор: Демидрол 15.7.2008, 14:20 |
| Доброго времени суток Вам. Помогите,пожалуйста соорудить компонент бегущей строки на основе класса TLabel. Не понимаю я как сделать так,чтобы у компонента было свойство "скорость прокрутки", как сделатьтак,чтобы текст двигался,как проверить,что если длина текста меньше длины Labelа,то он из бегущей строки превращается в обычный Label. Вот. Помогите,пожалуйста,а то чего-то никак ничего никуда..... |
| Автор: Great Cornholio 15.7.2008, 23:04 |
| Сам я в этом не разбираюсь, но данная статья описывает как раз этот пример. В этом пособии в коде символы вполне могут быть изменены(хз, каким образом), на подобные. И вообще я за эту статью не отвечаю. |
| Автор: Palladin 16.7.2008, 00:53 |
| Label использу лишь для вывода бегущей строки! Отрисовывай в капшене лейбла. К примеру твой лейбл вмещает 200 символов, тогда вначале запускай цикл и записывай в лейбл 200 пробелов, потом 199 и первую букву твоего предложения, и т.д. P.S. кустарный метод... |
| Автор: Демидрол 16.7.2008, 13:10 |
| ммм....чего? Palladin, т.е в компоненте просто создать функцию,нп, ScrollName, и в ней получить длину текста в Caption и сделать цикл на столько пробелов??? эээээ...... Тупой тупак давит на мозг.... А как сделать,чтобы скорость прокрутки текста компонента можно было менять? Сделать отдельное свойство-это понятно.Но как,зная нужную скорость,менять скорость прокрутки? |
| Автор: Rrader 16.7.2008, 15:35 | ||
Демидрол, кидаешь на форму TLabel и TTimer. Ставишь у таймера нужный тебе интервал - это и будет скорость. В OnTimer пишешь:
|
| Автор: Демидрол 16.7.2008, 15:46 |
| да-да-да,это все понятно....В сети много про это нашел. Тока мне надо создать именно КОМПОНЕНТ БЕГУЩАЯ СТРОКА!!!! чтобы потом его много раз юзать в разных прога. Вот. И как это соорудить мозг не сооброжает. Помогите....................SOS!!!!! |
| Автор: Palladin 16.7.2008, 17:44 | ||
что тебе мешает юзать в каждой проге это?
|
| Автор: Демидрол 17.7.2008, 11:51 | ||||
Начальство Сижу,пыхчу как паровоз,че-то рожаю... Никто не знает,в чем косяк:
выдает ошибки: E2034 Cannot convert 'unsigned long (__stdcall * (_closure )(void *))(void *)' to 'unsigned long (__stdcall *)(void *)' и E2342 Type mismatch in parameter 'lpStartAddress' (wanted 'unsigned long (__stdcall *)(void *)', got 'void') В чем тут проблема? |
| Автор: livo 17.7.2008, 14:50 | ||
Попробуй не тред, а апишную SetTimer, KillTimer. В нее передаеш как один из параметров колбэк функцию с твоим содержанием (будет вызываться с заданным тобой периодом). |
| Автор: Rrader 17.7.2008, 14:51 | ||||||
| Вот, накидал: *.h
*.cpp
Пример использования:
|
| Автор: LastAngel 18.7.2008, 08:16 |
| http://ftf.grsu.by/UchProc/konspekt/cbuilder/ch03/ch07/ch01 может кому пригодится ... |
| Автор: Демидрол 22.7.2008, 10:09 |
| Rrader,спасибо огромное за код.С небольшими исправлениями все зашуршало так,что не остановить. Меня интересует еще какой момент:как сделать,чтобы текст бежал через весь лабл,вне зависимости от размеров текста?Чето сидел,искал,пытался,но не понял.Заранее спасибо. |
| Автор: LastAngel 22.7.2008, 13:17 |
| Ну смотри если длина фразы меньше ширины лейбла, то дополняй оставшиеся места пробелами и усё ... |
| Автор: Демидрол 22.7.2008, 13:23 |
| LastAngel,это понятно.Только длина текста в символах,а длина области хз в чем,и как их приравнять для меня загадка. И поэтому при растягивании лабла и при изменении размера шрифта(и просто при изменении шрифта) возникают траблы с отображением. |
| Автор: LastAngel 22.7.2008, 13:52 |
| Ну ширина в пикселях мериется ... у лейбла есть свойство AutoSize если померить им реальную ширину лейбла поделить на количество буковок во фразе грубо получишь сколько пикселей одна буковка,потом узнаёшь заданную ширину ну и можно оценить сколько надо пробелов докинуть 1 пробел вроде 3 пикселя ... так что даже количество пикселей на буковку не надо считать, а только количество пиксов на свободное пространство |
| Автор: Демидрол 22.7.2008, 14:55 |
| А ничего,если я AutoSize отключу?Оно мне просто мешает сильно,когда строка "бегает". А померить нужно ширину Caption в пикселях?И,насколько мне известно,каждая буква отображается разным количеством пикслей.Тем более,что при разных шрифтах размер разный...Буду пытаться. |
| Автор: fish9370 23.7.2008, 15:20 | ||||
используй для измерения длины текста в пикселах функцию:
пример:
функция учитывает свойства текущего шрифта.. |
| Автор: LastAngel 24.7.2008, 10:55 | ||||||
Вообще классная функция ...с помощью неё можешь теперь для любых размеров и для любых кодировок сделать ... Ширина лейбла известна, ширину текста узнать можно ... размер пробела в данной кодировке с помощью int TextWidth (AnsiString Text);
Возвращает строку пробелов
|
| Автор: Демидрол 24.7.2008, 14:21 | ||||
| Всем ОГРОМНОЕ СПАСИБО!!!!!!!!! С Вашей помощью соорудил сей компонент. Ниже выкладываю код готового продукта: файл .h
файл .cpp
Еще раз всем спасибо большое за помощь. P.S. Это вариант для посимвольного сдвига,может, кто подскажет,как сдвигать строку попиксельно,чтобы она не так дергалась? Буду очень признателен. |
| Автор: Демидрол 28.7.2008, 15:11 | ||||
| После небольших заморок сей компонент сооружен на основе попиксельного сдвига текста. Кому нужно - юзайте наздоровье. файл .h :
файл .cpp :
Удачного использования!!! |
| Автор: Ildarinho 23.12.2008, 12:36 |
| Демидрол можешь выложить срр и h файлы тестовой проги? |
| Автор: Ildarinho 26.12.2008, 20:08 |
| если поместить на форму 2-3 визуальных компонент бегущая строка, то они будут вместе бегать, незнаете в чем глюк??? |
| Автор: Демидрол 28.12.2008, 13:46 | ||
в строке
убери static и всё будет ок! |