Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мерцание компонент [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
не пробовал?


Наверх

Титульная страница Поиск, карта сайта Написать письмо