![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Caduser |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: 1 Всего: 1 |
Для сложного приложения содержащего много форм и фреймов есть необходимость централизовано управлять визуальными параметрами этих форм и фреймов, например централизовано изменять размер шрифта.
Наиболее изящным решением видится использование Интерфейсов (IInterface). Сделал тестовое приложение Test_IInterface, однако до изящества пока далеко. Посоветуйте как улучшить код? Например плохо что пришлось многократно повторять один и тот же код процедур AddToList и DeleteFromList. Давайте отрефакторим! Добавлено @ 12:00 Не дает файл прицепить в формате zip Проект создан в Delphi 2007 Это сообщение отредактировал(а) Caduser - 22.4.2009, 15:32 Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
должно давать... 1. размер не более 1 мб (если более - то ifolder.ru в помощь) 2. вырезать из архива скомпилированные модули и ехе. 3. расскажи хоть на чем написано, чтоб мне например с моим Delphi6 не мучаться и не жечь трафик. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
cemick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
А какие моменты не красивы? Ну не красиво выглядит глобальный L: TList. Лучши бы тогда уж было бы реализовать контроллер, который бы хранил список подписок и управлял ими, не надо будет и дублировать код с добавлением подписки.
Так же можно было бы все реализовать на сообщениях, а уже в контролах ты бы решал надо ему обрабатывать сообщение изменения размера шрифта или нет. Это сообщение отредактировал(а) cemick - 22.4.2009, 16:37 |
|||
|
||||
Caduser |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: 1 Всего: 1 |
Даже если реализовать контроллер то как избавиться от дублирования подписки? |
|||
|
||||
Bose |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Точно. Почему бы не создать базовый класс TMyForm = class(TForm, IOperations) ... и не реализовать это в нём. А все остальные формы от него отнаследовать. ???? А ещё лучше вынести реализацию интер
А в базовой форме объявить так
И создавать FMyOperations := TMyOperations.Create(self) в конструкторе формы а убивать в деструкторе. Ну и на самом деле, раз уж речь зашла о подписке, то лучше всего, вместо L:TList создать отдельный класс, выполняющий действия procedure AddToList(aControl:TControl);virtual; procedure DeleteFromList(aControl:TControl);virtual; procedure SetFontSizeForAll(const FontSize: Integer);virtual; Сделать для этого класса глобальную переменную. И из конструктора базовой формы просто вызывать метод AddToList(self), а из деструктора DeleteFromList. А при необходимости сменить фонт, просто вызывать SetFontSizeForAll, а этот класс уже пускай проходит по всем зарегенным формам и их контролам и меняет шрифт. |
||||||
|
|||||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
p.s. интерфейсы хороши, когда классы, реализующие их имеют разных предков. А в случае, когда всё это формы в одной программе, проще создать предка и реализовать это в нём.
В смысле, интерфейсы здесь необязательны. Это сообщение отредактировал(а) Bose - 23.4.2009, 02:06 |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
истина -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Caduser |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: 1 Всего: 1 |
Ага, в этом проекте есть хитрость, там не только формы реализуют интерфейс но и фрейм, т.е. именно разные классы! |
|||
|
||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Но фрейм сам по себе не бывает, и обычно находится на форме - поэтому в данном примере - замену шрифтов может выполнять и сама форма рекурсивно проходя по всем MyForm.Controls[i]. Но в любом случае, вместо того, чтобы реализовывать эти интерфейсы в каждом классе формы/фрейма, проще вынести их реализацию в одну форму/фрейм и отнаследоваться от них. |
|||
|
||||
Gwire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
![]() Устанавливаем где нужно в True. И все работает без interface-ров достаточно поменять шрифт на форме и вуаля... Это сообщение отредактировал(а) Gwire - 23.4.2009, 16:02 |
|||
|
||||
Gwire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
А если нет ParentFont в свойствах то, недавно узнал из этой темы,
|
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
а теперь вдумайся что вернет:
если -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Caduser |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: 1 Всего: 1 |
В проекте есть еще одна хитрость - у некоторых контролов свойство ParentFont = False т.к. изменен цвет и стиль шрифта. Если ParentFont установить в True то настройки цвета и стиля будут утеряны. Кроме того, проблема не только в том что ParentFont = False но и в том, что при изменении размера шрифта может понадобиться например изменить высоту заголовка грида. Вообщем только сама форма "знает" как и что ей корректно изменить при изменении размера шрифта. Это сообщение отредактировал(а) Caduser - 23.4.2009, 18:08 |
|||
|
||||
Caduser |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: 1 Всего: 1 |
Идея интересная, однако не до конца ее понял, реализовать ее не удалось. Предложите прям в проекте? чтоб скомпилировать можно было. Это сообщение отредактировал(а) Caduser - 24.4.2009, 14:31 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |