Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Вниз

Мастера почему не работает процедура Close. На onShow   Найти похожие ветки 

 
Vt   (2003-09-24 07:16) [0]

я проверяю существование пароля через булевую переменную если
да то работаем, если нет то закрываю. Код ниже. Форма модальная.
Но Close не срабатывает, форма все равно открывается.
Подскажите что не так? Точку останова я ставил на Close до этого шага программа доходит.
procedure TForm1.FormShow(Sender: TObject);
begin
try
If not Pass Then
begin
MessageBeep(MB_ICONHAND);
Close;//Не срабатывает
end;
except
end;
end;


 
Anatoly Podgoretsky   (2003-09-24 07:45) [1]

Не понятно логика, зачем показываешь, если показывать не собираешься?
Не делай этого и проблемы не будет.


 
Vt   (2003-09-24 08:02) [2]

Я так и сделал, зачечем первый раз хотел на onShow
потому что окно запускается из разных мест программы и из разных форм, не хотелось увеличивать код.
Почему не срабатывает Close я так и не разобрался.
Предполагаю что идет какой либо конфликт между модальной формой
InputQuery куда вводится пароль и модальным окном которое хочу закрыть если пароль не верен.


 
ЮЮ   (2003-09-24 08:25) [3]

Сначала вызови InputQuery а затем, если пароль верен, уже свою форму.

Да и постоянно спрашивать один и тот же пароль во время работы программы - это как-то "недружественно"


 
Vt   (2003-09-24 08:33) [4]

>ЮЮ © (24.09.03 08:25) [3]
Сначала вызови InputQuery а затем, если пароль верен, уже свою форму.

А я так и делал, по другому нет смысла.


 
Vt   (2003-09-24 08:39) [5]

Уточню "А я так и делал, по другому нет смысла."- это я поспешил написать, первый раз конечно делал не так, сейчас так и делаю но пропадает смысл сделать все одной процедурой на OnShow


 
Dimka Maslov   (2003-09-24 08:45) [6]

Close не срабаытвает именно потому, что вызываешь его из OnShow. При вызове этого метода для формы устанавливается флаг, запрещающий её закрытие, что бы это ограничение обойти, надо вместо Close писать PostMessage(Handle, WM_CLOSE, 0, 0);
Но этот метод имеет недостатки, поскольку форма всё-таки сначала появится на экране, а потом сразу исчезнет. Чтобы избавиться и от этого, раз форма модальная, нужно написать процедуру, которая сначала будет проверяь пароль, а потом уже выводить модальную форму:

function ShowModalForm: Integer;
begin
Result := -1;
if not Pass then MessageBeep(MB_ICONHAND) else begin
with TForm1.Create(Application) do begin
try
Result := ShowModal;
finally
Free;
end;
end;
end;
end;


 
Vt   (2003-09-24 08:53) [7]

>Dimka Maslov © (24.09.03 08:45) [6]
Реализацию я уже выполнил интересовало именно почему не закрывалась.
Спасибо за разъяснение данного вопроса.


 
willys   (2003-09-24 10:05) [8]

можно вызвать Exception на OnShow. тогда форма не будет отображена. например так:


procedure TForm1.FormShow(Sender: TObject);
begin
if not Pass then
Abort; // "тихое" исключение
end;


 
Alexander1966   (2003-09-24 10:23) [9]

Используй:
Application.Terminate;


 
Юрий Федоров   (2003-09-24 10:36) [10]

Совершенно верно, что логика неправильная - нужно сначала проверить, а потом показать. Но всеже если нужно закрыть форму в OnShow, достаточно отправить сообщение
PostMessage(Handle, WM_CLOSE, 0, 0);



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
1-18441
3APA3A
2003-09-24 23:53
2003.10.06
Проблема с ValueListEditor ом


3-18244
k_len
2003-09-16 11:36
2003.10.06
Отчеты


14-18559
Jiura32d
2003-09-18 20:31
2003.10.06
Дайте please компонент для предосмотра перед печатью!!!!


1-18460
LinOS
2003-09-26 05:35
2003.10.06
Как определить что форма создана


6-18517
ilka
2003-08-07 16:17
2003.10.06
странные веши творятся с TClientSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский