Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Как запретить перерисовку отдельному компоненту?   Найти похожие ветки 

 
Gear   (2004-11-16 19:27) [0]

На форме имею ListBox у которого на методе OnDraw куча формул которые формируют вывод строчек с картинками и т. п. При изменении размеров формы перерисовка листбокса дико тормозит естественно из-за своей нагруженности. Как отключить перерисовку листбокса именно на период изменения размеров формы?


 
Defunct ©   (2004-11-16 19:34) [1]

WM_SETREDRAW


 
novice_man ©   (2004-11-16 19:35) [2]

Блокировка перерисовки:    
   SendMessage(TWinControl.Handle, WM_SETREDRAW, 0, 0)
Разблокировка:
   SendMessage(TWinControl.Handle, WM_SETREDRAW, 1, 0);
   RedrawWindow(TWinControl.Handle, nil, 0,
     RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);


 
Gear   (2004-11-16 19:59) [3]

А как определить тот момент при котором я пытаюсь изменять размеры формы мышкой?


 
novice_man ©   (2004-11-16 20:03) [4]

Gear  (16.11.04 19:59) [3]

А как определить тот момент при котором я пытаюсь изменять размеры формы мышкой?



procedure TForm1.FormResize(Sender: TObject);
begin

end;

происходит во впемя изменения формы.


 
Gear   (2004-11-16 20:05) [5]

А как отловить начало и конец этого момента чтобы соответственно послать блокировку и разблокировку?


 
novice_man ©   (2004-11-16 20:10) [6]

Примерно вот так, хотя правильно через сообщения, счас гляну.

procedure TForm1.FormResize(Sender: TObject);
begin
Form1.Caption := "начало";
end;

procedure TForm1.FormConstrainedResize(Sender: TObject; var MinWidth,
 MinHeight, MaxWidth, MaxHeight: Integer);
begin
  Form1.Caption := "конец";
end;


 
novice_man ©   (2004-11-16 20:16) [7]

wm_Size

   Уведомляет окно, что его размер изменился  

   lParamLo: Новая ширина области пользователя
   lParamHi: Новая высота области пользователя


 
Gear   (2004-11-16 20:18) [8]

Спасибо!


 
novice_man ©   (2004-11-16 20:19) [9]

отлавливать примерно так:


type
      TForm1 = class(TForm)
      private
      {Private declarations}
      procedure WMSysCommand(var Msg: TWMSysCommand);
      message WM_SYSCOMMAND;
      public
      {Public declarations}
end;

var
      Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMSysCommand;
begin
      if (Msg.CmdType = wm_Size) then

end;


 
novice_man ©   (2004-11-16 20:21) [10]

Да чуть не забыл, добавь inherited;

procedure TForm1.WMSysCommand;
begin
  if (Msg.CmdType = wm_Size) then
inherited;
end;


 
Юрий Зотов ©   (2004-11-16 20:59) [11]

> Gear (16.11.04 19:27)

1. Вводим в форму приватное булевское поле FResizing.

2. Обработчик WM_SIZING (идет изменение размеров):
FResizing := True;
inherited;


3. Обработчик WM_SIZE (изменение размеров закончено):
FResizing := False;
inherited;


4. Обработчик ListBox.OnDraw:
if not FResizing then
begin
 ... // Здесь весь Ваш код.
end;


 
novice_man ©   (2004-11-16 21:10) [12]

Gear  (16.11.04 20:18) [8]
Спасибо!

Ушел, но обещал вернуться!


 
Gear   (2004-11-17 12:18) [13]

Вернулся, спасибо в двойне!:)



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

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
1-1101114370
highlander
2004-11-22 12:06
2004.12.05
Шифрование и дешифрование текста


4-1098363879
-=SS=-
2004-10-21 17:04
2004.12.05
Как програмно изменить локализацию настроек ОС


1-1101198790
Jann
2004-11-23 11:33
2004.12.05
Нужна прога


1-1100685907
Mishenka
2004-11-17 13:05
2004.12.05
NameValueSeparator в TStringList


9-1091708027
vixen
2004-08-05 16:13
2004.12.05
Пересечение отрезков. Реализация физики тел