Текущий архив: 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.46 MB
Время: 0.031 c