lobster |
Отправлено: 04.06.2004, 12:07 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Ребята, у меня возникла такая проблема:
Мне надо изменять размер окна так, чтобы его содержимое при этом не перерисовывалось до окончания ресайза ( там у меня типа полно графики, которая прорисовывается очень тормозно ).
Пожалуйста, может кто посоветует как это сделать ( диплом горит ) |
|
olegenty |
Отправлено: 04.06.2004, 12:32 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
у всех родителей и потомков задай ControlStyle = csOpaque; (например в обработчике OnCreate формы)
|
|
olegenty |
Отправлено: 04.06.2004, 12:35 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
да, и ещё DoubleBuffered = true, у всех контролов в том же обработчике.
|
|
lobster |
Отправлено: 04.06.2004, 19:25 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
К сожалению этот метод не подействовал. Картинка по-прежнему пытается вылезти когда не надо.
Я тут нашел в справочнике описание этого свойства, там сказано, что при ControlStyle.Contains(csOpaque) "компонент полностью заполняет собой клиентскую область". Честно говоря не понял, как это связано с моим вопросом.
Я сам думал вот в каком направлении:
Если бы я мог отловить моменты начала и конца ресайза, то достаточно было бы просто заблокировать перерисовку в промежутке между ними. Но если с началом всё понятно ( событие OnCanResize ), то с окончанием — загвоздка. На события OnMouseDown и OnMouseUp форма в этот момент не реагирует ( иначе второй момент я просто отследил бы по отпусканию мыши ). Вообщем получив ответ на этот вопрос, я получу ответ и на главный.
Кстати фишку про DoubleBuffered я не знал — полезная штука.
З.Ы. Я работаю в 6-м Билдере ( вдруг это имеет значение ).
|
|
olegenty |
Отправлено: 07.06.2004, 07:12 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
у тебя что за компонент рисующий? вообще-то на все стандартные это действует на ура. только и у самой формы эти св-ва надо установить, и у компонентов. это уже обсуждалось в данном форуме и на ура работало...
|
|
lobster |
Отправлено: 07.06.2004, 09:51 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
PaintBox у меня. И свойство я установил у всех компонентов ( ну у тех где оно вообще есть ). В принципе, проблему я частично решил с помощью таймера — отслеживаю время с момента последнего OnCanResize. Вроде нормально получилось. Так что я думаю вопрос можно закрыть. |
|
olegenty |
Отправлено: 07.06.2004, 13:59 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
нет, нельзя его закрыть. в каком событии рисованием занимался...?
вопрос надо добить...
|
|
MDM |
Отправлено: 08.06.2004, 13:44 |
|
Не зарегистрирован
|
WM_SETREDRAW |
|
lobster |
Отправлено: 10.06.2004, 08:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Да, добить хотелось-бы.
На форме у меня расположен PaintBox ( если точнее — то на панели ). Перерисовка висит на его событии OnPaint. Принудительно метод перерисовки нигде не вызывается.
Кстати попутно хотел спросить: если я устанавливаю в true свойство DoubleBuffered могу ли я отказаться от программной буферезации ( т.е. не рисовать картинку сначала в памяти, а только потом копировать её на экран )? |
|
olegenty |
Отправлено: 10.06.2004, 08:56 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
можешь, ради этого св-во и создано. но есть ограничения: ряд компонентов сами организуют буферизацию (TRichEdit), и там использование св-ва ни к чему хорошему не приведёт. но с PaintBox всё нормально.
|
|