![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запретить перерисовку отдельному компоненту? [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