Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизКак запретить перерисовку отдельному компоненту? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c