| 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 всё нормально. | 
|  |