Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Вниз

Полная перерисовка окна   Найти похожие ветки 

 
leron ©   (2009-09-28 20:08) [0]

При ресайзе, несмотря на полную перерисовку окна в обработчике onpaint, перерисовывается только правая и нижняя часть. Подскажит, полажуйста, как сделать так, чтобы форма перерисовывалась целиком?


 
Юрий Зотов ©   (2009-09-28 20:16) [1]

Ответ тривиальный - надо написать код перерисовки так, чтобы он не мешал форме перерисовываться целиком.

Если бы еще его видеть, этот код, то можно было бы и что-то более конкретное посоветовать...


 
leron ©   (2009-09-28 20:16) [2]

procedure TForm1.FormPaint(Sender: TObject);
var
 width, height: integer;
 Rect: TRect;
begin
height:= self.ClientHeight;
width:= self.ClientWidth;

Rect.Left:=0; Rect.Top:=0;
Rect.Right:= width; Rect.Bottom:= height;
self.Canvas.Brush.Color:= clWhite;
self.Canvas.FillRect(Rect);

Rect.Top:=height div 2 - 50; Rect.Bottom:= height div 2 + 50;
self.Canvas.Brush.Color:= clBlack;
self.Canvas.FillRect(Rect);

Rect.Top:= height div 2 - 45; Rect.Bottom:= height div 2 + 45;
self.Canvas.Brush.Color:= clSkyBlue;
self.Canvas.FillRect(Rect);

Rect.Top:= height div 2 - 25; Rect.Bottom:= height div 2 + 25;
self.Canvas.Brush.Color:= clBlue;
self.Canvas.FillRect(Rect);
end;


 
leron ©   (2009-09-28 20:17) [3]

Ответ тривиальный - надо написать код перерисовки так, чтобы он не мешал форме перерисовываться целиком.

Скажу честно, не очень понял.


 
Юрий Зотов ©   (2009-09-28 20:32) [4]

> leron ©   (28.09.09 20:17) [3]

Добавьте еще два обработчика событий:

procedure TForm1.FormCreate(Sender: TObject); // OnCreate
begin
 DoubleBuffered := True
end;

procedure TForm1.FormResize(Sender: TObject); // OnResize
begin
 Invalidate
end;


 
leron ©   (2009-09-28 20:33) [5]

Проблема разрешилась:
procedure TForm1.FormResize(Sender: TObject);
begin
self.Repaint;
end;


Теперь другой вопрос. Что же тогда происходило, когда я этого не добавлял? Вызывался обработчик onpaint, но выводились только те пиксели, которые лежат в только что появившейся области?


 
leron ©   (2009-09-28 20:35) [6]

procedure TForm1.FormResize(Sender: TObject); // OnResize
begin
Invalidate
end;

Спасибо, работает. Пошел гуглить про invalidate


 
Юрий Зотов ©   (2009-09-28 20:52) [7]

> leron ©   (28.09.09 20:33) [5]

1. Repaint вызывает принудительную перерисовку, а Invalidate только дает запрос на нее - система сама решает, когда окно нужно перерисовать. И пусть себе решает, она сделает все правильно, не нужно ее грузить принудиловкой.

2. С DoubleBuffered будет меньше моргать.

> Что же тогда происходило, когда я этого не добавлял? Вызывался
> обработчик onpaint, но выводились только те пиксели, которые лежат в
> только что появившейся области?

Да. Так устроена перерисовка окон в Windows - чтобы меньше рисовать. Посмотрите описание функции InvalidateRect в справке по WinAPI.


 
Юрий Зотов ©   (2009-09-28 20:54) [8]

> leron ©   (28.09.09 20:33) [5]

Не нужно везде писать Self, это только лишняя долбежка по клаве. Self и так подразумевается по умолчанию.


 
faiwer ©   (2009-09-29 11:43) [9]

Юрий Зотов "self." выводит список свойств и полей :D Очень удобно когда на форме более 200 компонент ;)


 
{RASkov} ©   (2009-09-29 11:48) [10]

> [9] faiwer ©   (29.09.09 11:43)

попробуй нажать CTRL+SPACE на пустом месте, где дожен быть self и увидишь тоже самое...


 
faiwer ©   (2009-09-29 11:52) [11]

{RASkov}, о, работает. шикарно ) tnx



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
15-1253513903
_@!!ex
2009-09-21 10:18
2009.11.15
Помогите подключить винчестер


2-1254420825
Drowsy
2009-10-01 22:13
2009.11.15
Текстовый файл и пустые строки.


2-1254144718
SergejM
2009-09-28 17:31
2009.11.15
TFileStream и array of extended


4-1221216201
Riply
2008-09-12 14:43
2009.11.15
Работа с памятью в Kernel-mode.


2-1254324371
AlexDan
2009-09-30 19:26
2009.11.15
Output Options в rave reports..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский