Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание компонента: как корректно рисовать, на канве 
:(
    Опции темы
Alexeyt
  Дата 6.8.2007, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 15.9.2006
Где: около Москвы

Репутация: 1
Всего: 2



Компонент делает следующее (наследник TGraphicControl):
в Paint запускает таймер, и уже таймер через NNN мс вызывает отрисовку. Т.е. отрисовка на канве делается уже не в Paint.

Все нормально, только контрол (метка), выведенный поверх моего к-та, после такой моей отрисовки не перерисовывается сам. Поэтому после моей отрисовки метка затирается - плохо. Что с этим делать?


Это сообщение отредактировал(а) Alexeyt - 6.8.2007, 02:14
PM WWW   Вверх
Coder
Дата 6.8.2007, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



Ну правильно ты же рисуешь свой компонент после отрисовки всей формы. Рисуй перед. 

И зачем ты используешь таймер?
PM MAIL   Вверх
Alexeyt
Дата 6.8.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 15.9.2006
Где: около Москвы

Репутация: 1
Всего: 2



Цитата(Coder @ 6.8.2007,  05:19)
Ну правильно ты же рисуешь свой компонент после отрисовки всей формы. Рисуй перед. 

И зачем ты используешь таймер?

Не понял, что значит "перед"?

таймер для того, чтобы выполнять подробную отрисовку, когда п-ль закончит скроллинг (если рисовать все сразу, тормозит).
PM WWW   Вверх
Snowy
Дата 6.8.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Тогда убирай метку. Рисуй текст сам.
Метка не имеет своего окна, поэтому рисуется на твоём.
А ты рисуешь снова. Вот и затирается.
Если уж так хочется по таймеру рисовать, рисуй и текст сам.
Или оптимизируй отрисовку - нарисуй всё на битмапе, а потом уже готовый и подсовывай.
PM MAIL   Вверх
Alexeyt
Дата 6.8.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 15.9.2006
Где: около Москвы

Репутация: 1
Всего: 2



Snowy, спасибо.
речь про компонент ATImageBox. Смотри картинку: там нельзя метку (белая в левом верхнем углу) рисовать самому, она же не полностью лежит на картинке.

Когда картинка перерисовывается (по таймеру), метка затирается. пробую делать Invalidate метки, не помогает: после этого вызывается мой Paint (все зацикливается).
PM WWW   Вверх
Snowy
Дата 7.8.2007, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Так я и говорю. При отложенной отрисовке, данный компонент работать не будет.
Ты его затираешь.
Посему выбрось его нафиг и рисуй текст сам.
Попытка его инвалидировать только вызовет твой репаинт, который снова запустит таймер.
Вобщем 2 варианта:
1. Рисовать по WM_PAINT
2. Забить на метку и рисовать всё самому, ибо метка рисуется по WM_PAINT, а ты позже.
PM MAIL   Вверх
Alexeyt
Дата 7.8.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 15.9.2006
Где: около Москвы

Репутация: 1
Всего: 2



Спасибо. нашел обходной способ...
PM WWW   Вверх
SkillHunter
Дата 8.8.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.8.2007

Репутация: нет
Всего: нет



Я всегда делал так - отрисовывал через WM_PAINT, а в нужный момент (событие) просто вызывал Invalidate для моего компонента, который ставил мой компонент в очередь на прорисовку. В таймере можно также сделать, не рисовать на прямую из него, а просто вызывать Invalidate.
PM MAIL ICQ   Вверх
Alexeyt
Дата 8.8.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 15.9.2006
Где: около Москвы

Репутация: 1
Всего: 2



Я уже разобрался без WM_PAINT.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.