Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
1-1079385275
Маришка
2004-03-16 00:14
2004.04.04
IE Toolbar


1-1079674479
эд
2004-03-19 08:34
2004.04.04
как колонку stringgrid сделать невидимой?


14-1078861792
LAMER-XP
2004-03-09 22:49
2004.04.04
исходник тестера


1-1079612780
sav
2004-03-18 15:26
2004.04.04
TreeView


1-1078754983
Dest
2004-03-08 17:09
2004.04.04
Картинка в меню





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский