Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как запретить перерисовку отдельному компоненту? [D7, WinXP]


Gear ©   (2004-11-16 19:27:00) 

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


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

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


novice_man   (2004-11-16 21:10:00) [2]

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

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


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

> 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 20:21:00) [4]

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

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


novice_man   (2004-11-16 20:19:00) [5]

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


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;


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

Спасибо!


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

wm_Size

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

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


novice_man   (2004-11-16 20:10:00) [8]

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

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

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


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

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


novice_man   (2004-11-16 20:03:00) [10]

Gear  (16.11.04 19:59) [3]

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



procedure TForm1.FormResize(Sender: TObject);
begin

end;

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


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

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


novice_man   (2004-11-16 19:35:00) [12]

Блокировка перерисовки:    
   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);


Defunct   (2004-11-16 19:34:00) [13]

WM_SETREDRAW


Наверх

Титульная страница Поиск, карта сайта Написать письмо