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

Вниз

"сгладить" Resize   Найти похожие ветки 

 
i-am-vladko ©   (2006-12-07 17:20) [0]

Доброго здоровья.
Есть форма с множеством компонентов на ней (где-то 400), с некими. Функция по событию FormResize имеет довольно сложный вид : компоненты переносятся на разные TabSheet`s, меняют размеры, Align и т.д. При этом получается эффект "мигания" этих самых компонентов. Как можно сгладить/убрать этот ненужный эффект? Спасибо за ответы


 
i-am-vladko ©   (2006-12-07 17:22) [1]


> Есть форма с множеством компонентов на ней (где-то 400),
>  с некими

сорри - не дописал )) но я думаю, смысл ясен


 
Jeer ©   (2006-12-07 17:43) [2]


> i-am-vladko ©   (07.12.06 17:20)
> Есть форма с множеством компонентов на ней (где-то 400)


А чего так мало-то ?
Ты уж грузи по полной - где-то на уровне десятков тысяч, тогда Resize сделаешь утром - вечером увидишь результат.


 
i-am-vladko ©   (2006-12-07 17:48) [3]


> Resize сделаешь утром - вечером увидишь результат

не хочу промежуточные результаты видеть )


 
i-am-vladko ©   (2006-12-07 17:48) [4]


> Resize сделаешь утром - вечером увидишь результат

не хочу промежуточные результаты видеть )


 
Jeer ©   (2006-12-07 17:51) [5]

Ну, кнопку я мониторе я показывать не буду - сам найдешь.


 
i-am-vladko ©   (2006-12-07 17:59) [6]

да... пасибки, Jeer...


 
Jeer ©   (2006-12-07 18:06) [7]


> i-am-vladko ©   (07.12.06 17:59) [6]


Да не за что - что сделал, то и получил.
Вот тут и выяснится, что работаешь на i386 + 1Mb video Trident


 
lookin ©   (2006-12-10 00:19) [8]

> [0] i-am-vladko ©   (07.12.06 17:20)


А почему на Resize? Что такое должно быть в форме, чтобы на Resize ПЕРЕНОСИТЬ компоненты на разные Tabsheet?


 
ors_archangel ©   (2006-12-10 11:34) [9]

В VCL реализован удобный механизм Anchors+Align (кстати, почему у Edit нет Align"а?), но перерисовка даже и с малым # компонентов (<<400), мне кажется, давольно дёрганая (Celeron2GHz + 256 MB video Intel845GL Extreme), что ли просто каждый контрол по несколько раз ресайзится даже(??)… а нет, они просто пересоздаются :)  впечатление - такое!.. Вобщем, дело не в cpf (components per form), а в принципе - они ж очень медленно ресайзятся, наверно, нужно как-то сразу всё "понять" и один раз изменить все размеры, а в VCL, как зреют мои очи, всё сделано итеративно, от parentов к childreнам(иль я не прав, киньте ж камень!!!)…
Вот код уменьшает "эффект", но это не решение проблемы, а просто отмазка с помощью таймера:


var
 doresize: boolean = true; // resize in next WM_SIZE request
 resizeMsg: TWMSize; // save WM_SIZE message
 tmr: int; // timer handle (WinAPI)

{ Delayed callback for WM_SIZE messages processing }
procedure DelayedResize(wnd,msg,id,time: dword); stdcall;
begin
 doresize := true; // do it!
 KillTimer(0, tmr); // kill self
 tmr := 0; // and zero handle
 MainForm.WmSize(resizeMsg); // resize
end;

procedure TMainForm.WmSize(var msg: TWMSize);
begin
 if doresize then begin
   doresize := false;
   inherited; // actual work
 end else begin
   resizeMsg := msg; // save for future
   if tmr = 0 then tmr := SetTimer(0, 1, 66, @DelayedResize); // set up delayed callback to be launched after time interval (66 ms used)
 end;
end;


 
GrayFace ©   (2006-12-11 10:52) [10]

У меня тоже есть такая проблема, когда компоненты лежат на TTabSheet.


 
i-am-vladko ©   (2006-12-14 17:37) [11]


> ors_archangel ©   (10.12.06 11:34) [9]

Огромное спасибо за помощь, Руслан!



Страницы: 1 вся ветка

Текущий архив: 2007.02.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
15-1169294773
Vovan #2
2007-01-20 15:06
2007.02.11
Большой EXE


15-1169548799
i-am-vladko
2007-01-23 13:39
2007.02.11
Model Maker


2-1169654886
NightRain
2007-01-24 19:08
2007.02.11
Как найти большее значение в двухмерном массиве?


1-1166250617
Igor23
2006-12-16 09:30
2007.02.11
Как добавить пользователя в WinXP с правами админа?


15-1169067840
Real
2007-01-18 00:04
2007.02.11
IE совсем что-то захирел...