Обновление окна включает в себя две фазы. В первой фазе, при выводе окна, Windows посылает ему сообщение "WM_ERASEBKGND", сообщающее о необходимости стирания фона перед процедурой рисования. Затем посылается сообщение "WM_PAINT", служащее сигналом для закрашивания "переднего плана". Мерцание вызывает предворительное стирание фона, которое происходит при получении сообщения "WM_ERASEBKGND". Тем не менее, Вы можете избавиться от мерцания двумя способами: первый способ заключается в том, что Вы сами обрабатываете сообщение посланное системой; второй способ - это использование BitMap'ов т.е. все операции, которые нужно проделать с изображением, Вы выполняете на BitMap'е, а затем выводите его на Image, с помощью процедуры Draw(). Пример использования процедуры Draw(): procedure TForm1.Button1Click(Sender: TObject); var B : TBitMap;
begin B := TBitMap.Create; //инициализация BitMap'а {здесь Вы располагаете необхдимые операции} image1.Canvas.Draw(0,0,B); //вывод BitMap'а на Image end; |
Рассмотрим подробнее первый способ. Для того чтобы обрабатывать сообщения получаемые системой добавте название процедуры обработки в раздел private объекта TForm. Соглашение по присвоению имен требует присваивать обработчику сообщений то же имя, что и имя обрабатываемого им сообщения, но без символа подчеркивания и с указанием первых знаков имени прописными буквами. Вот пример обявления процедуры, обрабатывающей сообщение "WM_ERASEBKGND": procedure WMErasebkgnd(var msg:TWMErasebkgnd); message WM_ERASEBKGND; |
Потом создайте описание для этой процедуры. Для того чтобы просто отключить перерисовку, в описании процедуры можно указать простой комментарий.
|