Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.019 c
14-1078769139
Patriarch
2004-03-08 21:05
2004.04.04
Смайлики


14-1078927349
MPS
2004-03-10 17:02
2004.04.04
Как просто вывести текст на печать в Си++?


6-1074956009
aser
2004-01-24 17:53
2004.04.04
Конект по диалапу на комп. без сетевой карты


14-1078760321
Knight
2004-03-08 18:38
2004.04.04
Люди, а слабо написать все свои ники?


11-1057167313
BelchonokH
2003-07-02 21:35
2004.04.04
не закрывается windows




   Наверх