Модальная форма, из немодальной |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Модальная форма, из немодальной |
sheka |
23.06.2012 1:06
Сообщение
#1
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
После метода Show формы нужно сделать "некоторые действия". Эта форма также должна быть модальной. Какие есть решения данного вопроса?
Callback функция - тяжеловатое решение: не хочется создавать тип функции, хранить параметры ф-ии, условие вызова (т.к. не всегда после show нужно выполнять "некоторые действия"). Есть ли какая-то информация по Callback методам? Или надо сделать фиктивную ф-ию, содержащую данный метод? |
IUnknown |
23.06.2012 1:55
Сообщение
#2
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Callback функция - тяжеловатое решение: не хочется создавать тип функции, хранить параметры ф-ии, условие вызова (т.к. не всегда после show нужно выполнять "некоторые действия"). Не надо ничего этого делать. Просто там, где нужно делать что-то при показе формы, после создания формы назначь обработчику OnShow адрес метода, который будет делать нужные вещи. Скажем:procedure TForm1.DoMyAction(Sender : TObject);Можно то же самое переложить на конструктор (т.е, когда надо вызывать что-то дополнительное - то создавать форму вторым конструктором, который сам будет делать это присвоение OnShow, но тогда без описания типа для функции/процедуры уже не обойдется). Было бы больше информации (скажем, какого типа операции надо делать при показе формы, как вообще форма создается, почему именно модальной она должна быть) - был бы более развернутый ответ. |
sheka |
25.06.2012 13:46
Сообщение
#3
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
2 формы создаются статически: Главная и Модальная. Модальная показывается только из Главной, именно поэтому она должна быть модальной. FormShow устанавливает какие-то начальные значения для Модальной формы. Так как в Модальной форме func(param); при показе, но уже работая с начальными данными, должна выполняться не всегда, а только по заказу - появился такой вопрос.
Вот такое получилось: Как можно "культурно" передать параметр? procedure MainForm.BitBtn1Click(Sender: TObject); public Сообщение отредактировано: sheka - 25.06.2012 13:47 |
IUnknown |
25.06.2012 14:38
Сообщение
#4
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата 2 формы создаются статически: Главная и Модальная. Очень плохо. В этом случае у тебя модальная форма при втором запуске будет содержать все изменения, которые были внесены в состояние ее контролов при первой сессии работы с ней. Чтобы формы при всех запусках были одинаковы - надо создавать их динамически. Смотри что получается: положил я на форму твою BitBtn, которая передает '123' и делает какое-то действие при показе модальной формы. А действие сделал очень простое: изменить заголовок на этот самый параметр, т.е, на '123'. И рядом положил еще одну кнопку, которая просто показывает модально форму:procedure MainForm.Button1Click(Sender: TObject);Запускаю программу, и нажимаю сначала твою кнопку. Все прекрасно, заголовок изменился. Закрываю модальную форму, и жму свою кнопку. И чего я увижу в заголовке? А ведь я не просил этого, я хочу просто показать форму безо всяких действий. Понимаешь, о чем я? Со стороны-то выглядит так, как будто действие опять выполнено... Сообщение отредактировано: IUnknown - 25.06.2012 14:39 |
sheka |
25.06.2012 16:28
Сообщение
#5
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Спасибо за подсказку, но мне как раз надо (наверное ), чтобы форма была таковой.
|
IUnknown |
25.06.2012 19:58
Сообщение
#6
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
мне как раз надо (наверное ), чтобы форма была таковой. Странное желание, но тебе виднее. Я бы не стал делать так, как делаешь ты. Если надо передавать параметры - делал бы вот так:Модальная форма: typeА вот как это выглядит из главной формы: // Это вызывает доп. действие после ShowИдея понятна? |
sheka |
26.06.2012 23:36
Сообщение
#7
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Да, спасибо, идея понятна.
|
sheka |
17.07.2012 11:10
Сообщение
#8
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Как ни как параметры все равно надо хранить в описании класса формы, чтобы OnShow их оттуда поджирало, правильно? Другого выхода нет?
Сообщение отредактировано: sheka - 17.07.2012 11:11 |
IUnknown |
17.07.2012 11:55
Сообщение
#9
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Где-то же их все равно надо хранить, правда? А где, если у тебя форма показывается модально, то есть, после того, как она показана, управления она не вернет до тех пор, пока не завершится работа функции ShowModal? Только в классе формы.
|
Текстовая версия | 28.09.2024 17:02 |