Главная страница
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.046 c
14-1078424670
Ig
2004-03-04 21:24
2004.04.04
Выборы Президента России 2004


6-1071939663
KoLoB
2003-12-20 20:01
2004.04.04
Разорвать соединение


1-1079375763
Илья
2004-03-15 21:36
2004.04.04
Вопрос по использованию EZTwain


7-1074013301
незнайка
2004-01-13 20:01
2004.04.04
Посекторная запись на диск. Хм. Есть проблема.


3-1078803868
Дмитрий2004
2004-03-09 06:44
2004.04.04
Как можно распечатать QuickReport