| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Использование интерфейсов (IInterface) |
| Автор: Caduser 22.4.2009, 11:56 |
| Для сложного приложения содержащего много форм и фреймов есть необходимость централизовано управлять визуальными параметрами этих форм и фреймов, например централизовано изменять размер шрифта. Наиболее изящным решением видится использование Интерфейсов (IInterface). Сделал тестовое приложение Test_IInterface, однако до изящества пока далеко. Посоветуйте как улучшить код? Например плохо что пришлось многократно повторять один и тот же код процедур AddToList и DeleteFromList. Давайте отрефакторим! Добавлено @ 12:00 Не дает файл прицепить в формате zip Проект создан в Delphi 2007 |
| Автор: pseud 22.4.2009, 14:26 |
должно давать... 1. размер не более 1 мб (если более - то ifolder.ru в помощь) 2. вырезать из архива скомпилированные модули и ехе. 3. расскажи хоть на чем написано, чтоб мне например с моим Delphi6 не мучаться и не жечь трафик. |
| Автор: cemick 22.4.2009, 16:37 |
| А какие моменты не красивы? Ну не красиво выглядит глобальный L: TList. Лучши бы тогда уж было бы реализовать контроллер, который бы хранил список подписок и управлял ими, не надо будет и дублировать код с добавлением подписки. Так же можно было бы все реализовать на сообщениях, а уже в контролах ты бы решал надо ему обрабатывать сообщение изменения размера шрифта или нет. |
| Автор: Caduser 22.4.2009, 18:08 | ||
Даже если реализовать контроллер то как избавиться от дублирования подписки? |
| Автор: Bose 23.4.2009, 02:05 |
| p.s. интерфейсы хороши, когда классы, реализующие их имеют разных предков. А в случае, когда всё это формы в одной программе, проще создать предка и реализовать это в нём. В смысле, интерфейсы здесь необязательны. |
| Автор: pseud 23.4.2009, 10:34 | ||
истина |
| Автор: Caduser 23.4.2009, 13:08 | ||||
Ага, в этом проекте есть хитрость, там не только формы реализуют интерфейс но и фрейм, т.е. именно разные классы! |
| Автор: Bose 23.4.2009, 13:57 | ||
Но фрейм сам по себе не бывает, и обычно находится на форме - поэтому в данном примере - замену шрифтов может выполнять и сама форма рекурсивно проходя по всем MyForm.Controls[i]. Но в любом случае, вместо того, чтобы реализовывать эти интерфейсы в каждом классе формы/фрейма, проще вынести их реализацию в одну форму/фрейм и отнаследоваться от них. |
| Автор: Gwire 23.4.2009, 15:59 |
Устанавливаем где нужно в True. И все работает без interface-ров достаточно поменять шрифт на форме и вуаля... |
| Автор: Gwire 23.4.2009, 16:18 | ||
А если нет ParentFont в свойствах то, недавно узнал из http://forum.vingrad.ru/index.php?showtopic=256195&view=findpost&p=1846897,
|
| Автор: pseud 23.4.2009, 16:29 | ||
а теперь вдумайся что вернет:
если |
| Автор: Caduser 23.4.2009, 18:03 | ||
В проекте есть еще одна хитрость - у некоторых контролов свойство ParentFont = False т.к. изменен цвет и стиль шрифта. Если ParentFont установить в True то настройки цвета и стиля будут утеряны. Кроме того, проблема не только в том что ParentFont = False но и в том, что при изменении размера шрифта может понадобиться например изменить высоту заголовка грида. Вообщем только сама форма "знает" как и что ей корректно изменить при изменении размера шрифта. |
| Автор: Caduser 24.4.2009, 14:31 | ||||||
Идея интересная, однако не до конца ее понял, реализовать ее не удалось. Предложите прям в проекте? чтоб скомпилировать можно было. |