![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мерцание компонента [D7]
френк © (2005-11-24 17:27:00)Есть сложность - при изменении размеров / позиции компонента TImage в run-time происходит очень сильное мерцание. Как можно справиться? неужели нет выхода :(
OldNaum (2005-11-24 19:44:00) [1]все, прошу прощение. вываливалось в случае, если парентом была форма почему-то. пытаюсь сейчас себе объяснить "почему?" :)
френк (2005-11-24 19:00:00) [2]пробовал. все равно вываливается на AV. при вызове DubleBuffered->True, уходит на уничтожение TALImagePanel, как я и говорил =( протрассировать момент после DoubleBuffered->True не получается =(
GuAV (2005-11-24 18:49:00) [3]френк (24.11.05 18:45) [7]
А если добавить
if AParent <> nil then
френк (2005-11-24 18:45:00) [4]и снова имеем AV :(
procedure TALImagePanel.SetParent(AParent: TWinControl);
begin
inherited;
//--
if not (csDesigning in ComponentState) then
AParent.DoubleBuffered:=True;
end;
вроде парент есть :(
френк (2005-11-24 18:40:00) [5]Leonid Troyanovsky © (24.11.05 18:35) [4]
огромное спасибо "отцу" ) буду разбираться. спасибо!
френк (2005-11-24 18:37:00) [6]прошу прощение что "рожаю" посты, просто нету возможности редактировать предыдущие (
понял, что каким то образом в результате установа флага DoubleBuffered (а по другому тут никак не назовешь) у родителя - возникает процесс умервщления (вызов метода Destroy) у моего только начавшего свое создание компонента. В результате ошибка при чтении памяти или некорректная работа с указателем -> AV. Где же тогда устанавливать сей флаг, если я хочу автоматизировать процесс?
Leonid Troyanovsky (2005-11-24 18:35:00) [7]
> френк (24.11.05 18:22) [3]
> по другой причине? ) причину пытаюсь локализовать, пока
> безуспешно :*(
Во время создания контрола у него еще нет парента.
Поэтому, такие вещи могут пройти лишь после приобретения оного.
Например, в procedure SetParent; override;
--
Regards, LVT.
френк (2005-11-24 18:22:00) [8]я так понял что не все наследники TWinControl поддерживают такую фичу. можно ли определить, поддерживается ли двойная буферизация компонентом-родителем или у меня АВ вылетает по другой причине? ) причину пытаюсь локализовать, пока безуспешно :*(
френк (2005-11-24 18:15:00) [9]огромное спасибо ) напрашивается, возможно, дуратский вопрос. задавать в run-time множеству панелей DoubleBuffered:=True выглядит как-то странно. но возникла проблема - в случае если я в конструкторе моей обертки для TImage попробую задать это свойство у парента - получаем AV. даже если ограничить области применение чисто run-time'ом:
constructor TALImagePanel.Create(AOwner: TComponent);
begin
inherited;
FSkinEngine:=nil;
//--
if not (csDesigning in ComponentState) then
Self.Parent.DoubleBuffered:=True;
//--
end;
jack128 (2005-11-24 17:53:00) [10]Image1.Parent.DoubleBuffered := True;