Страница: 1 |
Страница: 1 |
Вопрос: Даёшь войну мерцанию......!!!!!!!!!!!
Добавлено: 21.10.04 00:17
Автор вопроса: Surok
Необходимо сделать контрол, которому будет периодически передаваться текст...
Принцип работы данного контрола такой же как и во многих чатах: текст смещается вниз, а сверху появляется новый..
Здесь больше надо решить принципиальные вопросы.
Пробую несколько возможных вариантов:
1. При передаче нового текста его загружать в динамический какой-нибудь TextBox и все вместе перемещать...
XXXXX Все-бы ничего, да ето мерцание контролов просто достало, как не старайся....
2. Боллее предпочтительный вариант - использовать API TextOut...кто-то советовал уже в форуме..
XXXXX Круто,но небходимо постоянно форматировать новый текст так, чтобы он не выходил за границы контрола...
также наблюдаем некоторое мерцание, если использовать
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
Surok
Вопросов: 36
Ответов: 106
Профиль | | #1
Добавлено: 21.10.04 00:19
Необходимо сделать контрол, которому будет периодически передаваться текст...
Принцип работы данного контрола такой же как и во многих чатах: текст смещается вниз, а сверху появляется новый..
Здесь больше надо решить принципиальные вопросы.
Пробую несколько возможных вариантов:
1. При передаче нового текста его загружать в динамический какой-нибудь TextBox и все вместе перемещать...
XXXXX Все-бы ничего, да ето мерцание контролов просто достало, как не старайся....
2. Боллее предпочтительный вариант - использовать API TextOut...кто-то советовал уже в форуме..
XXXXX Круто,но небходимо постоянно форматировать новый текст так, чтобы он не выходил за границы контрола...
также наблюдаем некоторое мерцание, если использовать
3. Начинаются извращения - также как и во втором случае форматировать текст, далее двигаем изображение контрола
внутри него самого с помощью API BitBlt...
XXXXX Получается просто супер...мерцания вообще нет..
Опять но..при перерисовке контрола все изображение пропадает...
Таким образом повисли следующие вопросы:
- Как определить длину текста в графических значениях (Pixel, Twip, и.д)
- Как сохранить и потом восстановить изображение при перерисовке контрола ( третий случай)
P.S.Посоветуйте что-нибудь, а то уже голова кипит...как что-то начинает мерцать при перемещении еле сдерживаю себя чтобы не швырнуть клаву в монитор....)))
Вообщем "Даещь войну мерцанию"!!!!
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 21.10.04 07:40
А ты попробуй не форматировать заново текст, а с пом. BitBlt скопировать уже выведенный текст ниже, и вверх вписать новую строку с пом. TextOut или любой др. функции...
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 21.10.04 07:47
упс, не прочитал третьего
Ну да в любом случае это тот самый вариант, а при какой еще перерисовке, что все пропадает ?
В общем тогда создай виртуальный DC и на нем храни изображение, как только WM_PAINT, перерисовывай...
Ширину строки можно определить, но она буджет не точная а средняя, т.е. есть какой-то средний размер символов, его-то знать мы и будем...
Номер ответа: 4
Автор ответа:
Surok
Вопросов: 36
Ответов: 106
Профиль | | #4
Добавлено: 21.10.04 10:47
to SNE>>> вот, вот ...я тоже думаю в третьем случае каждый раз сохранять картинку..
-как создать виртуальный DC(не совсем понял очем речь)
-ну и как же определить енто среднее значение символа...
Номер ответа: 5
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #5
Добавлено: 21.10.04 14:30
оригинальное решение... я кстати тоже так подумал кода вопрос читал...
ручками через Паинт к примеру...
Номер ответа: 6
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #6
Добавлено: 21.10.04 14:50
Создай 1 лейбл. Дай ему индекс равным нолю!
С каждым новым текстом загружай его. Так ты можеш до 256 лейблов в форме загрузить!
У мя было что-то типа этого
Но если хочеш чтоб и текст выделялся
то возми простой текстбокс
и сделай так:
txtMessage.Text = txtMEssage.Text & strNewMEssage
Это примитивный мэтод и нигде не мерцает!
Удачи!
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 21.10.04 18:53
А длинну текста в лабеле определить можно, возьми поставь в лабеле нужный шрифт и размер, напиши в текст, и в лабел поставь автосайз. Лабел станет размером с текст это и будет размер в пикселях текста
Номер ответа: 8
Автор ответа:
Surok
Вопросов: 36
Ответов: 106
Профиль | | #8
Добавлено: 21.10.04 19:24
Ммм...в наших рядах пополнение....
Верю, что вместе мы победим етого мерцающего врага...ведь у нас лучшие бойцы !!!!....)))
Но для етого нам нужен универсальный план атаки...
>>>>> Sne
А ты попробуй не форматировать заново текст, а с пом. BitBlt скопировать уже выведенный текст ниже, и вверх вписать новую строку с пом. TextOut или любой др. функции...
---- Я так и делаю...только я перемещаю всю картинку в пределах видимой области вниз и сверху вставляю новый текст....
XXXX При етом попробуйте перетащить мышкой какое-нибудь окно сверху етой видимой области в запущенном приложении.....все стирается как ластиком в Паинте....
>>>>> RA
Создай 1 лейбл. Дай ему индекс равным нолю!
С каждым новым текстом загружай его. Так ты можеш до 256 лейблов в форме загрузить!
----- Ето верный путь...он предполагает решить 1.случай вопроса...но все лейблы сами не мерцают, а когда начинаешь их перемещать - они как гирлянда новогодняя мерцают...
>>>>> Hacker
А длинну текста в лабеле определить можно, возьми поставь в лабеле нужный шрифт и размер, напиши в текст, и в лабел поставь автосайз. Лабел станет размером с текст это и будет размер в пикселях текста
-----Ето уже ближе к решению...дал бы еще одну синюю звезду "За смекалку", да не в моих полномочиях..
Вообщем война продолжается...нам нужны новые решения и головы...
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 21.10.04 21:02
См. функции для работы с шрифтами...
ф-цию GetTextMetrics и структуру TEXTMETRIC...
А про DC - CreateCompatibleDC что-то в этом роде... Отлавливаем событие WM_PAINT формы, и перерисовывать нужный регион...
Номер ответа: 10
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 21.10.04 21:33
2 Surok
Гы... пасибо.... приятно
Номер ответа: 11
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #11
Добавлено: 22.10.04 09:39
ЕВРИКА!!! НИЧЕГО СОЗДОВАТЬ НЕ НАДО!!!
Используй простой лейбл, добовляй строки и крути его вверх!
Сейчас от работы освобажусь! Сделаю пример и вышлю!
К стать! ЧТоб при наведение мышкой не стералась делай AutoRedraw = True
А чтоб текст не мерцал наоборот!