| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Сообщение о закрытии формы |
| Автор: Kuper 1.2.2006, 14:35 |
| У меня есть форма fsMDIForm и две формы fsMDIChild. Проблема в следующем: мне необходимо узнать о закрытии одной из форм fsMDIChild и в зависимости от того, по нажатию на какую кнопку она была закрыта, выполнить одно из двух действий на другой fsMDIChild форме. Подскажите какие-нибудь варианты, как это сделать. |
| Автор: Rennigth 1.2.2006, 14:42 |
| то есть? из систем меню или твоя кнопка? а вообще вариантов много: - если одна форма знает о другой то можно на Event сажать. - если одна форма знает о другой то можно посылать ей сообщения. - можно сообщения слать Broadcast-ом. - можно что бы Main форма управляла ею - итд... ... Все зависит от конкретной ситуации. |
| Автор: Kuper 1.2.2006, 15:00 |
| Одна форма fsMDIChild отображает данные из БД. Другая fsMDIChild форма вызывается из первой fsMDIChild для редактирования одной записи. На второй форме есть две кнопки "Ok" и "Cancel". Мне необходимо при нажатии на кнопку "Ok" обновить на первой форме fsMDIChild данные, при условии что она ещё нее закрыта. Если она закрыта или нажата кнопка "Cancel", то ничего не делать. |
| Автор: Rennigth 1.2.2006, 15:07 | ||
| Вторую форму вызывай модально (ShowModal), т.е.: На кнопку Ок ModalResult := mrOK, на Cancel соответственно mrCancel. на дальше:
Добавлено @ 15:08 fmMDIChildDialog твоя вторая форма с кнопочками OK и Cancel. |
| Автор: Kuper 1.2.2006, 15:13 |
| Так было первоначально. Но трудность в том, что первая форма в этом случае недоступна, то есть на ней нельзя ничего посмотреть. А это бывает необходимо, т.к. на первой fsMDIChild отображаютя иерархично несколько справочников из БД. |
| Автор: Rennigth 1.2.2006, 15:21 |
| Тогда вешать Event-ы на нажатие кнопок. а формы вызывать StayOnTop. Добавлено @ 15:21 Сейчас если хочешь набросаю код. |
| Автор: Kuper 1.2.2006, 15:24 |
| Если не трудно, но приведи пример! |
| Автор: Rennigth 1.2.2006, 15:35 | ||||
|
| Автор: Kuper 1.2.2006, 15:51 |
| Это мне не подходит. Так как если будет вызываться не одна форма fsMDIChild, а несколько (поочереди или сразу не имеет значения), то для них нужно будет в Unit1 описывать нажатие данных кнопок. А нажатие данных кнопок на этих формах сопровождается не только закрытием формы, но и сохранением данных в БД. Проблема ещё в том, что форма отображения данных разрабатывал я, а формы редактирования разрабатывают другие люди и у каждого свои способы сохранения изменений. Мне лишь остаётся подключить даные формы к себе в модуль и вызывать обновления при закрытии форм редактирования по нажатии на кнопки "Ok". Поэтому мне и требуется отловить как-нибудь закрытие форм редактирования и определить как они закрыты: "Ok" - с сохранением изменений; "Cancel" - без сохранения изменений. Связи между моей формой и формами редактирования никакой нет, кроме вызова. |
| Автор: Rennigth 1.2.2006, 16:19 |
| подругому никак, или Event-ы тебе все равно должны отдавать или на всех дочерних формах (лутше пронаследоваться от одной) должна быть property какая-нибудь с OK или Cancel и ловить Onclose этих форм и проверять Property каким образом закрывали. Ну еще как вариант FindWindow, искать кнопки по Caption, кастить и также выдирать OnClick, кстати вполне реально но если честно то извращение жуткое. |