Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

перемещение+изменение размера=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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
14-1123066982
Kerk
2005-08-03 15:03
2005.08.28
Где можно IRC-бота захостить?


14-1122963567
MeF Dei Corvi
2005-08-02 10:19
2005.08.28
Шрифты в WinXP


1-1123159429
Хрюндель
2005-08-04 16:43
2005.08.28
Памогите перевести такой код из Basic в Delfi


1-1123592512
SkipKod
2005-08-09 17:01
2005.08.28
Поиск текста


3-1121615606
Ильичев С.А.
2005-07-17 19:53
2005.08.28
Автоинкремент