Як заборонити перерисовку окремому компоненту?
На формі маю 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]
Дякуємо!
Пішов, але обіцяв повернутися!
Повернувся, спасибі в двійні! :)