Як заборонити перерисовку окремому компоненту

Як заборонити перерисовку окремому компоненту?

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

Блокування перемальовування: # XA0; # XA0;
# XA0; # XA0; SendMessage (TWinControl.Handle, WM_SETREDRAW, 0, 0)
розблокування:
# XA0; # XA0; SendMessage (TWinControl.Handle, WM_SETREDRAW, 1, 0);
# XA0; # XA0; RedrawWindow (TWinControl.Handle, nil, 0,
# XA0; # XA0; # XA0; RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);

А як визначити той момент при якому я намагаюся змінювати розміри форми мишкою?

Gear # XA0; (16.11.04 19:59) [3]

А як визначити той момент при якому я намагаюся змінювати розміри форми мишкою?



procedure TForm1.FormResize (Sender: TObject);
begin

end;

відбувається під впемя зміни форми.

А як відловити початок і кінець цього моменту щоб відповідно послати блокування та розблокування?

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

procedure TForm1.FormResize (Sender: TObject);
begin
Form1.Caption: = "початок";
end;

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

# XA0; # XA0; Повідомляє вікно, що його розмір змінився # XA0;

# XA0; # XA0; lParamLo: Нова ширина області користувача
# XA0; # XA0; lParamHi: Нова висота області користувача

відловлювати приблизно так:


type
# XA0; # XA0; # XA0; TForm1 = class (TForm)
# XA0; # XA0; # XA0; private
# XA0; # XA0; # XA0;
# XA0; # XA0; # XA0; procedure WMSysCommand (var Msg: TWMSysCommand);
# XA0; # XA0; # XA0; message WM_SYSCOMMAND;
# XA0; # XA0; # XA0; public
# XA0; # XA0; # XA0;
end;

var
# XA0; # XA0; # XA0; Form1: TForm1;

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

Та мало не забув, додай inherited;

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

> 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
# XA0 ;. // Тут весь Ваш код.
end;

Gear # XA0; (16.11.04 20:18) [8]
Дякуємо!

Пішов, але обіцяв повернутися!

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