Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.026 c
11-1106228060
Bil Bal Dur
2005-01-20 16:34
2005.08.28
InputBox или InoutQuery в KOL


4-1120638026
Хинт
2005-07-06 12:20
2005.08.28
Как перебрать все элементы в окне?


5-1095417211
старый маразматик
2004-09-17 14:33
2005.08.28
не видно методов компонента в разных dpk


1-1123513665
Valentin
2005-08-08 19:07
2005.08.28
*.exe в *.exe


14-1123052197
Alexander Panov
2005-08-03 10:56
2005.08.28
Что такое опять в Москве происходит?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский