|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как закрыть форму?
Задача очень простая. При активизации формы проверяется некое условие. Если оно выполняется, то корректная работа формы невозможна, и её надо закрыть до устпанения причин.
Имеем текст программы Код:
procedure TF_AddValueParam.FormActivate(Sender: TObject); begin .... .... if n =0 then Close; .... .... end; Наверно все правильно. Только вот мне то что делать? |
#2
|
||||
|
||||
Application.Terminate
Gravitas |
#3
|
|||
|
|||
Способ кардинальный. Закрывается программа, а не форма.
Дело в том, что вызываю и уничтожаю эту форму так: Код:
F_AddValueParam := TF_AddValueParam.Create(Self); F_AddValueParam.User := User; F_ValueList.Visible := False; F_AddValueParam.ShowModal; F_AddValueParam.Free; F_ValueList.Visible := True; |
#4
|
||||
|
||||
Цитата:
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
|||
|
|||
Мне надо выйти из формы, а выходит только из процедуры. В любой другой процедуре Close закрывает форму где бы он ни стоял. Exit завершает работу процедуры. В обработчике события OnActivate Close не хочет закрывать форму, просто выходит из процедуры. Форма, из которой надо выйти, создаётся динамически см. #3
Последний раз редактировалось VANNIK002, 09.07.2011 в 23:18. |
#6
|
||||
|
||||
1. Обязательно закрыть, спрятать недостаточно?
2. В каком контексте используется Close? Как привёл в примере, или имеется что то ещё? 3. Зачем вообще активизировать форму? Сделай проверку раньше. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
Цитата:
1. Спрятал, а дальше что, Вернуться то в вызывающую форому всёравно надо. Мало того, хотелось бы через выход, а не через другое место. 2. В этом Unit два Close. Один почти один в один как в примере. Другой в обработчике события кнопки Выход. К кнопке Выход вопросов нет. 3. Зачем активизировать форму? Я не знаю как работать с не активизированной формой. Сделать проверку раньше конечно можно, но это повлечёт серьёзное усложнение и увеличение кода. Более - менее "нормальный" выход я нашел. Сделал на форме неактивным всё, кроме кнопки Выход. Работает, но смотреть противно. Проблема закрыта, вопрос остался. Почему с помощью функции Close не закрывается форма, и не происходит возврат в вызывающую форму. Неужели я первый, кто столкнулся с этой проблемой??? |
#8
|
|||
|
|||
Выйти из формы?
Код:
Form2.close; Серьёзное усложнение и увеличение кода? Код:
... if твоя_переменная = нужному_значению then Form2.show; ... |
#9
|
|||
|
|||
Я ЧАЙНИК но прежде, чем беспокоить занятых людей, читаю книги. У меня их много. Ваш вариант в одной из них описан и мной опробован....
Чтобы определить, можно ли работать с этой формой, делается запрос к базе данных. Прежде, чем сделать запрос, надо определиться с параметрами запроса. Если в запросе нет ни одной записи, то тогда не стоит открывать форму. |
#10
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
|||
|
|||
Конечно, только из под одной кнопки пока открывается одна из трёх форм, в зависимости от положения курсора в наборе данных SQL запрса. Дальше будет больше.
Еще раз.... Как обойти возникшую проблему, я для себя решил. ОСТАЛСЯ ВОПРОС. ПОЧЕМУ НЕ РАБОТАЕТ CLOSE? Вот на какой вопрос я хочу получить ответ. |
#12
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#13
|
|||
|
|||
Могу сбросить исходники вместе с базой данных любому, кто готов помочь разобраться в причинах такого поведения Close.Только скажите куда.
|
#14
|
||||
|
||||
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#15
|
||||
|
||||
Цитата:
Код:
procedure TCustomForm.Close; var CloseAction: TCloseAction; begin if fsModal in FFormState then ModalResult := mrCancel else if CloseQuery then begin if FormStyle = fsMDIChild then if biMinimize in BorderIcons then CloseAction := caMinimize else CloseAction := caNone else CloseAction := caHide; DoClose(CloseAction); if CloseAction <> caNone then if Application.MainForm = Self then Application.Terminate else if CloseAction = caHide then Hide else if CloseAction = caMinimize then WindowState := wsMinimized else Release; end; end; Код:
function TCustomForm.ShowModal: Integer; var WindowList: Pointer; SaveFocusCount: Integer; SaveCursor: TCursor; SaveCount: Integer; ActiveWindow: HWnd; begin CancelDrag; ... Show; try SendMessage(Handle, CM_ACTIVATE, 0, 0); ModalResult := 0; repeat Application.HandleMessage; if Application.FTerminate then ModalResult := mrCancel else if ModalResult <> 0 then CloseModal; until ModalResult <> 0; Result := ModalResult; SendMessage(Handle, CM_DEACTIVATE, 0, 0); if GetActiveWindow <> Handle then ActiveWindow := 0; finally Hide; end; Пишу программы за еду. __________________ |