Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Внизперемещение+изменение размера=1 обновление Найти похожие ветки
← →
BFG9k © (2005-08-08 14:39) [0]На форме расположена картинка (FastImg) с Align=alClient. Делаю перемещение формы вместе с изменением ее размера:
procedure TForm2.ZoomAndMove(ALeft,ATop:integer;AScale:Real);
begin
SetBounds(ALeft,ATop,Round(Width*AScale),Round(Height*AScale));
end;
Видно, что картинка дергается: сначала происходит изменение размера, а потом перемещение. То есть происходит 2 обновления, хотя по логике процедура SetBounds нужна для того, чтобы этого избежать.
Как добиться одной перерисовки ?
← →
Anatoly Podgoretsky © (2005-08-08 14:58) [1]Не для этого нужно, а для того что бы не было восьми перерисовок.
← →
Slym © (2005-08-08 15:05) [2]Anatoly Podgoretsky © (08.08.05 14:58) [1]
Смяшно и в тему...
LockWindowUpdate
← →
BFG9k © (2005-08-08 15:41) [3]procedure TForm2.ZoomAndMove(ALeft,ATop:integer;AScale:Real);
begin
LockWindowUpdate(Handle);
SetBounds(ALeft,ATop,Round(Width*AScale),Round(Height*AScale));
LockWindowUpdate(0);
end;
Работает. Но видно, что каждый раз перерисовывается ВЕСЬ экран, а не только окно. Почему это происходит и как этого избежать ?
← →
BFG9k © (2005-08-09 12:55) [4]2 Anatoly Podgoretsky:
Если такой умный, почему бы не ответить ?;-)
← →
BFG9k © (2005-08-09 14:32) [5]Ладно, сам спросил - сам отвечаю :
Убираем FastImg.Align:=alClient;
Далее...
procedure TForm2.DoAlign(ALeft,ATop,AWidth,AHeight:integer);
begin
Parent.Perform(WM_SETREDRAW,0,0);
FastImg.SetBounds(0,0,AWidth,AHeight);
SetBounds(ALeft,ATop,AWidth,AHeight);
Parent.Perform(WM_SETREDRAW,1,0);
InvalidateRect(FastIMg.Handle,nil,True);
InvalidateRect(Parent.Handle,nil,True);
UpdateWindow(Parent.Handle);
end;
procedure TForm2.ZoomAndMove(ALeft,ATop:integer;AScale:Real);
begin
DoAlign(ALeft,ATop,Round(Width*AScale),Round(Height*AScale));
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c