Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 21.10.04 07:40
:) А ты попробуй не форматировать заново текст, а с пом. BitBlt скопировать уже выведенный текст ниже, и вверх вписать новую строку с пом. TextOut или любой др. функции...

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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-сайт: barsik.newmail.ru
 Профиль | | #5
Добавлено: 21.10.04 14:30
:) А ты попробуй не форматировать заново текст, а с пом. BitBlt скопировать уже выведенный текст ниже, и вверх вписать новую строку с пом. TextOut или любой др. функции...

оригинальное решение... я кстати тоже так подумал кода вопрос читал... :)

ну и как же определить енто среднее значение символа...

ручками через Паинт к примеру...

Ответить

Номер ответа: 6
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: www.aliyev.us
 Профиль | | #11
Добавлено: 22.10.04 09:39
ЕВРИКА!!! НИЧЕГО СОЗДОВАТЬ НЕ НАДО!!!
Используй простой лейбл, добовляй строки и крути его вверх!
Сейчас от работы освобажусь! Сделаю пример и вышлю!
К стать! ЧТоб при наведение мышкой не стералась делай AutoRedraw = True

А чтоб текст не мерцал наоборот!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам