Управление + ресайзинг + ~~~
От: Wind Россия  
Дата: 23.08.04 21:52
Оценка:
Предпосылки к вопросу: Рассмотрим клас приложений "простенькое по сути, но навороченный пользовательский интерфейс". В таких приложениях очень много перекрестных зависимостей, типа "нажал кнопочку 1 -> выключилась кнопочка 2 + появилась иконка 3" или "сделано изменение размера -> изменить размер CEdit".

Вопрос: Описывать эти все события в разных местах (т.е. на всех событиях от кнопок и т.д.) рехнешся, особенно, если надо будет что-то поправить. Что-то подсказывает мне, что все должно обрабатыватся централизовано, но как это ПРАВИЛЬНО сделать я не знаю. Может у кого-то есть какие-то соображения или ссылки на литературу по данной тематике? (ссылки на стати, посвященные ООП, давать не стоит)


22.03.05 14:41: Перенесено модератором из 'Архитектура программного обеспечения' — Хитрик Денис
Re: Управление + ресайзинг + ~~~
От: Аноним  
Дата: 24.08.04 02:22
Оценка:
Насчет почитать...
Пожалуй, наиболее интересны будут шаблоны Command и Mediator.
Ну и TAction помочь должнен — если на Делфи программы пишутся. Как раз и реализует Command и Mediator (ну, может и не в каноническом виде реализует, но по духу).
Re: Управление + ресайзинг + ~~~
От: Shef Россия www.devpark.ru
Дата: 29.03.05 07:09
Оценка:
Если в форме много зависимостей. Например : Если 1 чекбокс прочекан, 2 такойто радиобаттон выбран, 3 такоето значение в селектбоксе и пр , то сделать кнопку активной, иначе неактивной.

То лучше сделать 1 метод , типа RefreshControlsState(). В котором управлять enabled|disabled visible|invisible контролов.И дергать его при выполнении действий с контролами
Re: Управление + ресайзинг + ~~~
От: Dog  
Дата: 29.03.05 08:33
Оценка:
W>Вопрос: Описывать эти все события в разных местах (т.е. на всех событиях от кнопок и т.д.) рехнешся, особенно, если надо будет что-то поправить. Что-то подсказывает мне, что все должно обрабатыватся централизовано, но как это ПРАВИЛЬНО сделать я не знаю. Может у кого-то есть какие-то соображения или ссылки на литературу по данной тематике? (ссылки на стати, посвященные ООП, давать не стоит)
Написать state-машину. Рыть в сторону SWITCH-технологии. softcraft.ru вам в помощь.
Где-то между собакой и богом.
Re: Управление + ресайзинг + ~~~
От: Mistral  
Дата: 29.03.05 09:13
Оценка:
Здравствуйте, Wind, Вы писали:

W>Предпосылки к вопросу: Рассмотрим клас приложений "простенькое по сути, но навороченный пользовательский интерфейс". В таких приложениях очень много перекрестных зависимостей, типа "нажал кнопочку 1 -> выключилась кнопочка 2 + появилась иконка 3" или "сделано изменение размера -> изменить размер CEdit".


W>Вопрос: Описывать эти все события в разных местах (т.е. на всех событиях от кнопок и т.д.) рехнешся, особенно, если надо будет что-то поправить. Что-то подсказывает мне, что все должно обрабатыватся централизовано, но как это ПРАВИЛЬНО сделать я не знаю. Может у кого-то есть какие-то соображения или ссылки на литературу по данной тематике? (ссылки на стати, посвященные ООП, давать не стоит)


без ООП, как правильно было замечено, достаточно для каждой формы создать по методу, например ctrlRefresh() и вызывать его после каждого действия пользователя, способного изменить состояние контролов. Недостаток: осуществляется проврека ВСЕХ условий, в которых могут участвовать ещё неинициализированные объекты, плюс в случае совсем сложной логики легко самому запутаться, но по крайней мере всё в одном месте.

По-уму всё-таки ООП, а именно паттерн Model-View Controller
... << RSDN@Home 1.1.3 stable >>
Re[2]: Управление + ресайзинг + ~~~
От: Dog  
Дата: 29.03.05 11:05
Оценка:
M>без ООП, как правильно было замечено, достаточно для каждой формы создать по методу, например ctrlRefresh() и вызывать его после каждого действия пользователя, способного изменить состояние контролов. Недостаток: осуществляется проврека ВСЕХ условий, в которых могут участвовать ещё неинициализированные объекты, плюс в случае совсем сложной логики легко самому запутаться, но по крайней мере всё в одном месте.
Вы ещё в OnIdle всуньте.
Не надо проверять ВСЕ условия. Выделите состояния и напишите автомат.
пример
Где-то между собакой и богом.
Re[3]: Управление + ресайзинг + ~~~
От: Mistral  
Дата: 29.03.05 13:30
Оценка:
Здравствуйте, Dog, Вы писали:

M>>без ООП, как правильно было замечено, достаточно для каждой формы создать по методу, например ctrlRefresh() и вызывать его после каждого действия пользователя, способного изменить состояние контролов. Недостаток: осуществляется проврека ВСЕХ условий, в которых могут участвовать ещё неинициализированные объекты, плюс в случае совсем сложной логики легко самому запутаться, но по крайней мере всё в одном месте.

Dog>Вы ещё в OnIdle всуньте.
Dog>Не надо проверять ВСЕ условия. Выделите состояния и напишите автомат.
Dog>пример

согласен, но это всё, что в голову пришло для удовлетворения требования "без ООП"))
про switch читаю, кстати вы её использовали ? сравните с MVC если не лень))
... << RSDN@Home 1.1.3 stable >>
Re[3]: Управление + ресайзинг + ~~~
От: ZhDen Россия  
Дата: 31.03.05 07:55
Оценка:
Dog>Вы ещё в OnIdle всуньте.

А как сделать следующее: кнопка должна энейблится когда в мемо выделен текст, я начинаю выделять мышкой текст и мышка не отпуская кнопку уходит с мемо, на другие контролы, где и когда менять состояние кнопки.
Re[4]: Управление + ресайзинг + ~~~
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.03.05 11:29
Оценка:
Здравствуйте, ZhDen, Вы писали:
ZD>А как сделать следующее: кнопка должна энейблится когда в мемо выделен текст,
Повесь обработчик на изменение состояния Memo. Насколько я помню, должно послаться WM_NOTIFY с EN_CHANGE. Если не посылается, то перехвати оконную процедуру у MEMO при помощи наследования или субклассинга и перехватывай WM_LBUTTONUP.
ZD>я начинаю выделять мышкой текст и мышка не отпуская кнопку уходит с мемо, на другие контролы, где и когда менять состояние кнопки.
Э-эх... Это уже неважно — пока не отпустишь кнопку, все сообщения будут транслироваться в мемо.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Управление + ресайзинг + ~~~
От: Dog  
Дата: 31.03.05 11:33
Оценка:
ZD>А как сделать следующее: кнопка должна энейблится когда в мемо выделен текст,
Странное поведение

ZD>я начинаю выделять мышкой текст и мышка не отпуская кнопку уходит с мемо, на другие контролы, где и когда менять состояние кнопки.

Ну кнопку то вы когда-нибудь отпустите
Где-то между собакой и богом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.