Главная страница
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.052 c
14-1078946455
***ghost***
2004-03-10 22:20
2004.04.04
Пароль в 98-м винде!


14-1078828017
}|{yk
2004-03-09 13:26
2004.04.04
Насколько криптостоек такой вариант шифрования?


8-1070889136
kopcap
2003-12-08 16:12
2004.04.04
NURBS и OpenGL


1-1079281660
RomeoGolf
2004-03-14 19:27
2004.04.04
Динамические массивы, 6 версия


14-1078935501
juiceman
2004-03-10 19:18
2004.04.04
справочник WinApi