![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Взаимодействие форм
ВашеИмя © (2011-02-11 09:44:00)Расскажите, как надо:
Есть форма [1] (допустим, отображение документов), она вызывает немодальную форму [2] конкретного документа (который имеет свои табличные части). При открытии формы [2] должны быть загружены, допустим, 2 датасета (формы и табличной части Товары). При закрытии формы [2] происходит сохранение в форме [1]. При том что из одной формы [1] могут быть открыты несколько форм [2], и форма [1] должна верно обработать оба события от формы [2]. Как верно это реализовывать?
Пробовал через callback-функции. Процедуры загрузки и сохранения должны прописываться в какой из форм? Подозреваю, что в форме [1]. Тогда как передать нужные данные из формы [2]?
Короче, запутался. Не могли бы поделиться опытом? Если с примерами, так вообще замечательно.
ВашеИмя (2011-02-13 13:16:00) [21]
> То есть, каждая форма [2] должна сохранять СВОИ данные.
Самое главное, что меня смущает в этом варианте:
1) Если форма[2] изменила данные, она уведомляет об этом форму [1], чтобы последняя обновила, допустим, строчку в гриде - здесь все отлично.
2) Если форма[2] добавила данные, она уведомляет об этом форму [1]. Тогда форма [1] должна перечитать весь датасет целиком и сфокусироваться на новом ID. Но я не хочу перечитывать весь датасет! Он ведь может оказаться и громоздким.
> про парадигму MVC(Model-View-Controlller) читать
Я в курсе MVC, и успешно (ну по крайней мере, мне так кажется) применяю в PHP. Как в Delphi с ней работать - честно говоря, не знаю (ведь DataSet, Grid - это по сути и есть части MVC. Конкретно M и V)
Игорь Шевченко (2011-02-13 12:29:00) [22]про парадигму MVC(Model-View-Controlller) читать
Anatoly Podgoretsky (2011-02-13 12:27:00) [23]> ВашеИмя (13.02.2011 12:16:40) [40]
И не будет, поскольку холивар
Юрий Зотов (2011-02-13 12:27:00) [24]> ВашеИмя (13.02.11 11:50) [38]
> как манипулировать данными?
Мне кажется, что главный недостаток Вашей схемы вот в этом:
> При закрытии формы [2] происходит сохранение в форме [1] .
1. Сохранять данные надо не в форме[1], а в БД.
2. Сохранять данные должен тот, кто с ними работает.
То есть, каждая форма [2] должна сохранять СВОИ данные. Если требуется, то при этом она может уведомлять главную форму, а через нее (если надо) - и все остальные, чтобы те могли произвести свое обновление. Само же уведомление может быть реализовано и через посылку сообщения, и в виде обработчика события - как угодно.
Форм у Вас много и они все разные - поэтому только сама форма знает, какие именно данные ей нужны, как их читать и сохранять. Отсюда вытекают ответы на [4]:
> как правильно передавать данные из подчиненной формы в главную.
Напрямую - никак. Нужно сохранить данные подчиненной формы в БД и, если надо, сделать уведомление остальных форм (через главную) - а уж те сами заберут из БД данные, которые им нужны.
> Кто должен делать инициализацию подчиненной формы?
Создавать и показывать ее должна главная форма, а свою инициализацию подчиненная форма должна делать сама. Ведь только сама подчиненная форма знает, какая именно инициализация ей нужна и как ее делать.
> Кто должен делать сохранение?
Каждая подчиненная форма должна сама сохранять свои данные. Ведь, опять же, только сама подчиненная форма знает, как и какие именно данные ей надо сохранить.
ВашеИмя (2011-02-13 12:16:00) [25]
> Anatoly Podgoretsky © (13.02.11 12:13) [39]
Ну я в самом начале спрашивал, а как верно? Но спор идет, а ясности очень мало.
Anatoly Podgoretsky (2011-02-13 12:13:00) [26]> ВашеИмя (13.02.2011 11:50:38) [38]
Мне идея не нравится.
ВашеИмя (2011-02-13 11:50:00) [27]
> Не убивай идею на корню
Тогда все-таки подскажите, посмотрев на мой код, как манипулировать данными?
Юрий Зотов (2011-02-13 11:25:00) [28]
> _Юрий (12.02.11 18:27) [31]
> Все эти модальные окна и модальные окна из модальных окон
> - ни что иное, как DOS-парадигма. В свое время (т.е при
> царе горохе) она была оправдана, хотя бы тем, что ничего
> другого не было. Когда появился Windows, интерфейс поначалу
> делали в старом стиле, потом слава богу сообразили, что
> можно сделать удобнее. Но некоторые особо стойкие не спешат
> менять веками сложившиеся традиции.
Восхищен глубиной Ваших знаний и точностью оценок как парадигм, так и людей.
Хотя со второй (не процитированной здесь) частью Вашего сообщения можно и согласиться (не для диалогов, конечно).
Но первая, процитированная - это шедевр.
Anatoly Podgoretsky (2011-02-13 11:11:00) [29]
> ВашеИмя (13.02.11 02:15) [34]
> > Anatoly Podgoretsky © (12.02.11 19:04) [32]
>
> Я уже писал о том, что если форма с этими данными уже открыта
> - она должна быть сфокусирована, а не создана заново.
Не убивай идею на корню, пользователь хочет открыть другую (одну, две, три) формы, а ты тут со своими дурными предложениями. Нафига мне ваша заливная рыба.
_Юрий (2011-02-13 10:44:00) [30]
> Anatoly Podgoretsky © (12.02.11 19:05) [33]
>
> > _Юрий (12.02.2011 18:27:31) [31]
>
> Не только пользователь, но еще и _Юрий
>
Я пересказал то, что мне поведали пользователи
> Вопрос про PostMessage/SendMessage: можно ли помимо сообщения
> передать свою структуру или класс?
>
В качестве параметра сообщения может быть передан указатель на что угодно - хоть на структуру, хоть на класс
отправка:
PostMessage(Handle, WM_USER + 1, 0, Lparam(MyObject));
...
прием:
MyObject = TMyObject(message.Lparam)
ВашеИмя (2011-02-13 02:15:00) [31]
> Не знаю как других, а меня всегда тошнило от дебильной одноэсной
> терминологии "журнал" и "табличная часть".
Хорошо, Detail-датасет. Извините, что тошнит :)
> Если при редактировании счета-фактуры нужно посмотреть информацию
> о контрагенте, то значит из этой формы должен быть доступ
> к списку контрагентов, из одной модальной формы, можно же
> открыть другую.
Форма уже открыта, зачем открывать новую
Вопрос про PostMessage/SendMessage: можно ли помимо сообщения передать свою структуру или класс?
> Anatoly Podgoretsky © (12.02.11 19:04) [32]
Я уже писал о том, что если форма с этими данными уже открыта - она должна быть сфокусирована, а не создана заново.
Anatoly Podgoretsky (2011-02-12 19:05:00) [32]> _Юрий (12.02.2011 18:27:31) [31]
Не только пользователь, но еще и _Юрий
Anatoly Podgoretsky (2011-02-12 19:04:00) [33]> _Юрий (12.02.2011 18:27:31) [31]
Но некоторые особо стойкие открыли одну форму, затем вторую, потом десятую и
это все одна и таже форма.
_Юрий (2011-02-12 18:27:00) [34]
> !!! (12.02.11 14:44) [27]
> Если при редактировании счета-фактуры нужно посмотреть информацию
> о контрагенте, то значит из этой формы должен быть доступ
> к списку контрагентов, из одной модальной формы, можно же
> открыть другую.
>
> посмотрели и закрыли, в чем проблема-то :-)
Все эти модальные окна и модальные окна из модальных окон - ни что иное, как DOS-парадигма. В свое время (т.е при царе горохе) она была оправдана, хотя бы тем, что ничего другого не было. Когда появился Windows, интерфейс поначалу делали в старом стиле, потом слава богу сообразили, что можно сделать удобнее. Но некоторые особо стойкие не спешат менять веками сложившиеся традиции.
Открыли вторую, посмотрели, закрыли, открыли третью, посмотрели, закрыли, открыли четвертую, посмотрели, закрыли, открыли первую, посмотрели, закрыли, открыли третью, посмотрели, закрыли. Никаких проблем?
Все удобно?
А вы сами попробуйте поработать.
Нам придется делать дополнительные кнопки на форме, чтобы показать то, что только что искусственно заблокировали.
Вопрос: Я хочу перетащить драг-дропом что-либо из одного документа в другой, как мне это сделать при модальном показе?
Ну да, можно обойтись. Но мы говорим об удобстве?
В результате пользователи тихо матерятся, особо сообразительные спасаются запуском второй копии программы, если повезло и это забыли прикрыть.
Только пользователь знает, удобна программа или нет.
Anatoly Podgoretsky (2011-02-12 17:10:00) [35]> KilkennyCat (12.02.2011 15:56:29) [29]
А я и близко не подхожу, что бы не тошнило.
KilkennyCat (2011-02-12 15:56:00) [36]а меня всегда тошнило от одноэс в целом. да и сейчас тоже.
Сергей М. (2011-02-12 14:52:00) [37]
> один датасет (документы), а к нему может быть несколько
> табличных частей
Не знаю как других, а меня всегда тошнило от дебильной одноэсной терминологии "журнал" и "табличная часть".
Можно подумать что "журнал" - это нечто волшебное, непостигаемое, но никак не таблично-ориентированные данные.
Фтопку.
!!! (2011-02-12 14:44:00) [38]
> То есть при редактировании счет-фактуры никогда не понадобится
> посмотреть карточку контрагента? Никогда не поверю
Если при редактировании счета-фактуры нужно посмотреть информацию о контрагенте, то значит из этой формы должен быть доступ к списку контрагентов, из одной модальной формы, можно же открыть другую.
посмотрели и закрыли, в чем проблема-то :-)
ВашеИмя (2011-02-12 11:39:00) [39]
> ну модальное окно нужно только для того чтобы внести изменения
То есть при редактировании счет-фактуры никогда не понадобится посмотреть карточку контрагента? Никогда не поверю.
то можно октрыть еще один экземпляр?
Окно конкретного документа должно быть открыто один раз. Если пользователь пытается открыть его снова - необходимо не создавать новое окно, а сфокусироваться на нем.
!!! (2011-02-12 11:37:00) [40]
> Окна могут быть неоднородными. Могут быть открыты: счет-
> фактура, договор, карточка контрагента. Если одно из них
> будет модальным - будет неудобно. Если говорить об однородном
> списке - тогда, возможно, ваше мнение имеет смысл.
ну модальное окно нужно только для того чтобы внести изменения, а смысл открыть окрыть окно для изменений, изменения не вносить, бросить его, перейти к другому, а потом если его не найти, то можно октрыть еще один экземпляр?
вся остальная информация на просмотр доступна в таблицах.
> Самописная или можно где-то посмотреть?
приобретенная, мы сами ни чего не производим.
называется БИК IBSO, где посмотреть не знаю :-(