Предпосылки к вопросу: Рассмотрим клас приложений "простенькое по сути, но навороченный пользовательский интерфейс". В таких приложениях очень много перекрестных зависимостей, типа "нажал кнопочку 1 -> выключилась кнопочка 2 + появилась иконка 3" или "сделано изменение размера -> изменить размер CEdit".
Вопрос: Описывать эти все события в разных местах (т.е. на всех событиях от кнопок и т.д.) рехнешся, особенно, если надо будет что-то поправить. Что-то подсказывает мне, что все должно обрабатыватся централизовано, но как это ПРАВИЛЬНО сделать я не знаю. Может у кого-то есть какие-то соображения или ссылки на литературу по данной тематике? (ссылки на стати, посвященные ООП, давать не стоит)
22.03.05 14:41: Перенесено модератором из 'Архитектура программного обеспечения' — Хитрик Денис
Re: Управление + ресайзинг + ~~~
От:
Аноним
Дата:
24.08.04 02:22
Оценка:
Насчет почитать...
Пожалуй, наиболее интересны будут шаблоны Command и Mediator.
Ну и TAction помочь должнен — если на Делфи программы пишутся. Как раз и реализует Command и Mediator (ну, может и не в каноническом виде реализует, но по духу).
Если в форме много зависимостей. Например : Если 1 чекбокс прочекан, 2 такойто радиобаттон выбран, 3 такоето значение в селектбоксе и пр , то сделать кнопку активной, иначе неактивной.
То лучше сделать 1 метод , типа RefreshControlsState(). В котором управлять enabled|disabled visible|invisible контролов.И дергать его при выполнении действий с контролами
W>Вопрос: Описывать эти все события в разных местах (т.е. на всех событиях от кнопок и т.д.) рехнешся, особенно, если надо будет что-то поправить. Что-то подсказывает мне, что все должно обрабатыватся централизовано, но как это ПРАВИЛЬНО сделать я не знаю. Может у кого-то есть какие-то соображения или ссылки на литературу по данной тематике? (ссылки на стати, посвященные ООП, давать не стоит)
Написать state-машину. Рыть в сторону SWITCH-технологии. softcraft.ru вам в помощь.
Здравствуйте, Wind, Вы писали:
W>Предпосылки к вопросу: Рассмотрим клас приложений "простенькое по сути, но навороченный пользовательский интерфейс". В таких приложениях очень много перекрестных зависимостей, типа "нажал кнопочку 1 -> выключилась кнопочка 2 + появилась иконка 3" или "сделано изменение размера -> изменить размер CEdit".
W>Вопрос: Описывать эти все события в разных местах (т.е. на всех событиях от кнопок и т.д.) рехнешся, особенно, если надо будет что-то поправить. Что-то подсказывает мне, что все должно обрабатыватся централизовано, но как это ПРАВИЛЬНО сделать я не знаю. Может у кого-то есть какие-то соображения или ссылки на литературу по данной тематике? (ссылки на стати, посвященные ООП, давать не стоит)
без ООП, как правильно было замечено, достаточно для каждой формы создать по методу, например ctrlRefresh() и вызывать его после каждого действия пользователя, способного изменить состояние контролов. Недостаток: осуществляется проврека ВСЕХ условий, в которых могут участвовать ещё неинициализированные объекты, плюс в случае совсем сложной логики легко самому запутаться, но по крайней мере всё в одном месте.
По-уму всё-таки ООП, а именно паттерн Model-View Controller
M>без ООП, как правильно было замечено, достаточно для каждой формы создать по методу, например ctrlRefresh() и вызывать его после каждого действия пользователя, способного изменить состояние контролов. Недостаток: осуществляется проврека ВСЕХ условий, в которых могут участвовать ещё неинициализированные объекты, плюс в случае совсем сложной логики легко самому запутаться, но по крайней мере всё в одном месте.
Вы ещё в OnIdle всуньте.
Не надо проверять ВСЕ условия. Выделите состояния и напишите автомат. пример
Здравствуйте, Dog, Вы писали:
M>>без ООП, как правильно было замечено, достаточно для каждой формы создать по методу, например ctrlRefresh() и вызывать его после каждого действия пользователя, способного изменить состояние контролов. Недостаток: осуществляется проврека ВСЕХ условий, в которых могут участвовать ещё неинициализированные объекты, плюс в случае совсем сложной логики легко самому запутаться, но по крайней мере всё в одном месте. Dog>Вы ещё в OnIdle всуньте. Dog>Не надо проверять ВСЕ условия. Выделите состояния и напишите автомат. Dog>пример
согласен, но это всё, что в голову пришло для удовлетворения требования "без ООП"))
про switch читаю, кстати вы её использовали ? сравните с MVC если не лень))
А как сделать следующее: кнопка должна энейблится когда в мемо выделен текст, я начинаю выделять мышкой текст и мышка не отпуская кнопку уходит с мемо, на другие контролы, где и когда менять состояние кнопки.
Здравствуйте, ZhDen, Вы писали: ZD>А как сделать следующее: кнопка должна энейблится когда в мемо выделен текст,
Повесь обработчик на изменение состояния Memo. Насколько я помню, должно послаться WM_NOTIFY с EN_CHANGE. Если не посылается, то перехвати оконную процедуру у MEMO при помощи наследования или субклассинга и перехватывай WM_LBUTTONUP. ZD>я начинаю выделять мышкой текст и мышка не отпуская кнопку уходит с мемо, на другие контролы, где и когда менять состояние кнопки.
Э-эх... Это уже неважно — пока не отпустишь кнопку, все сообщения будут транслироваться в мемо.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
ZD>А как сделать следующее: кнопка должна энейблится когда в мемо выделен текст,
Странное поведение
ZD>я начинаю выделять мышкой текст и мышка не отпуская кнопку уходит с мемо, на другие контролы, где и когда менять состояние кнопки.
Ну кнопку то вы когда-нибудь отпустите