|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.11.2008, 20:00 | #1 |
Регистрация: 13.11.2008
Сообщений: 9
|
Проблема при использовании модальной формы
Есть 2 формы с кнопокой на каждой форме. При нажатии на кнопку на первой форме - всплывает модальная форма.
При нажатии на кнопку на модальной форме - форма закрывается, происходит обработка информации(цикл с предусловием, с глобальной переменной u) и при необходимом условии должна опять возникнуть модальная форма после нажатия кнопки на ней -должна опять выполняется та же процедура, но уже с текущего значения u. Проблема в следующем... цикл отрабатывается, модальная форма по идее закрыта, но первая форма никаким образом не активна. |
13.11.2008, 21:37 | #2 |
Пользователь
Регистрация: 13.11.2008
Сообщений: 18
|
Насколько я понял. Проблема в том, что вы модальную форму не закрываете методом Close, а скрываете методом Hide либо Visible:=false; Так вот, надо пользоваться методом Close, что бы управление возвращалось "главной" форме.
|
13.11.2008, 23:06 | #3 |
Форумчанин
Регистрация: 06.11.2008
Сообщений: 100
|
У модальной формы есть такое свойство, как ModalResult=(mrNone, mrOk, mrCancel и др.). Это же свойство имеется у любой кнопки, расположенной на модальной форме. По умолчанию оно равно mrNone (т.е. 0). Если кнопке присвоить любое значение, отличное от mrNone, форма будет закрываться автоматически (и не нужно писать Close). Теперь при щелчке на кнопке вы можете выполнять какие-либо действия. Если по условию вам требуется оставить форму открытой, установите свойство ModalResult := mrNone. Тем самым вы запрещаете форме закрываться, а ваша переменная цикла сохранит свое значение.
|
13.11.2008, 23:29 | #4 |
Регистрация: 13.11.2008
Сообщений: 9
|
Использовал различные способы закрытия модальной формы -
form2.close или form2.free В первом случае главная форма в итоге имеет фокус, но, если перетаскивать формы - то происходит, как бы, дублирование форм. Во втором случае у главной формы нет фокуса. Может плохо отследил за созданием модальной формы. В следующем посте выкладываю код на обзор и указание мест ошибок. Есть некая величина к(начальное значение,k=10, на нулевой период). Есть 5 периодов. каждый период из k вычитается некая величина A[j], где j - номер периода. И если к<3,то должно создаться модальное окно и при нажатии на кнопку в этом окне оно должно закрыться,к k должно прибавиться k:=k+10. и цикл дожен продолжиться. Вот такая суть. |
13.11.2008, 23:31 | #5 |
Регистрация: 13.11.2008
Сообщений: 9
|
а вот и код:
(пока не особо разбираюсь в этикете форума, поэтому высылаю в посте. если надо будет -выложу тхт-файлом) Код:
Код:
Заранее спасибо за комментарии |
13.11.2008, 23:40 | #6 |
Регистрация: 13.11.2008
Сообщений: 9
|
Да, к понятию о дубликате формы... перед тем как нажать на кнопку на второй форме её переместить, а потом когда она опять создастся - то получится ативная 2ая форма и неактивный дубликат, оставшийся после нажатия в первый раз.
Вот скрин: |
14.11.2008, 01:00 | #7 |
Форумчанин
Регистрация: 06.11.2008
Сообщений: 100
|
Ваша проблема в том, что вы дважды создаете экземпляр формы TForm2 (один раз из основной формы, а второй из самой формы Form2). Такое решение может вызвать бесполезный расход памяти, поскольку при каждом создании экземпляра формы перекрывается текущее значение указателя Form2. В результате неоднократного выполнения этого кода вы получите формы, не связанные ни с какими переменными.
|
14.11.2008, 01:06 | #8 |
Форумчанин
Регистрация: 06.11.2008
Сообщений: 100
|
Код:
|
14.11.2008, 12:18 | #9 |
Регистрация: 13.11.2008
Сообщений: 9
|
to MalexG
В ваших исправлениях дублирование пропадает, но также пропадает обработка команд из TForm2.Button1Click, в те моменты, когда (k<3) and (u<n). PS. я так понимаю вы имели ввиду под ModalResult := mrNone; эту строку:form2.Button1.ModalResult:= mrNone; |
14.11.2008, 14:45 | #10 |
Форумчанин
Регистрация: 06.11.2008
Сообщений: 100
|
Что касается ModalResult, то я имел ввиду Form2.ModalResult := mrNone.
Поймите у модальной формы при обработке клика на кнопке, она (кнопка) присваивает свое значение ModalResult форме. Но речь не об этом. Я более внимателным образом поковырялся в вашей программе и вот что накопал: 1. Не следует использовать глобальные переменные из Form1 в Form2; 2. Значения переменных следует передавать в функцию реализации модальной формы (см. прикрепленный проект); 3. Необходимые вычисления нужно производить в Form1, т.е. необходимо процедуру proschet() переместить в этот модуль. Итог всего сказанного в прикрепленном проекте. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Баллонная подсказка при использовании Shell_NotifyIcon | Fantom | Win Api | 1 | 28.09.2008 00:41 |
Виснет приложение при использовании winsock | TR1PL3X | Работа с сетью в Delphi | 1 | 31.03.2008 09:14 |
Как при использовании FileWrite перейти на новую строку? | Artem | Win Api | 4 | 03.09.2007 17:02 |