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

Вниз

Событие на изменение любого свойства компонента?   Найти похожие ветки 

 
TransparentGhost   (2004-03-18 12:01) [0]

Написал компонент, большинство свойств которого изменяют его внешний вид. Можно ли как-то указать, чтобы при изменении любого свойства происходила его перерисовка, не описывая при етом процедур для каждого свойства?


 
Cobalt ©   (2004-03-18 12:04) [1]

А описывать то и не надо. Надо только вызывать функцию Update или Refresh или Repaint (точно не помню, но вы в справке посмотрите).


 
TransparentGhost   (2004-03-18 12:09) [2]

Да, но вызывать то надо из процедуры, на которую указывает Write в Property.


 
Cobalt ©   (2004-03-18 12:27) [3]

А если я хочу, что бы при изменении свойства, не перерисовывался компонент, а записывалось событие в файл? Или письмо отправлялось?
Именно так оно и делается - ручками.


 
TransparentGhost   (2004-03-18 12:31) [4]

А в чём разница?
Неудобно всё ето... получается нужно для каждого свойства в Write писать процедуру

Procedure ...
Begin
  Paint; ( или Update, или Refresh и т.д.)
End;

А если свойства два десятка, то и два десятка одинаковых процедур :o(


 
Cobalt ©   (2004-03-18 12:36) [5]

Ну, а как вы ещё собираетесь указывать, что именно надо делать при изменении конкретного свойства?
Можете предложить что-нибудь?


 
TransparentGhost   (2004-03-18 12:48) [6]

Вот ето я и хотел узнать...
Я же не знаю всех тонкостей, ну если нет, то нет...


 
Юрий Зотов ©   (2004-03-18 13:25) [7]

> TransparentGhost   (18.03.04 12:01)

Тут есть одна тонкость, связанная с событийным механизмом исполнения программ. Представьте себе следующую ситуацию.

Меняется какое-то свойство и начинается перерисовка. В этот момент меняется другое свойство и начинается вторая перерисовка. После ее завершения управление возвращается к прерванной операции и завершается первая перерисовка. Причем ясно, что во время второй отрисовки снова может измениться какое-то свойство и может возникнуть та же самая ситуация и т.д. - то есть, число "вложенных" перерисовок может оказаться далеко не единичным.

Что получается? Во-первых, лишние перерисовки, что может довольно заметно тормозитьработу (перерисовка - штука небыстрая). Во-вторых, накладка одних отрисовок на другие может привести к неверной итоговой отрисовке.

Разруливаются такие ситуации следующим образом. Когда изменяется какое-то свойство, то в его методе Set вместо прямого вызова перерисовки вызывается кокой-то метод типа Changed. Далее проверяется некий счетчик и только при его равенстве нулю вызывается действительная перерисовка, а управление самим счетчиком присходит в методах BehinUpdate/EndUpdate.

Механизм несложный, но полезный и легко реализуется. Примеры Вы можете найти в VCL по словам BehinUpdate/EndUpdate.



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

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

Наверх




Память: 0.48 MB
Время: 0.032 c
11-1058043525
Maxim Pushkar
2003-07-13 00:58
2004.04.04
Иконки в меню


1-1079016167
YurikGl
2004-03-11 17:42
2004.04.04
Проблемы с размером шрифтов.


1-1079615774
Serg Guk
2004-03-18 16:16
2004.04.04
Как определить имеет ли Юзер права администратора?


1-1079610622
for___
2004-03-18 14:50
2004.04.04
Как в Treeview узнать...


14-1078596392
Thor
2004-03-06 21:06
2004.04.04
Демка СТАЛКЕРа