Форум: "Основная";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];
Вниз"сгладить" 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c