![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мерцание компонент [D7, Win95/98, Win2k, WinXP]
Кодер © (2005-01-04 20:29:00)У меня две проблемы, которые сводятся к одному:
Проблема 1.При перемещении компонент TPanel, TLabel и прочих по форме, они начинают мерцать.
Проблема 2.При изменении размера формы (при выполнении приложения естественно), компоненты (TPanel, TLabel и прочие) на форме тоже соответственно меняют свои размеры и при этом они начинают мерцать.
Много чего попробовал, но эффект не изменился.
olookin (2005-01-05 17:11:00) [1]Так действительно в цикле
for i:=0 to Application.ComponentCount-1 do //это количество форм
for j:=0 to Application.Components[i].ComponentCount-1 do // это как я полагаю, количество контролов на i-й форме
if Application.Components[i].Components[j] is TPanel then //а это сам комопнент...
ssk (2005-01-05 15:38:00) [2]>Кодер
как вариант (возможно не лучший), прогони в цикле все панели да и выстави нужные свойства
Кодер (2005-01-05 15:34:00) [3]:-)
Жаль...
KSergey (2005-01-05 15:32:00) [4]> [12] Кодер © (05.01.05 15:26)
> 3, ...10??? То придется ДЛЯ КАЖДОЙ панели указывать DoubleBuffered:=
> TRUE! Вот в этом и заключается мой вопрос - незя ли как-нить
> ОДНОЙ командой выставить это свойство у ВСЕХ объектов формы?
Одной строчкой - нет. Ну если не вытягивать все в одну строку, конечно.
Кодер (2005-01-05 15:26:00) [5]Да есть конечно же!!!Но если таких панелей на форме 2, 3, ...10??? То придется ДЛЯ КАЖДОЙпанели указывать DoubleBuffered:= TRUE! Вот в этом и заключается мой вопрос - незя ли как-нить ОДНОЙкомандой выставить это свойство у ВСЕХобъектов формы?
olookin (2005-01-05 01:10:00) [6][10] Кодер © (05.01.05 00:34)
А разве а TPanel нет DoubleBuffered? Мне казалось, что есть...
Кодер (2005-01-05 00:34:00) [7]
> olookin
Объясняю:
если изменить свойство Form.DoubleBuffered:=true, то оно будет распространяться только на объекты, которые располагаются непосредственнона форме, а если объект, который мерцает :-) располагается на панеле, а панель уже на форме, то на объект, располагающийся на панеле свойство Form.DoubleBuffered:=true уже не действует! т.е. это свойство действует напосредственно только на своих прямых потомков!
olookin (2005-01-04 22:06:00) [8][8] Кодер © (04.01.05 21:58)
Не понимаю я твоей проблемы...
Кодер (2005-01-04 21:58:00) [9]
> olookin
ну к примеру высчитывается положения того же самого Label1
Label1: TLable находится прямо на форме, также на форме есть Panel1: TPanel, а на панеле находится еще один Label2: TLabel, так вот необходимо ставить Form1.DoubleBuffered:= TRUE и Panel1.DoubleBuffered:= TRUE, незя как-нить это одной строкой описать? то бишь покороче?
А как это избежать?
olookin (2005-01-04 21:55:00) [10][6] Кодер © (04.01.05 21:36)
Для проблемы 1 DoubleBuffered - единственный (как мне кажется) способ, за исключением переписи компонента.
в обработчике OnResize происзодит просто перерасчет размеров объектов и больше ничего
А что под этим имеется в виду?
Кодер (2005-01-04 21:36:00) [11]
> olookin
в обработчике OnResize происзодит просто перерасчет размеров объектов и больше ничего
Кодер (2005-01-04 21:35:00) [12]DoubleBuffered:= TRUE помогает, но тогда возникают еще два вопроса:
1. Это единственный способ?
2. Ситуация - Label1: TLable находится прямо на форме, также на форме есть Panel1: TPanel, а на панеле находится еще один Label2: TLabel, так вот необходимо ставить Form1.DoubleBuffered:= TRUE и Panel1.DoubleBuffered:= TRUE, незя как-нить это одной строкой описать? то бишь покороче?
olookin (2005-01-04 21:09:00) [13][3] Кодер © (04.01.05 21:08)
Может на OnResize срабатывает что?
Кодер (2005-01-04 21:08:00) [14]
> olookin
сам удивляюсь, но факт есть факт
olookin (2005-01-04 20:54:00) [15]Насчет ПРОБЛМЕА 1 - как и сказал P.N.P, DoubleBuffered
Насчет ПРОБЛЕМА 2 - сомнительно как-то, почему так...
P.N.P. (2005-01-04 20:36:00) [16]TForm.DoubleBuffered:=true
не пробовал?